Docs · Embeddings
An embedding alias that won't swap under you
/v1/models lists four embedding entries. Three are model names you can call directly; one is an alias — auto/embed — and it points at exactly one model, permanently. It will never quietly hand your request to a different one, and that limit is the point. Here is what it protects you from.
The call
curl https://freemodel.online/v1/embeddings \
-H "Authorization: Bearer sk-your-key" \
-H "Content-Type: application/json" \
-d '{"model":"auto/embed","input":"the quick brown fox"}'
from openai import OpenAI
client = OpenAI(
base_url="https://freemodel.online/v1",
api_key="sk-your-key",
)
r = client.embeddings.create(
model="auto/embed",
input=["first document", "second document"],
)
print(len(r.data[0].embedding)) # 1024
input takes a single string or an array. The response is the OpenAI shape — {data, model, usage} — so any client that already speaks embeddings reads it without a shim.
Why there is no fallback chain
Most routing layers treat a dead model as a dead request and retry on the next candidate. For chat that is harmless — a different model still answers your question, and you can see the answer changed.
For embeddings it destroys your data.
Embedding models do not share a coordinate system. We measured three candidates that all return 1024-dimensional vectors — same length, same type, same JSON. Ask all three for the embedding of the same sentence and compare them:
A vs B 0.003
A vs C 0.010
B vs C 0.006
Effectively zero. They are three orthogonal vector spaces that happen to have the same number of dimensions — which is exactly why the failure is so easy to miss. Nothing about the response looks wrong.
Embed your documents with model A. Query with model B. The result is not worse retrieval. It is random retrieval, with no error and no warning, and you find out weeks later when search results stop making sense.
So auto/embed has one candidate. If that model is unavailable the request fails and says so. Failing loudly is the only safe behaviour when the alternative is silently poisoning an index you spent months building.
The full write-up, including the code to reproduce those three numbers against your own endpoints, is in Three 1024-Dimension Embedding Models, Three Coordinate Systems.
When the model changes
Swapping the embedding model behind an alias is a breaking change, not an upgrade. So it ships as a new name — auto/embed-v2 — and the old one keeps working.
That means your options are explicit:
- Pin
auto/embedand nothing moves under you. - Move to the new name on your own schedule, rebuild the index, keep both live during the cutover.
What will not happen is the alias being repointed while you sleep.
What you get
| Field | Value |
|---|---|
| Model alias | auto/embed |
| Dimensions | 1024 |
| Endpoint | POST /v1/embeddings |
| Auth | Authorization: Bearer sk-… |
| Response | OpenAI format — {data, model, usage} |
| Candidates behind the alias | 1 |
The other three entries in the list — qwen-embed/text-embedding-v3, text-embedding-v4 and qwen3.7-text-embedding — are callable by name if you want to experiment or you already standardised on one. The alias exists so that production code has something stable to pin.
Embeddings are free to call while the endpoint is in preview. If that changes it will be announced here before it takes effect, and existing keys keep working.
Related capabilities
The same naming scheme covers the other non-chat modalities — one alias per capability, listed in /v1/models:
auto/tts
Text to speech.
auto/rerank
Reordering retrieved documents by relevance.
auto/asr
Speech to text.
auto/image
Text to image.
auto/video
Text to video.