Skip to main content
Kynva rate-limits requests per account. Limits are enforced per endpoint category, not as a single global bucket — so a flood of status polls can’t starve your renders. Limits scale with your plan tier.

Categories and free-tier limits

Need higher limits? Email support@kynva.ai with your use case. We routinely lift limits for production workloads.

Response headers

Every response includes: When you exceed a limit, the response is 429 Too Many Requests with a Retry-After header.

Hitting the limit

Backoff that works

A robust retry loop:
  1. On 429, read Retry-After. Wait at least that long.
  2. On 5xx, exponential backoff: 1s, 2s, 4s, 8s, with ±20% jitter.
  3. Cap retries at 5. After that, surface the failure.
  4. Always reuse the same Idempotency-Key across retries — see idempotency.

Tips for staying under the limit

  • Batch when you can. Use POST /facade/render-jobs with multiple briefs instead of N synchronous renders.
  • Cache aggressively. GET responses include strong ETags; respect them.
  • Use the async path. Render jobs don’t block on your client connection — fire-and-subscribe-to-webhook is cheaper for both sides.
  • Pre-resolve brands. List brands once on app boot, not per render.