BUILD WITH JEVROUTER

Your first request.

One endpoint for the models in your project.

  1. Create an account and use your allocated early-access credits. Paid top-ups are not open yet.
  2. Create a key, choose allowed models, and save the key once.
  3. Choose a published model from the catalog and set your environment variable.
Python · OpenAI SDK
import 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.

400Unsupported parameters or model constraints
401 / 403Invalid key, permissions, or blocked project
402Balance, budget, or request cost limit
409Idempotency conflict or request already accepted
429Request/token rate limit; respect Retry-After
5xxProvider 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.