> 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.

## v1.0.1 — Cursor pagination on every list endpoint

All collection-returning endpoints now use a uniform cursor-based pagination contract. Responses still include the original array field (no rename), so v1 SDKs and existing callers keep working unchanged. Pagination is additive: two new fields (`hasMore`, `nextCursor`) and two new query params (`limit`, `cursor`) per endpoint.

- `GET /v1/projects`: now returns `{ projects, hasMore, nextCursor }`. Accepts `cursor` alongside the existing `limit` (1-200, default 50) and `selfOnly`. Previously capped silently at 200; full history is now reachable by paging.
- `GET /v1/files`: now returns `{ files, hasMore, nextCursor }` and accepts `limit` (1-200, default 50) and `cursor`. Previously capped silently at 500.
- `GET /v1/resources/avatar-presenters` and `GET /v1/resources/tts-voices`: now return `hasMore` / `nextCursor` and accept `limit` / `cursor`.
- `GET /v1/webhooks/endpoints`: now returns `hasMore` / `nextCursor` and accepts `limit` / `cursor`.

Cursors are opaque strings. Pass `nextCursor` from one response back as the `cursor` query param on the next request, unmodified. A cursor is only valid for the endpoint that produced it; using one with a different endpoint returns a 400. Ordering is most-recently-updated first for `/v1/projects` and `/v1/files`.