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

# Error codes

> HTTP status codes, API error codes, and error response fields.

Ateve uses standard HTTP status codes. Each error response also includes a machine-readable `error.code` for programmatic handling.

All non-2xx responses return the same error envelope:

```json theme={null}
{
  "id": "req_abc123",
  "error": {
    "code": "invalid_parameter",
    "message": "date_range end date must be on or after the start date",
    "param": "date_range",
    "type": "invalid_request_error"
  }
}
```

## Error fields

| Field           | Description                                        |
| --------------- | -------------------------------------------------- |
| `id`            | Request ID matching `X-Request-Id`                 |
| `error.code`    | Machine-readable error code                        |
| `error.message` | Human-readable error description                   |
| `error.param`   | Invalid request field. Omitted when not applicable |
| `error.type`    | Error category                                     |

## HTTP status codes

| Status | Meaning                                      |
| ------ | -------------------------------------------- |
| `200`  | Request succeeded                            |
| `400`  | Request validation failed                    |
| `401`  | Missing or invalid API key                   |
| `403`  | Insufficient credit or credit limit exceeded |
| `404`  | Endpoint not found                           |
| `405`  | HTTP method not allowed                      |
| `415`  | Missing or unsupported `Content-Type`        |
| `429`  | Rate limit exceeded                          |
| `500`  | Internal server error                        |
| `502`  | Upstream search service unavailable          |
| `504`  | Upstream search service timed out            |

## Error codes

| Code                    | Typical status | Type                    |
| ----------------------- | -------------- | ----------------------- |
| `missing_query`         | `400`          | `invalid_request_error` |
| `invalid_parameter`     | `400`          | `invalid_request_error` |
| `invalid_date_range`    | `400`          | `invalid_request_error` |
| `invalid_domain`        | `400`          | `invalid_request_error` |
| `too_many_domains`      | `400`          | `invalid_request_error` |
| `unsupported_locale`    | `400`          | `invalid_request_error` |
| `invalid_schema`        | `400`          | `invalid_request_error` |
| `missing_api_key`       | `401`          | `authentication_error`  |
| `invalid_api_key`       | `401`          | `authentication_error`  |
| `insufficient_credit`   | `403`          | `invalid_request_error` |
| `credit_limit_exceeded` | `403`          | `invalid_request_error` |
| `not_found`             | `404`          | `invalid_request_error` |
| `method_not_allowed`    | `405`          | `invalid_request_error` |
| `rate_limit_exceeded`   | `429`          | `rate_limit_error`      |
| `server_error`          | `500`          | `server_error`          |
| `service_unavailable`   | `502`          | `server_error`          |
| `timeout`               | `504`          | `server_error`          |
