Limits
Current constraints. Two metered endpoints, and the request shapes we do not support.
Read this before you design an integration
The constraints below are deliberate, and they are the kind of thing that costs an afternoon if you find them late.
Two metered endpoints
| Endpoint | Status |
|---|---|
POST /v1/chat/completions | Supported (streaming and non-streaming) |
POST /v1/completions | Supported (streaming and non-streaming) |
That is the entire metered surface. The rest of the gateway's paths are not part of the API, and since 2026-07-28 they fail loudly rather than appearing to work:
| Path | What you get |
|---|---|
/v1/messages (Anthropic shape) | 501, with modelbeat: this request shape is not supported; use /v1/chat/completions |
/v1/responses (OpenAI Responses shape) | 501, same message |
/v1/embeddings | 401 without a valid key. Present on the gateway, but unmetered and unsupported. Do not build on it. |
/v1/models | Authenticated and rate-limited. Returns the model catalog. Not metered (no balance consumed). See Models. |
/v1/feedback | Authenticated and rate-limited, never metered. Not part of the published contract. Do not build on it. |
/v1/async/* | 404. Not on the gateway's product surface at all: the edge gate is default-deny, and these paths are not in the allow-set. |
every /api/* path | 404. This is the vendored gateway's own admin surface, not part of ModelBeat. |
Anything not in the API reference is not part of the API. It may be removed, gated, or changed without notice, and calls to it are not covered by any correctness or billing guarantee.
If you need the Anthropic Messages or OpenAI Responses shape, tell us. It needs shape-aware usage parsing on our side before it can be billed correctly, and that work is prioritised by demand.
Other current constraints
- One key class. Only
mb_live_keys exist. There is no separate admin or management key, and no public management API. Key, balance, and usage administration happens in the console. usagemay benull. When the serving provider reports no usage, the field is present and null rather than omitted. Guard it.extra_fieldsmay carry undocumented members. Read the ones documented in the reference and ignore the rest; they are not stable.