API
API reference
Every endpoint, every parameter.
Base URL: https://api.repackage.app
All endpoints accept either an organization-scoped Bearer key or a session cookie. See Authentication.
Endpoints
| Endpoint | Method | Plan | Description |
|---|---|---|---|
/transcript | GET | Free | Single video, structured JSON |
/transcript/raw | GET | Free | Single video, plain text |
/transcripts/bulk | POST | Pro | Many videos in one call |
/playlists/:id/transcripts | GET | Pro | Every video in a playlist |
/channels/:id/transcripts | GET | Pro | Recent uploads from a channel |
OpenAPI spec
The full spec is published at /openapi.yaml. Pipe it into any OpenAPI-aware codegen tool to scaffold a typed client.
curl https://repackage.app/openapi.yaml > openapi.yaml
npx openapi-typescript openapi.yaml -o repackage.d.tsConventions
- All responses are
application/jsonunless noted (/transcript/rawreturnstext/plain). - Errors use a single envelope — check
error.code, not the message. - Successful transcripts are cached for 24 hours. Cached responses don't consume quota.
- Times are ISO 8601 UTC.
- Snake-case for query params, camelCase for response fields. Yes, it's mixed; we'll fix it in v2.
Rate limits
In addition to monthly quotas, every endpoint has a per-IP / per-key rate limit as a runaway-protection layer:
| Endpoint | Limit | Window |
|---|---|---|
/transcript, /transcript/raw | 20 | per hour, per IP |
/transcripts/bulk | 10 | per hour, per key |
/playlists/:id/transcripts, /channels/:id/transcripts | 10 | per hour, per key |
/summary | 60 | per hour, per IP |
Rate-limited responses return 429 rate_limited with a Retry-After header.