The route you call does not limit which provider you can use. OpenAI receives OpenAI-format bodies; every other provider receives System One bodies. Answers come back in the format of the route you called.
Add the model with Model Types set to Decision. A chat model cannot serve these routes. Custom Endpoint pass-through of TypeSafe (the Jev guide) is a different path — it does not use
/v1/systemone on the gateway, and it has no cost tracking.Provider capabilities
Legend:
- ✅ Supported by provider and TrueFoundry
- Provided by provider, but not by TrueFoundry
- Provider does not support this feature
For every gateway endpoint and provider, see Supported APIs.
The AI Gateway translates between the two formats per target:
- Text parts of an OpenAI
inputare joined into the System Onestate. System One questions are named by their map keys when they go to OpenAI. - A noul’s
criteriahave no OpenAI field, so they are folded into theinstructionsOpenAI sees. Missing instructions on a System One question get a generic fallback such as “Is this true of the input?”. safety_identifieris forwarded to OpenAI and dropped for other providers.usageis left in the provider’s own shape so cost tracking still works.
Add a decision model
Pick the provider, add the model with Model Types = Decision, then call either route with the TrueFoundry FQNaccount-name/model-display-name.
1
Add the provider account
Follow the provider page for credentials and base URL:
- TypeSafe — TypeSafe API key; optional Base URL for Cloudflare Workers AI
- OpenAI
- OpenRouter
- Perplexity
- Databricks
- Microsoft Foundry
- Self-hosted vLLM
2
Add the model with type Decision
Set Model Types to Decision. Pin a versioned Model ID where the provider offers one (
jev-1.13.0 rather than jev-latest) so confidence thresholds stay stable across releases.3
Call either route
Send your TrueFoundry API key to the AI Gateway. The gateway injects the upstream credential. Set
GATEWAY_BASE_URL without a trailing slash./v1/systemone
The System One format. Send the content in state and named questions in questions. Answers come back keyed by those names.
Set GATEWAY_BASE_URL to your gateway base URL without a trailing slash and TFY_API_KEY to your TrueFoundry API key.
"model" to an OpenAI decision FQN asks OpenAI instead and still returns System One answers keyed by question name.
Every question has a
type and an optional instructions field.
See the TypeSafe API reference for the full System One schema.
/v1/decisions
The OpenAI Decisions format. Send the content in input and a list of questions. Answers come back as a list in the same order, echoing each name.
"model" to a TypeSafe Jev FQN sends the same questions to TypeSafe and still returns OpenAI-shaped answers.
Every question takes
instructions and an optional name that is echoed in its answer. An unnamed question is keyed question_<index> when it is translated to System One.
A question the OpenAI model will not answer comes back as
{"type": "refusal", "name": ...}.
Image input
input_image parts only work on OpenAI models, on /v1/decisions. image_url must be an inline data: URL — hosted URLs and file ids are not supported.
images field instead — see TypeSafe.
Limits
These requests are rejected with a400 before any provider is called:
OpenAI requires
instructions on every question. When a System One question without instructions goes to OpenAI, the AI Gateway fills in a generic one.
Self-hosted vLLM answers only choice questions, and needs a vLLM build that includes vllm#59299 (after v0.31.0).
Virtual models
A virtual model whose model types includedecision can load-balance or fail over across decision targets, including a mix of OpenAI and System One providers. The AI Gateway translates each attempt into that target’s dialect and translates the successful answer back into the dialect of the route you called.
If every target cannot represent the request — for example every remaining target is System One and the body contains input_image — the gateway returns 400 with No model available for this request can represent this decision.
Auto Routing can also use a TypeSafe Jev model as the classifier that picks simple / medium / complex for a chat virtual model. That is a routing setting, not a call you make to /v1/systemone. See Auto Routing.
Custom Endpoints vs these routes
The Jev Custom Endpoints guide forwards raw HTTP tohttps://api.typesafe.ai. You keep TypeSafe credentials on the gateway, but the path is /proxy-api/.../v1/systemone, cost tracking is unavailable, and you cannot switch providers by changing model.
/v1/decisions and /v1/systemone use models in your catalog, so you get access control, tracing, cost tracking, virtual models, and the ability to change provider without changing the request body. Prefer the native TypeSafe integration unless you specifically need a transparent proxy.
Next steps
- TypeSafe — add Jev, including via Cloudflare Workers AI.
- OpenRouter — call Jev with an OpenRouter API key.
- Auto Routing — let Jev pick the chat-model tier for each request.
- TypeSafe API reference — System One question types.
- OpenAI Decisions — OpenAI request and response schema.