Changelog
Changes to the Belarel API, newest first. Additive changes and deprecations are both recorded here; see Versioning & deprecations for what each kind means for your integration.
2026-10-02 — Changes
Section titled “2026-10-02 — Changes”A set of corrections to the developer preview. Most make the API behave more like OpenAI’s; the ones marked Breaking can change what your integration receives.
Parameters
Section titled “Parameters”- Breaking — Chat Completions and Responses refuse any parameter they do not support, by name,
with
400 unsupported_parameterandparamset to the field. Before, unknown parameters were ignored. Refused by name:nabove 1,logprobs,top_logprobs,logit_bias,store: true,prediction,audio, non-textmodalities, atool_choicethat forces a tool, the legacyfunctions; on Responses alsotruncation: "auto"andbackground: true. See Unsupported parameters. top_p,stop(up to 4),seed,presence_penalty,frequency_penaltyandtool_choice: "none"are now forwarded to the model (top_pon Responses too). Values are validated:temperaturefrom 0 to 2,top_pfrom 0 to 1, token budgets as positive integers.- New
belarel.ignored_parameterson answers: the parameters the model’s provider ignored, when there are some.supported_parametersinGET /v1/modelslists what is forwarded to each model. - Breaking —
toolssent to a model that cannot call tools are refused with400 model_lacks_tools. Before, they were removed and the call answered without tool calls.
Answers
Section titled “Answers”finish_reasonnow reports why the model stopped:lengthwhenmax_tokenscut the reply,content_filter,tool_calls, elsestop. On Responses, a reply cut bymax_output_tokenshasstatus: "incomplete"andincomplete_details.reason: "max_output_tokens", and a stream ends withresponse.incomplete.POST /v1/embeddingsacceptsencoding_format: "base64"(little-endian float32), the default of the official OpenAI SDKs, which now work with no setting.
Errors and authentication
Section titled “Errors and authentication”- Breaking — A missing key, or a bearer that is not a Belarel key, answers
401 invalid_api_keyin the OpenAI shape on every endpoint, including/v1/chat/completionsand/v1/responses. - When the model’s provider refuses a request as written, you get
400 invalid_requestwith the provider’s explanation, cleaned — fix the request rather than retrying it. A provider rate limit is a429. On a BYOK key, a provider key the provider rejects is400 byok_credential_rejected. - Breaking — Spend refusals use public codes only:
insufficient_credits,budget_exceeded,spend_refused(402) andpricing_unavailable(503).price_book_missingis no longer returned. - Streamed failures carry the same
codeas non-streamed ones.
Long calls
Section titled “Long calls”- A call runs for at most about five minutes. A non-streamed call that runs out of time answers
504 request_timeoutwithx-should-retry: false; a streamed one ends with an in-bandrequest_timeouterror. - Streams send a
: keep-alivecomment every 15 seconds.
Cost and caps
Section titled “Cost and caps”- A call the provider refuses before doing any work costs nothing: its reservation is released.
- A provider server error or a lost connection with nothing produced and no usage reported now counts the input share of the estimate against the key’s caps, instead of the full estimate. That amount counts against the caps only and is not billed. See what a failed call counts.
- Embeddings whose price is not known when the answer is sent report
cost.source: "pending".
Catalog and inspection
Section titled “Catalog and inspection”- Breaking —
belarel.provideris removed from answers and fromGET /v1/models;owned_byis the model’s vendor. - Breaking —
GET /v1/requests/{id}no longer returnsproviderorgateway. - The keyless
GET /v1/modelsshows the price list the platform publishes as its public price (pricing_basis: "public_price_book"), or no price when none is published. - The OpenAPI description lists bare hosts, so a client generated from it no longer requests
/v1/v1/….
Keys and idempotency
Section titled “Keys and idempotency”- Required tags apply to model calls only: reading
/v1/models,/v1/usage,/v1/credits,/v1/requests/{id}and managing/v1/keysno longer need them. - The idempotency fingerprint is now a keyed hash held by the server, for every key. A request
sent with an
Idempotency-Keybefore this change and repeated within its 24 hours answers422 idempotency_key_reused.
2026-10-02 — Developer preview
Section titled “2026-10-02 — Developer preview”The first public release of the API, under /v1. This entry describes the surface at preview launch; the entry above lists what changed since.
Inference
Section titled “Inference”- POST
/v1/chat/completions— the OpenAI Chat Completions format, as JSON or server-sent events. Streams end with a chunk carryingusageandbelarel, thendata: [DONE]. Supportsmax_tokens/max_completion_tokens,temperature, image inputs on vision models, client-executed function tools (relayed astool_calls),response_format(text,json_object,json_schema),reasoning_effort(minimal,low,medium,high) andweb_searchwhere your organization allows it. - POST
/v1/responses— the OpenAI Responses format, stateless. Typed streaming events fromresponse.createdtoresponse.completed. Function tools, web search,text.formatandreasoning.effort.store: true,previous_response_id,item_referenceandinput_fileare refused with400. - POST
/v1/embeddings—openai/text-embedding-3-small, 1536 dimensions,floatencoding, up to 256 inputs of up to 8,000 characters each.
Models
Section titled “Models”- GET
/v1/models— without a key, the public catalog at the platform’s starting price; with a key, the models that key may call at your organization’s price. - Each model carries catalog fields (
name,description,context_length,architecture,top_provider,supported_parameters) and abelarelblock: category, capabilities, residency zone, zero-retention and BYOK availability, and pricing in USD and credits.
Keys and authentication
Section titled “Keys and authentication”- Live (
bel_live_…) and sandbox (bel_test_…) keys, created in the organization dashboard. - Scopes
inference,embeddings,usage:readandkeys:manage. - Per-key daily and monthly spend caps, requests and tokens per minute, calls in flight, maximum output tokens, allowed models, and required and default tags.
- GET
/v1/key— a key reads its own settings, spend, remaining cap and rate-limit state. - GET POST
/v1/keysand PATCH DELETE/v1/keys/{id}— one level of sub-keys that never exceed their parent; reversible disable and definitive revoke.
Governance and cost
Section titled “Governance and cost”- Every call is reserved at your organization’s price before it runs, on the key and on its parent, then settled at its real cost or released when refused.
- Every answer carries a
belarelblock: request id, model requested and served, provider (since removed), cost in USD and credits with its source and billing, data mode, and policy decisions. - Policy refusals name the rule in
belarel.policy.decisions. A model your organization cannot see answers404 model_not_found. - Errors use the OpenAI shape.
429and503carryRetry-After. X-RateLimit-Limit-Requests,X-RateLimit-Remaining-RequestsandX-RateLimit-Reset-Requestson admitted answers.
Usage and inspection
Section titled “Usage and inspection”X-Request-Idon the answers of the inference and read endpoints, errors included.- GET
/v1/requests/{id}— one request’s status, model, provider (since removed), usage, cost and tags. Never its content. - GET
/v1/usage— usage grouped bytotal,key,model,dayortag:<name>, over up to 93 days. - GET
/v1/credits— your organization’s credit balance.
Reliability and attribution
Section titled “Reliability and attribution”Idempotency-Keyon inference calls, scoped to the key, kept for 24 hours.- Attribution tags from
X-Belarel-Tags, themetadatabody field andbelarel_tags;X-TitleandHTTP-Referername your application.
Data and trust
Section titled “Data and trust”- Data modes per key:
standardandzero_retention.confidentialis coming soon and answers501 not_implementedtoday. - Bring your own provider key (BYOK) for OpenAI and Anthropic models, configured in the organization dashboard.
Sandbox and webhooks
Section titled “Sandbox and webhooks”- Sandbox keys are served by a deterministic mock provider and never billed.
- Webhook event
api_key.cap_reached, signed with HMAC-SHA256 inX-Belarel-Signature. More events will follow.

