Models
The GetVibe API model list and how to address models in the model field. Route variants via the :network, :nexus, :sub5 suffixes — different route, price and caching behaviour.
The model field takes the exact model name. The full list with prices and cache support is on the catalog page.
- IDs use
vendor/model(OpenRouter-style), e.g.anthropic/claude-opus-5;claude-opus-5is accepted as an input alias with identical billing. model:aliaspins a channel, e.g.openai/gpt-5.6-sol:yellow.GET /v1/modelslists one ID per model;?variants=1returns the full list.
How a request is billed
Most channels are marketplace books: many sellers offer the same model at different prices. Your request fills at the cheapest offer that takes it, and you are billed what that fill cost plus our commission. The per-token rate is therefore a range, not a single number — it depends on which rung of the book filled.
GET /api/catalog and GET /v1/pricing publish that range per model (pricing) and per channel (channels[]), read from the same ladder GET /api/model-ladder?model=<model> serves with its offer counts.
| Parameter | Type | Description |
|---|---|---|
basis | "fill" | "fixed" | "mixed" | "fill": billed at the rung that fills, plus commission. "fixed": billed at the listed rate (from = typical = to). "mixed" (model level only): some channels of each kind. |
priceFrom | {input, output} | The cheapest rung — the lowest rate a request can be billed. |
priceTypical | {input, output} | The offer-weighted median rung: half the offers on the book stand at or below it. It describes where supply sits, not a forecast of your next fill. At model level it is the default channel’s. |
priceTo | {input, output} | The dearest rung on the book — the most a request without max_price can be billed. |
pool | string | null | Channel only. The book the channel buys from, as the ladder prints it. Each pool is published as exactly one channel. |
maxPriceCeiling | {input, output} | null | Channel only. When a request carries max_price, this channel will not fill above the lower of max_price and this ceiling. Without max_price no ceiling is sent. |
minChargePerRequest | number | USD per REQUEST, not per 1M. Present only on a channel whose supplier charges a per-request minimum (supplier rule): the least one successful request is billed, for example $0.0000143. A request whose tokens would cost less — a short one, or one that is mostly cache reads — is billed this amount. At model level (nullable) it is the default channel’s. |
fill | {"24h", "7d"} | null | Channel only (and on each served pool of /api/model-ladder). Where our paid requests on this channel actually filled: per rung, the share of requests and of tokens; avgPrice, the token-weighted average paid — the typical price you will actually pay; and the shares that filled below or above today’s ladder (books move) or were billed the per-request minimum. null for a window with fewer than 20 requests. |
ladder | string | Model only. The /api/model-ladder URL with the full rung list and offer counts. |
inputUsd / outputUsd | number | Kept for compatibility. On a fill channel they equal priceFrom — the floor, not a fixed price. |
"pricing": {
"basis": "fill",
"unit": "USD per 1M tokens",
"priceFrom": { "input": 0.465, "output": 2.325 },
"priceTypical": { "input": 0.5, "output": 2.5 },
"priceTo": { "input": 1.5, "output": 7.5 },
"minChargePerRequest": 0.0000125,
"ladder": "/api/model-ladder?model=claude-opus-5.5",
"ladderUpdatedAt": "2026-09-25T08:45:01.522Z",
"ladderStale": false
},
"channels": [
{ "address": "claude-opus-5.5:claude-code", "isDefault": true,
"inputUsd": 0.465, "outputUsd": 2.325,
"basis": "fill", "pool": "cc/claude-opus-5-5",
"priceFrom": { "input": 0.465, "output": 2.325 },
"priceTypical": { "input": 0.5, "output": 2.5 },
"priceTo": { "input": 1.5, "output": 7.5 },
"maxPriceCeiling": { "input": 0.6, "output": 3 },
"minChargePerRequest": 0.0000125 }
]claude-code: a request fills on whichever rung takes it, between priceFrom and priceTo. To cap what a request can cost, send max_price — without it any rung on the ladder may fill, with it the request never fills above your cap. To see the depth behind a price, read the ladder; to see where requests actually land, read its fill. Each request in /v1/generations carries cost_detail.realisedRate, the per-1M price it was billed at, so you can place it on the ladder. Every successful request costs at least the channel’s minChargePerRequest, so a very small or mostly cached request is billed that minimum rather than its per-token amount.Variants of one model
Most models have several public variants. The default variant is chosen automatically (priority follows your account or key settings). To pin a specific variant for a request, add its alias after a colon to the model name:
"model": "gpt-6.1-sol" // default variant (auto)
"model": "gpt-6.1-sol:yellow" // explicit public variant
"model": "claude-opus-5.5" // use an id from the catalogExample request with an explicit variant:
curl https://getvibeapi.com/v1/chat/completions \
-H "Authorization: Bearer $GETVIBE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-opus-4.8:yellow",
"messages": [{"role": "user", "content": "Hello!"}]
}'
# :yellow — pin a public variant for this requestVariant aliases
Use only aliases from the catalog. Available suffixes:
| Parameter | Type | Description |
|---|---|---|
:yellow | suffix | Public variant; availability and price depend on the model. |
:codex / :claude-code | suffix | Subscription pools; the models each one serves are listed in the catalog. |
:pixel | suffix | Public variant for media models. |
List models via the API
You can fetch the full list of available model ids programmatically:
curl https://getvibeapi.com/v1/models \
-H "Authorization: Bearer $GETVIBE_API_KEY"Besides id/object/created/owned_by, every entry carries type (chat, embedding, rerank, image, video, audio, music, 3d), architecture.input_modalities / output_modalities and endpoints — where to send a request for that model.
- The default list holds chat, embedding and rerank models only, so an IDE model picker never offers a model that cannot chat.
- Media models (image, video, audio, music, 3D) are listed on request:
?type=image(or a list:?type=image,video),?output_modalities=image;?modality=and?category=are synonyms oftype. - Everything at once:
?all=true,?type=allorGET /v1/models/all. Media is listed together with its variants (model:alias) — exactly the id to send. GET /v1/models/{id}returns one model; an unknown id is a 404 withcode: "model_not_found".
curl "https://getvibeapi.com/v1/models?type=image,video" \
-H "Authorization: Bearer $GETVIBE_API_KEY"Subscribe to catalog updates (RSS and JSON Feed)
Every model added to the catalog and our what's-new posts are published in an open feed — no key needed. Read it from an RSS reader or from an agent, so it can change its approach as models change. The feed holds the whole history, page by page, and every event carries what an agent needs to call the model right away.
/rss.xml(alias/feed.xml) is RSS 2.0;/feed.jsonis JSON Feed 1.1 with a feed-level_metablock and a_catalogblock per event.- Pages: 50 events each,
?limit=up to 100, newest first. The next (older) page isnext_urlin JSON Feed and<atom:link rel="next">in RSS (RFC 5005, withrel="first"andrel="previous"too). The links carry a cursor, so a model published while you page through never shifts an event you already read. Use the links as returned. - Filters:
?kind=text|image|video|audio|music|3d|newsand?since=YYYY-MM-DD— only events from that UTC day on, inclusive. Filters work together with paging and are kept in the links. - A
model_addedevent carries the title, the date the model appeared in the catalog, a link to the model page, a description and, in_catalog: the public ids to send asmodel(no:aliasroute spellings and no supplier names), the endpoints, input and output modalities, context window and max output, capabilities (tools, JSON / structured output, vision, reasoning and its levels, caching), the public starting price in USD with its unit, for media every request parameter with its allowed values, a ready request (curland JSON) and a docs link. Anewsevent is a what's-new post. - An event's
guidnever changes. The feed has no recorded generation results, only an example request. - Poll at most every few minutes: every page has its own
ETagandLast-Modified; sendIf-None-Match/If-Modified-Sinceand an unchanged page answers304with no body. To fetch only what is new, remember the date of the last event you processed and request?since=with it.
curl -sS "https://getvibeapi.com/feed.json?since=2026-10-01&limit=100"
curl -sS -i https://getvibeapi.com/feed.json -H 'If-None-Match: "<ETag from the previous response>"' # -> 304