Docs
beServe is OpenAI-compatible. If your code talks to OpenAI, it already talks to beServe — you only change where it points.
Quick start
- Create an account. Sign up and choose a plan — you can change it later.
- Generate an API key. On the API keys page. Keys start with
bs_live_and are shown once. - Point your client at beServe. Base URL
https://api.beserve.eu/v1, your key as the bearer token.
Code examples
curl https://api.beserve.eu/v1/chat/completions \
-H "Authorization: Bearer bs_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v4-flash-0731",
"messages": [{"role": "user", "content": "Bonjour!"}],
"stream": true
}'API reference
beServe implements the OpenAI Chat Completions API, including streaming. Refer to OpenAI's API reference and use your beServe key and base URL.
| Endpoint | Description |
|---|---|
| POST /v1/chat/completions | Create a chat completion. Supports stream: true. |
| GET /v1/models | List available models with EUR pricing. |
| GET /health | Liveness check. |
Model catalog
All models are included with every plan — switch between them freely by changing the model field. You pay your flat subscription, never per token.
| Model | Context | Highlights |
|---|---|---|
| deepseek-v4-flash-0731 | 256K | Agentic, reasoning, tools |
| gpt-oss-120b | 128K | Reasoning, tools |
| pixtral-12b-2409 | 128K | Vision, tools |
| gemma-4-26b-a4b-it | 256K | Multilingual, reasoning |
| qwen3.6-35b-a3b | 256K | Reasoning, tools |
| mistral-medium-3.5-128b | 256K | 24 languages, tools |
| glm-5.2 | 256K | Coding, agentic, tools |
Rate limits
| Plan | Requests / min | Requests / day | Context | API keys |
|---|---|---|---|---|
| Starter — €29/mo | 10 | 500 | 256K | 1 |
| Pro — €79/mo | 30 | 3,000 | 256K+ | 5 |
| Team — €149/seat/mo | 60 | 6,000 / seat | 256K+ | Unlimited |
Every response carries X-RateLimit-Limit-Requests, X-RateLimit-Remaining-Requests and X-RateLimit-Reset-Requests. When you hit a limit you get a 429 with Retry-After.
Errors
Errors follow the OpenAI format, so your existing error handling keeps working:
{
"error": {
"message": "Rate limit exceeded. Try again in 12 seconds.",
"type": "rate_limit_error",
"code": "rate_limit_exceeded"
}
} Every response also carries X-beServe-Request-Id — include it in support requests
and we can find the exact call in our logs.