Skip to content
All pages
  1. Overview
  2. Quick start
  3. Authentication
  4. API reference
    1. GET /media
    2. POST /media
    3. GET /media/{id}/preview
    4. GET /integrations/google/connect
    5. GET /integrations/google
    6. DELETE /integrations/google
    7. GET /integrations/google/folders
    8. POST /media/import
    9. GET /media/imports/{id}
    10. POST /renders
    11. GET /renders/{id}
    12. GET /renders/{id}/download
    13. GET /usage
  5. Code examples
  6. Error handling
  7. Rate limits & quotas
  8. Troubleshooting
  9. Changelog

Reference

Rate limits & quotas

Only POST /api/v1/renders costs anything. Reads are free and uncounted against your spend cap: polling a render, downloading the file, re-downloading it a hundred times, listing media, fetching previews, checking usage. Reads are rate limited but never billed, so poll every few seconds rather than continuously: a render takes minutes, so polling harder learns nothing sooner.

LimitValueAppliesNotes
Renders started per minute60 by defaultper key, on POST /api/v1/rendersOver it is 429 rate_limit_exceeded. Your key’s actual value is on Settings → API and can be raised for you.
Read requests per minute600 by defaultper key, on every GETPolling, downloads, previews, media listing and usage share this. Deliberately far above the create limit so a caller polling several renders at once is never throttled for following the guidance on this page. Over it is 429 rate_limit_exceeded.
Daily spend capset per keyper keyA ceiling on renders started in a rolling 24-hour window, so it refills continuously rather than resetting at midnight. The render that would cross the line is the one refused, with 402 spend_cap_reached — you are never taken over the cap.
Render allowanceset per planper accountThe cycle allowance shared by everything in the workspace, API and portal alike: 0 on Starter, 100 on Studio, 500 on Agency, negotiated on Custom. GET /api/v1/usage reports it. Exhausted — or never granted — is 402 quota_exceeded.
Caption length500 charactersper renderLonger is 422 validation_failed.
Metadata20 keysper renderScalar values only, echoed back on the render unchanged.
Page size100 max, 25 defaultGET /api/v1/mediaOut of range is 422 validation_failed, not a clamp.

The two money limits are different things

They are easy to confuse and they fail differently, so it is worth being precise.

  • The daily spend cap is per key, over a rolling 24 hours, and is what stops a runaway integration. Hitting it is 402 spend_cap_reached. It refills continuously rather than resetting at midnight.
  • The render allowance is per account, per billing cycle, and is what your plan includes. Hitting it is 402 quota_exceeded. GET /api/v1/usage reports it.

The same 402 with two different codes, which is exactly why you match on the code. Your key's live numbers are on Settings → API.

Reads are not metered

Polling, downloads, previews, media listing and usage checks cost nothing — they are metered against neither money limit. They do share a per-minute request ceiling, set far above what the guidance on this site asks for, so following it will not put you near it. Poll every few seconds anyway: a render takes minutes, so a tighter loop learns nothing sooner.