OpenAI-compatible chat completions, web search, maps and hosted mail behind one base URL, one key and one prepaid balance. Every response reports what it cost.
Quickstart
Get started in three steps: create an account, generate an API key, and make your first call. All endpoints are authenticated with a bearer token sent in the Authorization header.
1. Create an account
Sign up at api.kaer.ai. A new account gets $5 of free credit for language models, once per network, device and inbox. It expires after 90 days.
2. Generate an API key
In your dashboard, navigate to Keys and create a new API key. Assign it the scopes you need (models, search, maps, mail). Copy the full key: it is shown only once, and starts with kaer_live_.
Every API call requires authentication via a bearer token in the Authorization header. Tokens are account-specific, scoped to one or more services, and can include IP allowlists and monthly spending limits.
Header format
Send your API key as a bearer token:
Authorization: Bearer kaer_live_your_api_key_here
Key format and scopes
API keys always start with the prefix kaer_live_ and are followed by a random string. Each key is granted one or more scopes:
models: chat completions
search: web search and batch search
maps: maps, routing and places
mail: sending mail (Build tier and above)
IP allowlist
You can restrict a key to specific IP addresses or CIDR blocks. Empty means no restrictions. IP allowlist is checked on every request.
Key budgets and rotation
Set a monthly spending limit per key to cap runaway usage. To rotate a key, create a new one and delete the old one. Revocation takes effect at once. Closing the account revokes every key; a suspended account keeps its keys but every call is refused until it is active again.
Never ship keys to browsers
Always use the API from your backend. If a key is exposed, regenerate it immediately in the dashboard. Keys are treated as secrets, not like API IDs.
Models
GET /v1/models
Retrieve the list of available models and their live pricing.
No authentication required. Returns an OpenAI-compatible list with pricing fields in the kaer block.
curl https://api.kaer.ai/v1/models
Response shape
The response includes a kaer object with live pricing per 1M tokens:
New accounts receive $5 in free credit applied only to chat/models endpoints, valid for 90 days. Once free credit is exhausted or expires, you must add a payment method to continue.
Chat
POST /v1/chat/completions
Send a prompt to a model and get a completion. Fully compatible with the OpenAI API.
Request parameters
Parameter
Type
Description
model
string
Required. Model ID from GET /v1/models.
messages
array
Required. 1–256 messages. Each message is { "role": "user"|"assistant"|"system", "content": "..." }. Text-only content parts.
max_tokens
integer
Optional. Default 4096, max 32768. Output token limit.
The response includes kaer.cost_usd and a response header x-kaer-cost-usd with the exact amount charged. Costs are reserved before the call and settled based on the backend's reported token count. A held but unused reservation is never charged.
Set stream: true in the chat request to receive tokens as they arrive via Server-Sent Events (SSE). Each frame is a JSON delta, and a final frame includes complete usage information.
A final frame (before [DONE]) includes usage and kaer.cost_usd. Billing is based on tokens streamed, not buffered or estimated. If a client disconnects during streaming, only streamed tokens are charged.
Timeouts
Streams must produce at least one byte every 90 seconds. If no data arrives for 90s, the connection is closed and the call is settled. Maximum stream duration is 15 minutes.
Build tier and above. Send transactional email from Kaer's own sending domain. Mail is paid from paid credit only, never free credit. The key needs the mail scope.
Send a message
POST /v1/mail/send. Messages leave from api-…@kaer.dev, the address assigned to your account, with the display name <from_name> via Kaer and a short footer naming your account's domain. Replies go to reply_to.
Field
Type
Notes
to
string or string[]
Required. Up to your tier's recipients per message; duplicates are removed.
subject
string
Required, up to 200 characters. Line breaks are removed.
text, html
string
At least one. Up to 128 KB of text and 256 KB of HTML.
from_name
string
Optional, up to 64 characters.
reply_to
string
Optional. Cannot be a Kaer address.
from, cc, bcc, headers and attachments are refused. Send an Idempotency-Key header to make retries safe: a repeated key returns the first result and sends nothing.
All errors follow a standard format with an HTTP status code, a type field, and a machine-readable code field.
Error response shape
{
"error": {
"type": "invalid_request_error",
"code": "model_not_found",
"message": "The model 'invalid' does not exist on api.kaer.ai."
}
}
Common errors
Status
Type
Code
Meaning
400
invalid_request_error
invalid_json
The body is not valid JSON.
400
invalid_request_error
messages_required
Chat needs a non-empty messages array.
400
invalid_request_error
too_many_recipients
More recipients than your tier allows in one message.
401
authentication_error
missing_api_key
No Authorization: Bearer or x-api-key header.
401
authentication_error
invalid_api_key
The key is wrong or was revoked.
402
insufficient_quota
insufficient_credits
The balance cannot cover this call. Add credit or turn on automatic top-up.
402
insufficient_quota
monthly_limit_reached
The account reached its monthly limit (yours or your tier's).
402
insufficient_quota
key_budget_exceeded
This key reached its own monthly budget.
402
insufficient_quota
payment_required
A reversed payment left a balance to settle.
403
permission_error
insufficient_scope
The key lacks the scope for this service.
403
permission_error
tier_required
Your tier does not include this service yet.
403
permission_error
ip_not_allowed
The key is limited to other IP addresses.
403
permission_error
account_inactive
The account is suspended or closed.
404
invalid_request_error
model_not_found
No such model on the platform.
413
invalid_request_error
body_too_large
The request body is over the endpoint's limit.
429
rate_limit_error
rate_limit_exceeded
Requests per minute exceeded. Wait for Retry-After.
429
rate_limit_error
too_many_streams
Too many open streams for your tier.
429
rate_limit_error
mail_rate_limit / mail_daily_limit
A mail cap was reached. Wait for Retry-After.
502
server_error
upstream_unreachable
The model service did not answer. Nothing was charged.
503
server_error
model_unavailable / search_unavailable
The service is paused. Nothing was charged.
Rate-limit headers
Every response includes rate-limit information:
x-ratelimit-limit-requests: requests allowed per minute for this key on your tier
x-ratelimit-remaining-requests: requests left in the current minute
x-ratelimit-reset-requests: seconds until the window resets, for example 42s
Limits
Accounts are organized into tiers, each with separate rate limits, service access, and spending caps.
Tier
Req/min per key
Concurrent streams
Monthly cap
Unlock
Free
20
2
$5
Sign up
Starter
60
5
$100
$5 paid
Build
300
20
$1000
$50 paid and 7 days since your first payment
Scale
1000
50
$5000
$250 paid and 14 days since your first payment
Pro
3000
100
$25000
$1,000 paid and 30 days since your first payment
Enterprise
10000
400
$250000
Contract with Kaer
How tiers rise
Your tier is determined by lifetime payments (net of refunds) and days since first payment:
Free: Sign up
Starter: $5 paid
Build: $50 paid and 7 days since first payment
Scale: $250 paid and 14 days since first payment
Pro: $1,000 paid and 30 days since first payment
Enterprise: Contract with Kaer
Services by tier
Tier
Models
Search
Maps
Mail
Free
✓
–
–
–
Starter
✓
✓
✓
–
Build
✓
✓
✓
✓
Scale
✓
✓
✓
✓
Pro
✓
✓
✓
✓
Enterprise
✓
✓
✓
✓
Billing
Every call reserves an upper bound of the cost before it runs, then settles the exact cost the backend reports. Accounts are strictly prepaid: you cannot run up a balance, and free credit covers only chat/models endpoints.
How prepaid works
Every call reserves an upper bound (prompt estimate + max_tokens at the model's dearest band, or per-action price for other services)
The backend runs and reports the exact cost
The gateway settles the hold down to the real amount
Unused holds are never charged
If your balance falls below zero (impossible, but for completeness), the account is suspended
Insufficient credit (402)
When a call needs more than your available balance, the gateway refuses it with 402 Payment Required. Nothing is charged. Add credit or enable automatic top-up to continue.
Free credit
New accounts receive $5 in free credit, valid for 90 days. Free credit applies only to chat/models endpoints and is granted once per network/device/inbox. Once exhausted or expired, a payment method is required.
Automatic top-up
Configure automatic top-up to charge your saved card when your balance falls below a threshold. Top-ups are:
Fixed amounts (you set the amount, threshold, and monthly cap)
Processed immediately when the threshold is crossed or a call would fail
Capped by tier (max per top-up, max per month, max per day)
If a charge fails, no credit is added and nothing else is charged; two failures pause automatic top-up
Automatic top-up is available after your first successful payment and requires explicit consent. Two failures or a failed authentication pauses it.
Refunds and disputes
A refund of a top-up removes the credit that payment added, bonus included. A dispute does the same and pauses the account until it is resolved; a dispute decided in your favour restores the credit. If the credit was already spent, the difference is owed and the account stays paused until a top-up clears it.
Privacy
The request log behind your Usage page holds metadata only. It is what we bill from and what you can export as CSV.
What the request log holds
Time, latency and, for streams, time to first token
Endpoint, service, and the model, lane or action
Status code and error code
Token, query or request counts, and the cost
The key used, the country the call came from, and a keyed hash of the client IP, cleared after 90 days
What it does not hold
Prompt or completion text
Search queries or results
Map coordinates or routes
Email bodies
Your raw IP address
Special terms
Model providers and the services behind each endpoint keep their own operational logs for a limited time to run and secure them. Contractual retention terms, zero retention with model providers and a data processing agreement are arranged through enterprise.
Changelog
2026-09-22 · api.kaer.ai v2: separate accounts, strictly prepaid billing, new dashboard