# Errors

Handle RFC 9457 Problem Details by stable code and retryability.

## Common responses

| Status | Meaning | Retry |
| --- | --- | --- |
| 400 | Invalid request or cursor | No |
| 401 | Invalid or revoked API key | No |
| 403 | Insufficient scope | No |
| 402 | Insufficient credit | After top-up |
| 404 | Resource unavailable | No |
| 429 | Organisation rate limit | After Retry-After |
| 503 | Service or usage accounting unavailable | Only when retryable |

## Problem Details

### JSON

```json
{
  "type": "https://docs.luranta.com/problems/invalid-request",
  "title": "Invalid request",
  "status": 400,
  "detail": "The limit must be between 1 and 100.",
  "instance": "/v0/jobs",
  "code": "invalid_request",
  "request_id": "019c...",
  "retryable": false,
  "param": "limit"
}
```

> **Network failures are ambiguous:** Do not automatically retry an interrupted billable response. Official SDKs surface TransportError so your application can reconcile deliberately.
