GET /v1/models lists the model families we serve for your key. Send a model by its family alias, such as gpt-5.5 or gemini-3.5-flash. A dated snapshot of an alias works too. Any other name returns 400 model_not_carried before the request reaches your provider.
Every endpoint reaches every model
POST /v1/responsesspeaks OpenAI Responses.POST /v1/chat/completionsspeaks OpenAI Chat Completions.POST /v1/interactionsspeaks Google Interactions.POST /v1/messagesspeaks Anthropic Messages.POST /v1beta/models/{model}:generateContentspeaks Google GenerateContent.POST /model/{modelId}/conversespeaks Amazon Bedrock Converse.
Models that run the Flex Race
Only OpenAI and Gemini sell a flex tier we race, and only on some models.- OpenAI:
gpt-5.6,gpt-5.6-sol,gpt-5.6-terra,gpt-5.6-luna,gpt-5.5,gpt-5.5-pro,gpt-5.4,gpt-5.4-mini,gpt-5.4-nano,gpt-5.4-pro,gpt-5.2,gpt-5.1,gpt-5,gpt-5-mini,gpt-5-nano,o3,o4-mini - Gemini:
gemini-3.5-flash,gemini-3.1-pro-preview,gemini-3.1-flash-lite,gemini-3-flash-preview,gemini-2.5-pro,gemini-2.5-flash,gemini-2.5-flash-lite
start_within on any other model returns 400 flex_model_not_capable. Claude is the exception. Anthropic publishes no flex tier, and Claude still races a cheaper tier of its own on managed keys, without streaming, inside a window of three to ten minutes. See Flex Racing with Claude models.
Gemini has no auto tier, so send default for Gemini’s standard tier.
Asking the API
GET /v1/models returns the catalog for your key, and GET /v1/models/{id} returns one entry. Both are OpenAI-compatible, so the OpenAI SDK reads them with no changes.
flexinference block. flex_race says whether a duration runs the race on the model. tiers lists the tier names it serves for your key. providers lists the routes that run it, starting with its direct route.
Every claude-* model reads false on flex_race and can still race, because a Claude race turns on your organization and your request, not on the model.
capabilities answers the same questions for every route the model runs on, keyed by route name. Each entry covers the content parts it takes and the structured-output forms it accepts. It also says how the route handles a reasoning block. The answers differ by route on the same model. claude-opus-4-8 takes a JSON schema on anthropic and refuses one on bedrock.
Read enforced_by first. flexinference means we check the entry before we call the provider, so an unsupported is a 400 from us. provider means we forward your request and the provider decides. It also decides whether it runs the model. Read those entries as what we pass on, not as a promise.
pricing lists what each route’s provider charges for the model, in dollars per million tokens. input and output are always there, and cache_read and cache_write appear where the provider prices caching. We bill from the same numbers. A route with no entry has no published rate.
Open-source models
We run open-source families on Cloudflare Workers AI, inside the network at the edge. Their route iscloudflare, and they run at the standard tier, so send default. They do text, streaming, and function calling.
- OpenAI:
gpt-oss-120b,gpt-oss-20b - Meta:
llama-3.3-70b,llama-3.1-8b,llama-4-scout-17b-16e-instruct,llama-3.1-70b-instruct-fp8-fast,llama-3.1-8b-instruct-fp8,llama-3.2-1b-instruct,llama-3.2-3b-instruct,llama-3.2-11b-vision-instruct,llama-guard-3-8b - Qwen:
qwen3-30b,qwen2.5-coder-32b-instruct,qwq-32b - Mistral:
mistral-small-3.1,mistral-7b-instruct-v0.1 - Moonshot AI:
kimi-k2.5,kimi-k2.6,kimi-k2.7-code - Z.ai:
glm-4.7-flash,glm-5.2 - Google:
gemma-4-26b-a4b-it - DeepSeek:
deepseek-r1-distill-qwen-32b - IBM:
granite-4.0-h-micro - NVIDIA:
nemotron-3-120b-a12b - AI Singapore:
gemma-sea-lion-v4-27b-it
llama-3.2-11b-vision-instruct, llama-4-scout-17b-16e-instruct, and gemma-4-26b-a4b-it. Send an image to any other family and the request fails by name rather than dropping it.
We also run open-source families on DeepInfra. Their route is deepinfra, and like Workers AI they run at the standard tier, so send default.
You can name an open-source model three ways, so code you already wrote keeps working. Our name, the provider’s model name, or the provider’s full id all reach the same model:
gemma-4-26b-a4b-it and llama-4-scout-17b-16e-instruct go to Workers AI unless you ask for DeepInfra:
["cloudflare"] and you get the edge instead.
What passes through
Tool calling, structured outputs, vision, and reasoning pass through to the provider you chose. Use that provider’s own fields for them. Don’t sendservice_tier. We set the tier from start_within, so a request carrying its own returns 400 service_tier_not_allowed.
A native field works only on the provider that owns it. Send top_k to a Claude model and it passes through. Send it to a GPT or Gemini model and you get 400 unsupported_parameter, never a quiet loss.