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

# Errors

> Handle HTTP errors explicitly.

Common statuses:

| Status | Meaning                                             |
| ------ | --------------------------------------------------- |
| `400`  | Invalid amount, game, URL, body, or expired input   |
| `401`  | Missing or invalid authentication                   |
| `403`  | Scope, merchant, game, or origin is not allowed     |
| `404`  | Resource is missing or not visible to this merchant |
| `409`  | Idempotency or state conflict                       |
| `413`  | Request is too large                                |
| `429`  | Rate limit; honor `Retry-After`                     |
| `503`  | Service is unavailable or not configured            |

Errors are not successful checkouts. Log the request ID returned by the API,
but never log API keys or bearer tokens.

The API returns a complete JSON error object:

```json theme={null}
{
  "error": {
    "code": "invalid_request",
    "message": "The request body is invalid.",
    "request_id": "req_0123456789"
  }
}
```

Show customers a useful recovery action while keeping the raw message and
request ID in protected server logs. Treat `503` as retryable with backoff;
investigate `409` instead of blindly creating another order.
