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

# Errors

> Handle validation, timeout, cancellation, and upstream failures.

Evade returns errors in a consistent JSON envelope:

```json theme={null}
{
  "success": false,
  "error": {
    "code": "invalid_request",
    "message": "target_api: must be an absolute HTTP(S) URL"
  }
}
```

| Status | Code              | Meaning                                                                                               |
| ------ | ----------------- | ----------------------------------------------------------------------------------------------------- |
| `400`  | `invalid_request` | JSON or a request field is invalid, a fingerprint is unavailable, or the session is no longer active. |
| `408`  | `solve_canceled`  | The client disconnected or canceled the request.                                                      |
| `502`  | `solve_failed`    | The proxy, upstream site, fingerprint store, or challenge execution failed.                           |
| `504`  | `solve_timeout`   | The solve exceeded the server deadline.                                                               |

## Retry guidance

* Correct `400` requests before retrying. For an expired session, start a fresh solve.
* Retry `502` only after checking proxy health and upstream availability.
* A `504` can indicate a slow proxy or upstream target; retry with bounded backoff.
* Do not retry `408` after the caller has abandoned the operation.

<Note>
  Error messages provide diagnostic detail but are not stable identifiers. Branch
  on `error.code`, not the message text.
</Note>
