Skip to main content
Kyma uses two limit types and enforces them per user:
  • Text endpoints (/v1/chat/completions, /v1/messages) are rate-based: requests per minute (RPM), tokens per minute (TPM), and a cap on the size of one request.
  • Media endpoints (image, video, audio) are concurrency-based: only jobs that are actively running count against your limit.
Why concurrency for media: jobs run 5–600 seconds. Per-minute metering would either be far too coarse (silent burst capacity) or far too strict (single long render burns your whole quota). Concurrency caps + balance pre-checks track real load.

Tier ladder

Your tier is determined by lifetime_purchased — the total Stripe-purchased face value of credits across your account’s history. Signup bonuses, referral credits, and promotional grants don’t count. Every tier’s exact numbers are published live, with no authentication:
Each entry in tiers carries: Tier is recomputed after every successful purchase. There is no waiting period — top up $5 and your Tier 1 limits apply within seconds.

Text limits

RPM, per-model RPM and TPM are counted in fixed one-minute windows that start on the minute (UTC), not in a rolling window. Once RPM or TPM is used up, requests get a 429 until the next minute starts and the counters reset. Before a request runs, Kyma estimates its size (roughly 4 characters per token of messages, plus max_tokens). A request whose estimate exceeds max_single_request, or would push you past tpm, is refused up front with a 429. Split the message or lower max_tokens.

Audio limits

Audio is gated by concurrency only. Each model family has its own pool, so saturating one family does not block the others: for example, a burst of whisper-v3-turbo transcriptions does not use the slots of a text-to-speech model. audio_concurrent_per_capability in /v1/limits/tiers is the largest pool in each capability. Some model families in the same capability have a smaller pool on the same tier, and the text-to-speech families are the tightest. When a pool is full, the 429 message states the cap you hit, for example Too many concurrent audio jobs (8/8, Tier 2). Audio requests do not queue: at capacity they return 429 right away.

Image and video: queue + backpressure

Image and video jobs are asynchronous (you get a job id and poll it). When all your slots for that kind are busy:
  • Queue has room → the job is accepted with "status": "queued" and a queue_position, and starts when a slot frees up. Poll it like any other job.
  • Queue is full too → 429 with error.code: queue_full and Retry-After: 30.
On Tier 4, image and video share one combined pool and one combined queue.

429 responses

The body and headers depend on the endpoint: Every error also carries error.request_id and the x-request-id header, and x-should-retry: true on a 429 that can be retried. See Errors for the full contract. x-ratelimit-limit-requests is your RPM, x-ratelimit-remaining-requests is what is left of it in the current minute, and x-ratelimit-reset-requests is the ISO 8601 time the minute ends. The text Retry-After is a fixed 60 seconds; if you track the window yourself, x-ratelimit-reset-requests tells you when the counters reset. Successful (200) responses carry no rate-limit headers.

Error codes

Out of credits is a 402, not a 429; see Error Handling.

How limits are computed

Your tier comes from the deposit ladder: lifetime_purchased (Stripe purchases only) crossed against each tier’s min_deposit. Tier is read from your balance record, which is cached for at most 30 seconds, so a new tier applies within 30 seconds of a purchase.

Need higher limits?

Two paths: 1. Natural tier upgrade. Deposit more credits to cross the next threshold. Tiers apply immediately — no application needed. 2. Heavy users on a tight ramp. If you’re shipping a product on Kyma and expect to scale beyond Tier 3 limits before you’d naturally cross the $1000 deposit threshold, email hello@kymaapi.com with:
  • Product name and URL
  • Expected monthly usage (rough is fine)
  • Primary capabilities (audio / text / image / video mix)
We review these requests case by case. Note: this is distinct from the future Kyma Partner Program (revshare for app creators who integrate Kyma) — that’s a separate offering with its own page when it launches.

See also