BUILD WITH JEVROUTER
Your first request.
One endpoint for the models in your project.
- Create an account and use your allocated early-access credits. Paid top-ups are not open yet.
- Create a key, choose allowed models, and save the key once.
- Choose a published model from the catalog and set your environment variable.
Python · OpenAI SDKimport os
from openai import OpenAI
client = OpenAI(
base_url="https://api.jevrouter.io/v1",
api_key=os.environ["JEVROUTER_API_KEY"],
)
response = client.chat.completions.create(
model="YOUR_PUBLISHED_MODEL_ID",
messages=[{"role": "user", "content": "Hello"}],
max_tokens=256,
)
print(response.choices[0].message.content)Base URL: https://api.jevrouter.io/v1. Send Authorization: Bearer $JEVROUTER_API_KEY. Model list: GET /v1/models.
Automatic routing
Use jev/auto after enabling an evaluated Balanced policy in Routing. Your key must allow both jev/auto and the real generation models. Jev returns task signals; your policy and cost limits select an eligible model.
Set jev.max_cost_usd to bound a request’s maximum quoted generation cost. Low confidence, timeouts, or disabled Jev data sharing use the policy’s eligible default. No eligible default produces an error. A fixed model is never silently changed to another model.
The supported contract
POST /v1/chat/completions supports text conversations, JSON and SSE responses, and the parameters listed on each model page. Streaming usage requires stream_options: { include_usage: true }.
Verified models may support function tools and strict JSON schemas. Schemas use an object root, required properties, and additionalProperties: false; supported keywords are type, properties, required, additionalProperties, items, enum, description, and anyOf. Maximum depth is 8 and maximum schema nodes is 128. Tool execution is your application’s responsibility.
Image/audio input, embeddings, Responses API, BYOK, arbitrary provider options, and stored chat history are outside the first release. Unsupported parameters return an explicit error.
Errors and safe retries
Keep the X-Jevrouter-Request-Id response header. Inspect status at GET /v1/requests/:id using the original API key, or use Requests in the console.
| 400 | Unsupported parameters or model constraints |
|---|---|
| 401 / 403 | Invalid key, permissions, or blocked project |
| 402 | Balance, budget, or request cost limit |
| 409 | Idempotency conflict or request already accepted |
| 429 | Request/token rate limit; respect Retry-After |
| 5xx | Provider or service failure; inspect request status first |
Send a unique Idempotency-Key for each intended generation. Reusing it never generates again or replays the response; it returns the accepted request’s status. Keys are retained for at least 24 hours. Changed bodies conflict. After a stream begins or upstream execution is uncertain, the service does not retry generation automatically.
Know what you pay
A request reserves its conservative input bound plus hard maximum output. The default output limit is 1,024 tokens unless changed in project settings. Settlement charges actual reported usage, or a labeled estimate if usage is missing, capped by the reserved amount. Unused credit is released.
USD prices are recorded with each request. Jev classification and unsuccessful upstream attempts are platform costs. Project and key budgets use UTC calendar months and count consumed plus reserved amounts. Only unspent, unreserved credits from a payment can be refunded to the original payment method.
Data and privacy
Requests are sent to the selected generation provider. Automatic routing also sends the conversation to Jev when project sharing is enabled. Disabling Jev sharing uses the configured default model. Provider retention remains subject to that provider’s policies.
By default, Jevrouter stores request metadata, usage, route decisions, and billing records; it does not store conversation bodies or completion text. Playground conversations live in the current browser page and disappear on reload. API key plaintext is shown once and only a hash is stored.