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:

What will not happen is the alias being repointed while you sleep.

What you get

FieldValue
Model aliasauto/embed
Dimensions1024
EndpointPOST /v1/embeddings
AuthAuthorization: Bearer sk-…
ResponseOpenAI format — {data, model, usage}
Candidates behind the alias1

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:

tts

auto/tts

Text to speech.

rerank

auto/rerank

Reordering retrieved documents by relevance.

asr

auto/asr

Speech to text.

image

auto/image

Text to image.

video

auto/video

Text to video.