> ## Documentation Index
> Fetch the complete documentation index at: https://developers.myeden.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Errors

> Error envelope, status codes, and how to debug.

All errors share the same envelope:

```json theme={null}
{
  "error": {
    "code": "invalid_input",
    "message": "source_url must be an HTTPS URL",
    "request_id": "req_a1b2c3d4e5f6"
  }
}
```

Include the `request_id` (also returned in the `x-request-id` response
header) when contacting support.

## Status codes

| Status                    | When you'll see it                                      |
| ------------------------- | ------------------------------------------------------- |
| `400 invalid_input`       | Body validation failed.                                 |
| `401 missing_credentials` | No `Authorization` header.                              |
| `401 invalid_credentials` | Key is malformed, unknown, or revoked.                  |
| `403 insufficient_scope`  | Key doesn't have the required scope.                    |
| `404 not_found`           | Video doesn't exist or belongs to another organization. |
| `429 rate_limited`        | RPM exceeded. Wait `retry-after` seconds.               |
| `429 daily_ingest_limit`  | Daily ingest budget exhausted.                          |
| `500 internal_error`      | Eden-side problem. Retry with backoff.                  |

<Note>
  404 vs 403: we return 404 when a video belongs to a different organization
  so we don't reveal the existence of other partners' content.
</Note>

## Retry strategy

| Code | Retry?                                               |
| ---- | ---------------------------------------------------- |
| 4xx  | No — fix the request first.                          |
| 429  | Yes — after `retry-after` seconds.                   |
| 5xx  | Yes — exponential backoff with jitter, \~5 attempts. |

Reasonable backoff: 1s, 2s, 4s, 8s, 16s (each with ±25% jitter).
