Prefer Swagger UI? Click hereThe same API in the classic OpenAPI explorer.
// reference · 7 min read

Model catalog

Ringside fronts 19 upstream providers behind one OpenAI-compatible surface, so a single ko_ key and one base URL reach OpenAI, Anthropic, Google, Mistral, the open-weight inference hosts and the image, audio, embedding and rerank models, all metered against one wallet. This page is the catalog: the providers grouped by how Ringside talks to them, the four model-ref prefixes (fc:, match:, slot:, dyn:) with worked refs, the embedding models you can build a vector store on, the rerank models for two-stage retrieval and the @region residency suffixes. Live per-token prices live on the pricing page; this page is the surface, not the price sheet.

The catalog is the set of models you can name in a request. Ringside does not run any of them. It is a gateway: you send an OpenAI-shaped request to https://api.fightclub.pro/v1, name a model with a prefixed ref, and Ringside resolves that ref to a concrete model, picks the right upstream provider, signs the upstream call with a key you never see and meters the cost back to your wallet. One key reaches every provider in the table below. You are not juggling an OpenAI key, an Anthropic key and a Together key in your own code, and you are not maintaining four SDKs.

Because the surface is OpenAI-compatible, the mental model is short. Point the OpenAI SDK at the Ringside base URL, put your ko_ key in the Authorization: Bearer header, and prefix your model strings with fc:. That prefix is the one thing the catalog forces on you, and it exists so the same call can pin one exact build or hand the choice to Ringside. The rest of this page is the inventory and the grammar.

Providers

Ringside reaches 19 providers through three integration styles. The style is an implementation detail you almost never see: a fc:openai/gpt-4o-mini ref and a fc:groq/llama-3.3-70b ref are the same request shape to you. It matters in two places. Region pinning is wired for OpenAI and for Claude (via Bedrock and Vertex) only, and a handful of providers are reached as raw upstream HTTP rather than through the Vercel AI SDK, which is why their exact model ids track the upstream catalog.

OpenAI-compatible (12)

These speak the OpenAI Chat Completions wire format upstream, so Ringside fronts them through a shared OpenAI-compatible adapter. This is the bulk of the open-weight inference market plus a few first-party APIs.

Twelve providers reached through the OpenAI-compatible adapter. Model ids after the slash track each upstream catalog.
ProviderRef prefixTypical use
OpenAIfc:openai/...GPT chat + vision, embeddings, DALL-E images, Whisper + TTS audio, moderation
Groqfc:groq/...Low-latency open-weight chat (Llama, Mixtral) and Whisper STT
Togetherfc:together/...Broad open-weight chat catalog
Fireworksfc:fireworks/...Fast open-weight chat + function calling
Perplexityfc:perplexity/...Web-grounded answer models
DeepSeekfc:deepseek/...DeepSeek chat + reasoning models
xAIfc:xai/...Grok models
Cerebrasfc:cerebras/...Very high token-rate open-weight chat
SambaNovafc:sambanova/...Fast open-weight chat
OpenRouterfc:openrouter/...Aggregator fan-out to many upstreams
Ollamafc:ollama/...Self-hosted / local open-weight models
Coherefc:cohere/...Command chat, embed-v3 embeddings, rerank-v3.5

AI-SDK native (3)

These three do not speak the OpenAI wire format natively, so Ringside drives them through their first-party Vercel AI SDK adapters and translates the request and response to the OpenAI shape for you. Anthropic is the provider that prompt caching and match: family resolution are wired for today.

ProviderRef prefixNotes
Anthropicfc:anthropic/...Claude chat + vision. Only provider with prompt caching and match: family resolution.
Googlefc:google/...Gemini chat + vision, text-embedding-004 embeddings.
Mistralfc:mistral/...Mistral chat + mistral-embed embeddings.

Custom (4)

These need bespoke transport: a cloud signing flow, a hosted-inference job model or an enterprise-deployment URL. Two of them, Bedrock and Vertex, are also how Claude gets region-pinned (covered below).

ProviderRef prefixNotes
Azure OpenAIfc:azure/...OpenAI models on an Azure deployment endpoint.
Bedrockfc:bedrock/...AWS-hosted models. Also the @eu-bedrock / @us-bedrock route for Claude residency.
HuggingFacefc:huggingface/...Hosted inference endpoints.
Replicatefc:replicate/...Hosted open models, incl. Flux image generation.
Names track the upstream catalog

Provider names are stable; the exact model id after the slash is whatever the upstream calls it (fc:openai/gpt-4o-mini, fc:groq/llama-3.3-70b). When in doubt, pick the model from the pricing table or the dashboard playground rather than guessing an id, since a ref that resolves to an unknown model fails the call rather than silently substituting one.

Model reference syntax

Every model value is a typed reference, not a bare name. The prefix declares how the string becomes a concrete model. A bare name like gpt-4o is rejected with 400 invalid_model_ref, because Ringside refuses to guess whether you meant a pinned build, the newest in a family or an alias you control. There are four prefixes.

`fc:<provider>/<model>`
Pinned. Resolves to exactly that model with no indirection. fc:openai/gpt-4o-mini is OpenAI gpt-4o-mini and nothing else. Use it for evals, regression baselines and anything you need byte-for-byte stable across a deploy.
`match:<provider>/<family>`
Family resolution. Resolves to the newest catalog model in the family and rolls forward as new versions ship. Add a floor (match:anthropic/sonnet>=4) or a pin (match:anthropic/sonnet=4). Anthropic families (sonnet, opus, haiku) are supported today.
`slot:<alias>`
A named pointer you define on the platform side that maps to a fc: ref. Repoint slot:default-chat once and every caller picks up the new target on the next request, with no code change.
`dyn:<name>`
A dynamic profile that picks a model per request from a pool, based on the request shape (token count, tools, vision, json_schema, difficulty). Two identical-looking calls can resolve differently; read the resolved model from the response headers.
// four refs, four resolution strategies
{ "model": "fc:openai/gpt-4o-mini" }          // pinned, exact
{ "model": "match:anthropic/sonnet>=4" }      // newest Sonnet at v4+
{ "model": "slot:default-chat" }              // alias you repoint
{ "model": "dyn:cost-aware" }                 // profile picks per request

// rejected
{ "model": "gpt-4o" }                         // 400 invalid_model_ref

Resolution is server-side on every metered call (chat, runs, assistants, conversations) and always lands on a concrete fc:<provider>/<model> before a provider is touched. That concrete id, not your selector, is what gets metered, cached and capability-checked. The chat response reports what resolved: X-Ringside-Model-Resolved carries the concrete id for a match:/slot:/dyn: ref, and X-Ringside-Dynamic-Profile / X-Ringside-Dynamic-Reason explain a dyn: pick. The full grammar, the roll-forward rules and every resolution error live in the model references concept.

Region and data residency suffixes

Append @<region> to a fc: ref to pin where the call runs. The suffix attaches to fc: refs only, it is opt-in, and a ref without one routes normally with no residency guarantee. Residency changes where the call executes, not what it costs: billing stays on the canonical model price. An unknown suffix returns 400, and a suffix on a base that does not support it (an OpenAI suffix on a non-OpenAI model, or a Bedrock/Vertex suffix on a non-routable model) returns 400 unsupported_provider.

Six residency suffixes. Region-pinned responses cache separately from their unpinned and cross-region siblings. Full detail in the regions concept.
SuffixCloud and regionValid for
@euOpenAI direct, EUfc:openai/* models
@usOpenAI direct, USfc:openai/* models
@eu-bedrockClaude via AWS Bedrock, eu-west-1Region-routable Claude models
@us-bedrockClaude via AWS Bedrock, us-east-1Region-routable Claude models
@eu-vertexClaude via Google Vertex, europe-west1Region-routable Claude models
@us-vertexClaude via Google Vertex, us-east5Region-routable Claude models
curl https://api.fightclub.pro/v1/chat/completions \
  -H "Authorization: Bearer $FC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "fc:anthropic/claude-opus-4.6@eu-bedrock",
    "messages": [{"role":"user","content":"Summarise this clause."}]
  }'

Embedding models

Embeddings power the /v1/embeddings endpoint and the embedding side of managed vector stores. When you create a vector store you fix its embedding_model at creation time. Changing it later means a blue-green re-embed via POST /v1/vector_stores/{id}/migrate, since a vector indexed under one model cannot be compared against vectors from another. The store accepts the bare model id from the set below.

The supported embedding models for vector stores. The create and migrate endpoints accept exactly this set; default is text-embedding-3-small.
Model idProviderDimensions
text-embedding-3-smallOpenAI1536 (shortenable via dimensions)
text-embedding-3-largeOpenAI3072 (shortenable via dimensions)
text-embedding-ada-002OpenAI1536
embed-english-v3.0Cohere1024
embed-multilingual-v3.0Cohere1024
voyage-3-largeVoyage1024
voyage-3-liteVoyage512
mistral-embedMistral1024
text-embedding-004Google768
On /v1/embeddings, model is a bare name

The /v1/embeddings endpoint takes the bare embedding model id (text-embedding-3-small), not a fc:-prefixed ref. The dimensions param only shortens output on text-embedding-3-* models, and once you pick a number you must keep it stable across a corpus or the vectors will not compare. Input is capped at 2,048 strings per call, each up to ~100,000 characters.

Rerank models

Rerank is the second stage of two-pass retrieval. Vector search recalls a wide candidate set, then a reranker scores each candidate against the query and you keep the top few. The /v1/rerank endpoint mirrors the Cohere /v2/rerank wire shape and routes to one of two providers. Refs here are fc:-prefixed.

A ref outside this set returns 400 unsupported_rerank_model. Rerank takes up to 1,000 documents (<=100,000 chars each) and a query up to 10,000 chars.
Model refProviderNotes
fc:cohere/rerank-v3.5CohereGeneral-purpose reranker.
fc:cohere/rerank-multilingual-v3.0CohereMultilingual corpora.
fc:voyage/rerank-2VoyageVoyage flagship reranker.
fc:voyage/rerank-2-liteVoyageCheaper, faster Voyage tier.
curl https://api.fightclub.pro/v1/rerank \
  -H "Authorization: Bearer $FC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "fc:cohere/rerank-v3.5",
    "query": "What is the capital of France?",
    "documents": [
      "Paris is the capital of France.",
      "Berlin is the capital of Germany."
    ],
    "top_n": 1,
    "return_documents": true
  }'

Image, audio and moderation models

The catalog is not only chat. Image generation routes to OpenAI (DALL-E), Stability AI and Replicate (Flux). Audio covers speech-to-text on OpenAI Whisper and Groq Whisper, and text-to-speech on OpenAI and ElevenLabs. Moderation runs through /v1/moderations, which meters at $0 so you can screen text inline before or after a chat call without paying for the check. These media refs are fc:-prefixed like any other (fc:openai/dall-e-3, fc:replicate/flux-pro, fc:elevenlabs/...). A media ref sent to /v1/chat/completions returns 400 invalid_model_for_chat; use the matching endpoint.

Failure modes

Most catalog errors are 400 invalid_request_error and carry a stable code you should branch on (never the human message). The request id is the X-Request-Id response header, not a body field.

The error body always carries type, code and message; param is "model" on the ref errors.
StatuscodeCause
400invalid_model_refA bare name, an unknown prefix, an empty fc:/slot: body or an unknown @region suffix.
400invalid_model_for_chatThe ref resolved to a non-chat model (image / audio / embedding) on /v1/chat/completions.
400unsupported_providerA match: provider not yet wired, or an @region suffix on a base that does not support it.
400unsupported_rerank_modelA /v1/rerank model outside the four-model set above.
400byok_not_supportedA user: bring-your-own-key ref. The Ringside API does not accept these; use fc: or slot:.
503platform_not_configuredNo upstream provider key is configured for the resolved model on the server.
503upstream_unavailableThe provider errored and no fallback in a model:[] cascade succeeded.
Prices are not on this page

Per-token input and output prices for every model, plus prompt-cache discounts and managed-RAG storage rates, live on the pricing page and refresh from the live catalog every 60 seconds. There is no Ringside platform fee. You pay the published provider rate and nothing on top of it.

When you want one model name that keeps working as the underlying model improves, reach for match:, slot: or dyn: on the production hot path and pin with fc: anywhere you measure. Watch X-Ringside-Model-Resolved in your logs to catch a roll-forward the moment a family advances.