BGE-M3 API
BAAI open multilingual text embeddings, 1024 dimensions, for retrieval across 100+ languages.
BGE-M3 is a text embedding model from BAAI, available on OttoPort's OpenAI-compatible API as the model ID bge-m3 at $0.011 per 1M input tokens as of 2026-10-14.
Provider
BAAI
Price
$0.011 per 1M input tokens
Model ID
bge-m3
Type
text embedding model
BGE-M3 API pricing
What OttoPort bills for BGE-M3, and what that works out to per unit. Rates are read from the same catalog the gateway meters against, and were current on 2026-10-14.
| Per 1M tokens | $0.011 | input text; the vectors are not billed |
|---|---|---|
| 10,000 passages | $0.055 | of about 500 tokens each, embedded once |
| Tokens per $1 | 90,909,090 |
No subscription and no minimum — OttoPort bills prepaid credits against usage. See the full rate card.
Call BGE-M3 in three lines
Send "model": "bge-m3" to POST https://ottoport.ai/api/v1/embeddings with an OttoPort key. No BAAI account, no waitlist, no separate SDK.
curl https://ottoport.ai/api/v1/embeddings \
-H "Authorization: Bearer $OTTOPORT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "bge-m3",
"input": ["How do refunds work?", "Refunds are issued within 5 days."]
}'from openai import OpenAI
client = OpenAI(
api_key="op-...", # your OttoPort key
base_url="https://ottoport.ai/api/v1", # the only line that changes
)
resp = client.embeddings.create(
model="bge-m3",
input=["How do refunds work?", "Refunds are issued within 5 days."],
)
vectors = [item.embedding for item in resp.data]import OpenAI from "openai";
const client = new OpenAI({
apiKey: "op-...", // your OttoPort key
baseURL: "https://ottoport.ai/api/v1", // the only line that changes
});
const resp = await client.embeddings.create({
model: "bge-m3",
input: ["How do refunds work?", "Refunds are issued within 5 days."],
});
const vectors = resp.data.map((item) => item.embedding);Before you start
- 1. Create a key at /api-keys.
- 2. Top up credits — the smallest pack is $25.
- 3. Paste the request. It returns on the same request.
Full reference at /docs, or drive it from an agent with the MCP server and CLI.
Request parameters
The body POST https://ottoport.ai/api/v1/embeddings accepts for BGE-M3.
| Field | Type | Required | Notes |
|---|---|---|---|
| model | string | Yes | Always bge-m3 for BGE-M3. |
| input | string | array | Yes | One text, or an array of up to 256, each non-empty; 600,000 characters in all. One vector comes back per text, in order. Input tokens are the billed unit. |
| dimensions | integer | No | Fixed at 1024; any other value is refused. |
| encoding_format | string | No | `float` (default) or `base64`, little-endian float32. |
BGE-M3 direct vs through OttoPort
BGE-M3 is the same model either way — what changes is how many accounts, keys, and integrations you carry to reach it.
| BAAI direct | Via OttoPort | |
|---|---|---|
| Accounts and keys | A BAAI account, plus one more for every other model you add | One OttoPort account and one key for the whole catalog |
| Request shape | BAAI's own SDK and response format | OpenAI-compatible — point baseURL at OttoPort and change the model string |
| Switching models | A new integration per provider | Replace bge-m3 with any other model ID in the catalog |
| Billing | A separate invoice and contract per provider | Prepaid credits, no subscription, one usage ledger |
| Provider outages | Your call fails | Configured backup routes are tried in order on provider failure |
Embed queries and documents with the same model.
Batch up to 256 texts in one request.
Pick `dimensions` once and keep it.
BGE-M3 API questions
Cost, keys, and model IDs for BGE-M3 on OttoPort.
How much does the BGE-M3 API cost?
On OttoPort, BGE-M3 costs $0.011 per 1M input tokens as of 2026-10-14. For scale, 10,000 passages: $0.055. Billing is prepaid usage with no subscription and no minimum, and the current rate is always published at ottoport.ai/pricing.
How do I get a BGE-M3 API key?
You do not need a BAAI key. Create an OttoPort account, generate a key at ottoport.ai/api-keys, and send it as "Authorization: Bearer <key>" to POST https://ottoport.ai/api/v1/embeddings with "model": "bge-m3". The same key reaches every other model in the catalog.
What is the model ID for BGE-M3?
The OttoPort model ID for BGE-M3 is bge-m3. Pass it as the model field on POST https://ottoport.ai/api/v1/embeddings, or list it programmatically from GET https://ottoport.ai/api/v1/models.
Can I call BGE-M3 with the OpenAI SDK?
Yes. Set the OpenAI SDK's base URL to https://ottoport.ai/api/v1, use an OttoPort API key, and pass bge-m3 as the model. Embeddings follow the OpenAI embeddings shape, so existing code works after changing two lines.
How many dimensions does BGE-M3 return?
1,024, always: BGE-M3 is not trained to be shortened, so a dimensions value other than 1024 is refused. Embed every text you compare with the same model.
Do I need a BAAI account to use BGE-M3?
No. OttoPort connects to BAAI on your behalf, so one OttoPort account covers BGE-M3 and every other model in the catalog — no per-provider contracts, keys, or invoices.
Other text embedding models on the same API
Same endpoint, same key — swapping model is a one-string change from bge-m3.
Voyage 4 API
Voyage AI
$0.066 per 1M input tokens
Voyage 4 Lite API
Voyage AI
$0.022 per 1M input tokens
Qwen3 Embedding 8B API
Qwen
$0.011 per 1M input tokens
Text Embedding 3 Small API
OpenAI
$0.022 per 1M input tokens
Text Embedding 3 Large API
OpenAI
$0.144 per 1M input tokens
Browse the full catalog — every model with its provider and per-unit price.