Overview
Knowlify enforces three independent limits on the HTTP API. Each is keyed per caller — personal users have their own pool; each organization has its own pool.| Limit | Value | Behavior on excess |
|---|---|---|
| Request rate | 30 requests / 60 s | 429 Too Many Requests |
| Batch size | 1–50 items per POST /v1/videos | 400 Bad Request |
| Concurrent jobs | 3 active jobs per caller | Excess items are parked (queued for promotion) |
Request rate
A fixed 60-second window per caller, counted in Redis. The identity used for keying is:user_idfor personal calls (JWT or personal API key)org:<id>for organization calls (org API key, or JWT withorg_idin body)
X-RateLimit-Limit— the cap (30)X-RateLimit-Remaining— requests left in the current windowX-RateLimit-Reset— seconds until the window resets
429 with a Retry-After header:
Batch size
A singlePOST /v1/videos request must contain between 1 and 50 entries in the videos array. The server rejects empty arrays and arrays of more than 50 items with 400 and a Pydantic validation error in detail.
Concurrent jobs
Each caller may have up to 3 jobs actively rendering at any moment. When you submit more than 3 items in a single batch (or submit while you already have jobs in flight), excess items are accepted but marked"parked":
GET /v1/videos/{uuid} to watch the job advance from pending → queued → rendering stages.
Personal and organization pools are independent. A user who is also an org admin can have 3 personal jobs and 3 org jobs running concurrently.
