API documentation
One key and one OpenAI-compatible endpoint for every model in the catalogue. Here is how to connect, what each endpoint returns, what usage is metered in, and what the error codes mean.
Quick start
- Create an API key in the dashboard, section “API keys”. The secret is shown once — store it.
- Set the base URL and the authorization header in your client.
- Send a request to any endpoint: usage is deducted from your balance automatically.
curl https://llmall.store/v1/chat/completions \
-H "Authorization: Bearer sk-llmall-..." \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.5",
"messages": [{ "role": "user", "content": "Hello" }]
}'Base URL and authentication
Base URL: https://llmall.store/v1. Compatible with the OpenAI SDK — replacing base_url is enough.
Pass the secret in the Authorization header using the Bearer scheme. A key can be paused or revoked at any time; revocation takes effect on the gateway immediately.
from openai import OpenAI
client = OpenAI(
base_url="https://llmall.store/v1",
api_key="sk-llmall-...",
)
resp = client.chat.completions.create(
model="gpt-5.5",
messages=[{"role": "user", "content": "Hello"}],
)
print(resp.choices[0].message.content)Endpoints
| Endpoint | What it does | Status |
|---|---|---|
| POST /chat/completions | Chat, OpenAI-compatible; supports streaming | works |
| POST /messages | Chat in the Anthropic Messages API format | works |
| GET /models | Models available to your key under its policy | works |
| POST /embeddings | Text embeddings | works when the model has a provider configured |
| POST /images/generations | Image generation | works when the model has a provider configured |
| POST /audio/speech, /audio/transcriptions | Speech synthesis and recognition | works when the model has a provider configured |
| POST /videos/generations | Video generation | works when the model has a provider configured |
Some catalogue models have no provider configured and answer with a simulated result (for embeddings — a placeholder vector). CU usage is still charged. Check the specific model before production use.
What usage is metered in
The unit is CU (1 CU = $10 of estimated compute). Models are metered per 1K or 1M tokens, per embedding, per image, per second of video, or per request — the unit is shown on the model card.
Catalogue prices are shown in roubles and in CU. Model prices use the central bank rate; topping up uses a rate with the payment channel surcharge, so the amount you pay for the same volume is higher. The difference is shown at checkout before you confirm.
Top-up: SBP by QR code or a bank card. Minimum 1 CU.
Limits
Monthly and daily limits per key are optional: leave them empty and there is no cap — spending is bounded by your account balance. If you set a monthly limit and have a plan, it cannot exceed the plan's monthly limit.
The gateway enforces the limits: once a key budget is exhausted, requests return 429 insufficient_cu. Request rate is limited on the platform side; when exceeded, the API returns 429 with a Retry-After header — the number of seconds to wait.
Error codes
| Code | Meaning | What to do |
|---|---|---|
| 400 / 422 | Bad request: malformed body or unknown field | Check the JSON shape and field names |
| 401 | Key missing, revoked or invalid | Check the Authorization header |
| 403 | Model disallowed by the key policy | Remove the model or change the key policy |
| 404 | Unknown path or model not found | Check the endpoint list and GET /models |
| 429 insufficient_cu | Balance or key budget exhausted | Top up or raise the key limit |
| 429 rate_limit_exceeded | Request rate exceeded | Wait Retry-After seconds and retry |
| 500 | Gateway internal error | Retry later; if it persists, contact support |
| 503 provider_unavailable | The model's provider is unavailable | Retry later or pick another model |
What you can set in the dashboard
Keys: name, monthly and daily limit in CU (optional), pause and revoke. The secret is shown once on creation.
Top-up: amount in CU or roubles, payment method (SBP QR or card). Minimum 1 CU.
Profile: name, password change, linked sign-in accounts (Google, Yandex ID).
Combos: your own set of models under one id — a request goes to the cheapest available member, and to the next one by price when it is busy.
Data masking subscription: before forwarding to the provider we detect names, phone numbers, emails, passports, Russian SNILS/INN and card numbers, replace them with markers, and restore the originals in the response. Marker-to-value mappings live in process memory only and are never persisted.
If it does not work
- 401 — check the key is complete, with no spaces or line breaks.
- 403 — the model is blocked by this key's policy, not the account's.
- 429 with insufficient_cu and 429 with rate_limit_exceeded are different causes; check the type field.
- Empty or unexpected response on a non-chat endpoint — the model has no provider configured, the answer was simulated.
- Model not found — check GET /models: the list honours your key policy.