state) and a set of typed questions, and it answers each question with probabilities. For example, “is this ticket about billing?” comes back as 0.97, not as a sentence.
The gateway serves Jev on TypeSafe’s own endpoint, POST /v1/systemone, with TypeSafe’s request and response format unchanged. So TypeSafe’s Python and JavaScript SDKs work against Barndoor once you change their base URL and API key.
Jev answers only on
/v1/systemone. It does not answer /chat/completions, /responses, or /messages. On My Models, Jev routes and models carry a Classifier badge so they aren’t mistaken for chat models.Before you start
An admin needs to make Jev available in LLM Management. There are two ways to serve it:- TypeSafe AI provider. Add the TypeSafe AI provider with a TypeSafe API key from the TypeSafe console, and enable
jev-latest, or a pinned version such asjev-1.13.0if you need answers that don’t change when TypeSafe releases a new model. - OpenRouter. OpenRouter also serves Jev, as
~typesafe/jev-latest. Enable that model on an OpenRouter provider.
jev) so callers use one stable name, and the route can fail over between TypeSafe and OpenRouter.
A few rules apply, and the gateway enforces them when you save:
- A route holds Jev or chat models, never both. A request that failed over from one kind to the other would fail, so the gateway refuses a mixed route. In the Create Model Route and Add Targets dialogs, models of the other kind are disabled.
- Jev can’t be a routing-policy slot. A slot has to answer chat.
- Jev can be a routing policy’s determiner. See Routing Policies.
Find the name to call
Open Settings → My Models. A Jev route, or a Jev model listed under Standalone Models, carries a Classifier badge. Use its name in themodel field: the route name (for example jev), or <provider name>/<model> for a standalone model. The copy button next to each name gives you the exact string.
When you can see a Jev model, Gateway Endpoint also lists the System One URL:
Call Jev
Authenticate with a Barndoor gateway API key (bd-…), the same as for chat models.
TypeSafe’s SDKs add /v1/systemone themselves, so give them the gateway URL without /v1: https://app.barndoor.ai/api/llm-gateway.
- Python
- JavaScript
- cURL
Install TypeSafe’s SDK with You can also set
pip install typesafe-sdk (or uv add typesafe-sdk).TYPESAFE_BASE_URL and TYPESAFE_API_KEY in the environment instead of passing them.app.barndoor.ai with your own Barndoor host if you have one. The request body and the answers are TypeSafe’s format: see TypeSafe’s API reference for the question types (noul, choice, score) and how to read the answers.
Usage and cost
Jev requests appear in LLM usage reporting like any other model, with the same user, API key, and budget attribution. TypeSafe charges for input tokens only, so Jev’s output tokens are recorded but priced at zero.Troubleshooting
A Jev model fails when called from a chat client
A Jev model fails when called from a chat client
Jev answers only on
/v1/systemone. Sending its name to /chat/completions, /responses, or /messages returns a 400 saying the provider does not support that endpoint and to send Jev to POST /v1/systemone. Call it with TypeSafe’s SDK or the /v1/systemone endpoint instead.The SDK gets a 401 with "invalid JWT header"
The SDK gets a 401 with "invalid JWT header"
Check the base URL. TypeSafe’s SDKs add
/v1/systemone themselves, so a base URL ending in /v1 sends the request to /v1/v1/systemone, which isn’t a gateway API path, and the gateway rejects your API key there. Use https://app.barndoor.ai/api/llm-gateway.I can't add Jev to an existing route
I can't add Jev to an existing route
That route holds chat models, and a route can’t mix the two. Create a separate route for Jev.