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

# Status Codes

> Reference for Enrow API HTTP status codes and search qualification values, so you know how to handle every response

The Enrow API uses standard HTTP status codes to indicate the outcome of each request, plus a `qualification` field that tells you the result of a search or verification. This page lists every code and qualification value so you can handle responses reliably. For the matching error messages and response formats, see [Error handling](/error-handling).

## What HTTP status codes does the API return?

The Enrow API uses standard HTTP status codes to indicate the result of each request. A `2xx` code means the request succeeded, a `4xx` code points to a problem with the request, and a `5xx` code means something went wrong on Enrow's side.

### Which codes mean success?

A `2xx` status code means the API accepted the request. Asynchronous operations (such as bulk searches) return `201` or `202` because the work continues in the background.

| Code    | Meaning  | Description                                    |
| ------- | -------- | ---------------------------------------------- |
| **200** | OK       | Request succeeded, results returned            |
| **201** | Created  | Resource created (e.g., bulk search initiated) |
| **202** | Accepted | Request accepted, processing asynchronously    |

### Which codes mean the request was rejected?

A `4xx` status code means the API rejected the request because of something it can fix on the client side — invalid parameters, a missing or invalid API key, insufficient credits, or too many requests.

| Code    | Meaning           | Description                   |
| ------- | ----------------- | ----------------------------- |
| **400** | Bad Request       | Invalid or missing parameters |
| **401** | Unauthorized      | Invalid or missing API key    |
| **402** | Payment Required  | Insufficient credits          |
| **429** | Too Many Requests | Rate limit exceeded           |

A `401` means the API key is missing or invalid — see [Authentication](/authentication) for how to pass it correctly. A `402` means the account is out of credits; review consumption in [Credits & billing](/credits-billing). A `429` means the request exceeded the allowed throughput — see [Rate limits](/rate-limits) to understand the thresholds.

<Note>
  The API never returns **404**. An unknown or expired search ID returns **400** for bulk endpoints and **500** for single endpoints.
</Note>

### Which codes mean a server error?

A `5xx` status code means the request was valid but something went wrong on Enrow's end. These responses are safe to retry after a short delay.

| Code    | Meaning               | Description                     |
| ------- | --------------------- | ------------------------------- |
| **500** | Internal Server Error | Something went wrong on our end |

## What are search qualifications?

A search qualification is the value in the `qualification` field that tells you the outcome of a search or verification. Enrow returns this field across all endpoints, and the result is always **binary** — there is no "maybe" or probability score. This is a deliberate design choice.

### Why is the result binary?

The result is binary because a clear yes-or-no answer is easier to act on than a probability. Most enrichment tools return a complex set of categories — catch-all, risky, unknown, unverifiable, etc. — that force you to build logic around probabilities. Enrow took the opposite approach:

* **Enrow verifies even catch-all emails deterministically**, so there's no need for a "catch-all" category
* Enrow doesn't believe in probabilistic systems with dozens of classifications — they add complexity without clarity
* A binary result means you can act on the data immediately without second-guessing

The result is either good or it's not. Simple.

### What qualifications does Email Finder return?

The [Email Finder](/api-reference/email-finder/find-single) returns one of the following values in the `qualification` field:

| Qualification | Meaning                  |
| ------------- | ------------------------ |
| `valid`       | Email found and verified |
| `invalid`     | Email not found          |
| `ongoing`     | Search still in progress |

### What qualifications does Email Verifier return?

The [Email Verifier](/api-reference/email-verifier/verify-single) returns one of the following values in the `qualification` field:

| Qualification | Meaning                           |
| ------------- | --------------------------------- |
| `valid`       | Email is valid and deliverable    |
| `invalid`     | Email is invalid or undeliverable |
| `ongoing`     | Verification still in progress    |

<Note>
  `invalid` means different things depending on the endpoint: on the **Email Finder**, it means the email was not found. On the **Email Verifier**, it means the email exists but is not deliverable.
</Note>

### What qualifications does Phone Finder return?

The [Phone Finder](/api-reference/phone/find-single) returns one of the following values in the `qualification` field:

| Qualification | Meaning                           |
| ------------- | --------------------------------- |
| `found`       | Phone number successfully located |
| `not_found`   | Phone number could not be found   |
| `ongoing`     | Search still in progress          |

### How do I track a bulk search?

For bulk operations, a `status` field indicates the batch progress. Poll the relevant GET endpoint — [Email Finder bulk results](/api-reference/email-finder/get-bulk-results), [Email Verifier bulk verifications](/api-reference/email-verifier/get-bulk-verifications), or [Phone Finder bulk results](/api-reference/phone/get-bulk-results) — until the `status` is `completed`.

| Status      | Meaning                                |
| ----------- | -------------------------------------- |
| `ongoing`   | Batch is still processing              |
| `completed` | All searches in the batch are finished |
| `failed`    | The batch failed                       |

## FAQ

<AccordionGroup>
  <Accordion title="Why am I getting a 401 instead of a 200?">
    A `401 Unauthorized` means the API key is missing or invalid. Make sure every request includes a valid key in the `x-api-key` header. See [Authentication](/authentication) for details.
  </Accordion>

  <Accordion title="What does a 402 status code mean?">
    A `402 Payment Required` means the account does not have enough credits to complete the request. Top up or review how credits are consumed per endpoint in [Credits & billing](/credits-billing).
  </Accordion>

  <Accordion title="Why does an unknown search ID return 400 or 500 instead of 404?">
    The Enrow API never returns `404`. An unknown or expired search ID returns `400` for bulk endpoints and `500` for single endpoints. Double-check the `id` returned when the search was initiated.
  </Accordion>

  <Accordion title="Does qualification: ongoing mean something failed?">
    No. `ongoing` means the search or verification is still in progress. Poll the GET endpoint again after a short delay, or use a webhook to be notified automatically when it finishes — see [How webhooks work](/how-webhooks-work).
  </Accordion>
</AccordionGroup>

## Next steps

<CardGroup cols={2}>
  <Card title="Error handling" icon="triangle-exclamation" href="/error-handling">
    See the full error messages and response formats for each status code.
  </Card>

  <Card title="Authentication" icon="key" href="/authentication">
    Pass your API key in the x-api-key header to avoid 401 errors.
  </Card>

  <Card title="Rate limits" icon="gauge-high" href="/rate-limits">
    Understand the thresholds that trigger a 429 response.
  </Card>

  <Card title="Credits & billing" icon="coins" href="/credits-billing">
    See how credits are consumed and avoid 402 errors.
  </Card>
</CardGroup>
