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

# engine_unavailable

> 502 api_error — the extraction engine is unreachable. Nothing was billed and no run started; retry with backoff.

**HTTP 502 · type `api_error`.** The gateway could not reach the extraction engine,
so your request — a session create or an estimate — never started anything. **Nothing
was billed**: no reservation was written, no run exists, and there is nothing to
clean up. This is our infrastructure, not your request.

## The shape

```json theme={null}
{
  "error": {
    "type": "api_error",
    "code": "engine_unavailable",
    "message": "The extraction engine is unreachable; nothing was billed. Safe to retry.",
    "doc_url": "https://docs.fiveninelabs.com/errors/engine_unavailable",
    "request_id": "req_d28da4"
  }
}
```

## How to fix

* **Retry with backoff.** The response carries no `Retry-After` header today —
  start around 10–30 seconds and back off; outages observed in practice cleared
  within about 10 minutes. A create is safe to retry with the same
  `Idempotency-Key`; an estimate is free either way.
* **Don't misread partial availability.** During an engine outage, paths that don't
  need the engine (auth, reads, some parse-only declines) can keep succeeding while
  creates and estimates 502 — that's the engine being down, not your queries being
  rejected.
* If it persists beyond \~15 minutes, include `request_id` in a support message.

## Where it sits in the catalog

`engine_unavailable` is an `api_error` like [`internal`](/errors/internal), but at
**502** and with a stronger guarantee: the failure happened before anything started,
so there is never a reservation to reconcile. Distinct from
[`provider_unavailable`](/errors/provider_unavailable), which is a **stream-terminal
code** on a run that did start and then lost a non-model upstream.
