> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.videogen.io/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.videogen.io/_mcp/server.

# Rate limits

> Per-endpoint rate limits for the VideoGen API, including headers and best practices for handling 429 responses.

The API is rate-limited on a per-endpoint, per-hour basis. Limits apply **per team**, so all API keys belonging to your team share the same limit for each endpoint. Limits are generous for typical usage but exist to protect the platform from abuse.

## Default limits

| Endpoint group                                | Limit                |
| --------------------------------------------- | -------------------- |
| `POST /v1/tools/*` (all generation endpoints) | 500 requests/hour    |
| `GET /v1/tools/executions/{id}`               | 5,000 requests/hour  |
| `POST /v1/tools/executions/{id}/cancel`       | 250 requests/hour    |
| `GET /v1/files`, `GET /v1/files/{id}`         | 50,000 requests/hour |
| `POST /v1/files/{id}/hydrate`                 | 2,500 requests/hour  |
| `POST /v1/files/upload`                       | 500 requests/hour    |
| `POST /v1/files/search`                       | 500 requests/hour    |
| `GET /v1/resources/*`                         | 2,500 requests/hour  |
| `GET /v1/webhooks/endpoints`                  | 500 requests/hour    |
| `POST /v1/webhooks/endpoints`                 | 10 requests/hour     |
| `DELETE /v1/webhooks/endpoints/{id}`          | 10 requests/hour     |
| `POST /v1/workflows/*` (all start endpoints)  | 500 requests/hour    |
| `GET /v1/workflows/runs/{id}`                 | 5,000 requests/hour  |
| `POST /v1/workflows/runs/{id}/cancel`         | 250 requests/hour    |
| `GET /v1/projects`, `GET /v1/projects/{id}`   | 2,500 requests/hour  |
| `POST /v1/projects/{id}/export`               | 500 requests/hour    |
| `GET /v1/projects/{id}/exports/{exportId}`    | 5,000 requests/hour  |
| `POST /v1/projects/{id}/remix`                | 500 requests/hour    |
| `GET /v1/projects/{id}/remix-actions`         | 5,000 requests/hour  |

These limits apply per team (shared across all of your team's API keys). If you need higher limits for your use case, contact us at [support@videogen.io](mailto:support@videogen.io).

## Response headers

Every response includes rate limit headers:

| Header                  | Description                                     |
| ----------------------- | ----------------------------------------------- |
| `X-RateLimit-Limit`     | Maximum requests allowed in the current window  |
| `X-RateLimit-Remaining` | Requests remaining in the current window        |
| `X-RateLimit-Reset`     | Unix timestamp (seconds) when the window resets |

## Handling 429 responses

When you exceed the limit, the API returns `429 Too Many Requests`.

Best practices:

* **Back off exponentially.** Wait 1s, then 2s, then 4s, etc.
* **Use webhooks instead of polling.** If you're hitting limits on `GET /v1/tools/executions/{id}`, switch to webhooks so you don't need to poll at all.
* **Cache resource lists.** Avatar presenters and TTS voices change infrequently. Cache the response and refresh every few hours rather than on every request.