Error shape
Every error response uses the same shape:request_id when reporting an issue — it lets us find the exact failing request in our logs.
HTTP status codes
| Status | Meaning |
|---|---|
200 | Success |
201 | Resource created |
202 | Accepted — generation in progress |
400 | Invalid request body or parameters |
401 | Missing or invalid API key |
402 | Out of minutes for the month |
403 | You don’t have access to the requested PR or resource |
404 | PR, story, or endpoint not found |
409 | Conflict (e.g. key name already used) |
422 | Valid request shape but unprocessable (e.g. draft PR with no commits) |
429 | Rate limit exceeded |
500 | Internal server error |
502 | Upstream GitHub or LLM provider failed |
503 | Service temporarily unavailable |
Error codes
Authentication
The API key is malformed, expired, or has been revoked.
No
Authorization header was sent, or the Bearer prefix is missing.Permissions
The GitHub account linked to your API key doesn’t have read access to this repo. For private repos, install the pull/story GitHub App or connect a GitHub identity with access.
The PR is from a private repo the API key can’t see, or the repo owner has restricted automated access.
Validation
The request body failed schema validation. Check the
details array in the response for the specific field.No PR exists at the given owner/repo/number.
The PR is in draft state and has no commits to narrate. Mark it ready for review to generate a pull story.
Billing
You’ve used your full monthly video allowance. Wait until your next billing cycle or upgrade your plan.
Rate limiting
Too many requests. Back off for the number of seconds in the
Retry-After header.Upstream failures
GitHub returned an error while fetching the PR diff. Usually transient — retry after 30 seconds.
The pull story couldn’t be generated. The story’s
status is set to failed and no minutes are charged. Call POST /v1/stories again to retry.Retry strategy
5xx errors: exponential backoff
5xx errors: exponential backoff
Retry with
1s, 2s, 4s, 8s delays. Give up after 4 attempts. Include a unique Idempotency-Key header (any UUID) to avoid accidental duplicate stories.429: respect Retry-After
429: respect Retry-After
Sleep for the exact number of seconds in the
Retry-After header, then retry once.4xx except 429: don't retry
4xx except 429: don't retry
Client errors won’t fix themselves. Log the
request_id, fix the request, and try again.Reporting bugs
Email therequest_id from the error response to moshikarim@proton.me or open an issue on GitHub.