> For the complete documentation index, see [llms.txt](https://docs.idlayr.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.idlayr.com/products/number-verification/discovery/error-codes.md).

# Error codes

{% hint style="info" %}
**Device API** · NV 1.0 · Early Access
{% endhint %}

Errors specific to Discovery. Two classes:

* **HTTP-response errors** — returned synchronously on API calls. RFC 7807 body with an `error_code`.
* **Terminal-state error codes** — carried in the DiscoveryCheck resource body when `status` is `ERROR` or `EXPIRED`.

This page lists only Discovery-specific codes. For the canonical, cross-product error catalogue with full semantics — see the [API Reference](https://docs.idlayr.com/api-reference). For client-side errors raised by the SDK before any HTTP request reaches IDlayr, see [SDK errors](/get-started/sdks/errors.md).

## HTTP-response errors

<table data-header-hidden="false" data-header-sticky><thead><tr><th width="96.265625">HTTP</th><th width="192.81640625">Error code</th><th>When</th></tr></thead><tbody><tr><td>400</td><td><code>invalid_request</code></td><td>Malformed request body</td></tr><tr><td>400</td><td>🆕 <code>invalid_ip</code></td><td>The IP address provided is missing or malformed.</td></tr><tr><td>400</td><td><code>bad_request</code></td><td>Malform request body</td></tr><tr><td>401</td><td><code>unauthorized</code></td><td>Your authentication token is missing, invalid, expired, or couldn't be verified. Get a new token and retry.</td></tr><tr><td>403</td><td><code>invalid_scope</code></td><td>Your credentials are valid but don't have permission for this endpoint or project. Request the correct scope for your token.</td></tr><tr><td>404</td><td><code>check_not_found</code></td><td>We couldn't find a check with this ID — it may be incorrect, expired, or already removed.</td></tr><tr><td>429</td><td><code>too_many_requests</code></td><td>Project rate limit exceeded</td></tr></tbody></table>

## Terminal-state error codes

Returned on the Discovery resource when `status` is `ERROR` or `EXPIRED`. The `error_code` field carries one of:

#### `status: ERROR` <a href="#status-error" id="status-error"></a>

<table><thead><tr><th width="212.97265625">Error Code</th><th width="88.29296875">HTTP</th><th>Explanation</th></tr></thead><tbody><tr><td>🆕 <code>invalid_ip</code></td><td>400</td><td>The IP address provided is missing or malformed.</td></tr><tr><td><code>not_mobile_ip</code></td><td>412</td><td>This request isn't coming from a mobile data connection, which this check requires.</td></tr><tr><td><code>mno_not_supported</code></td><td>422</td><td>We don't currently support this mobile operator.</td></tr><tr><td>🆕 <code>mno_not_enabled</code></td><td>422</td><td>This mobile operator isn't yet enabled for your project. Check your Approved Networks page, or request approval.</td></tr><tr><td>🆕 <code>service_unavailable</code></td><td>503</td><td>We're having a temporary issue on our side.</td></tr><tr><td><code>mno_server_error</code></td><td>200 (Error field)</td><td>The mobile operator's system returned an unexpected error.</td></tr><tr><td><code>mno_timeout</code></td><td>504</td><td>The request to the mobile operator's system timed out.</td></tr><tr><td><code>mno_response_error</code></td><td>200 (Error field)</td><td>The mobile operator's system sent back a response we couldn't understand.</td></tr><tr><td><code>mno_user_not_found</code></td><td>200 (Error field)</td><td>This phone number isn't recognized by the mobile operator for this check.</td></tr><tr><td>🆕 <code>mvno_not_supported</code></td><td>200 (Error field)</td><td>This phone number is from Mobile Virtual Network Operator that is not supported.</td></tr><tr><td><code>mno_no_data_available</code></td><td>200 (Error field)</td><td>The mobile operator isn't able to share the information needed for this check.</td></tr><tr><td><code>ip_mismatch</code></td><td>200 (Error field)</td><td>Your network connection changed partway through verification. Restart the check on a stable connection.</td></tr><tr><td><code>internal_error</code></td><td>500</td><td>Something went wrong on our end. Retry, and contact support if it persists.</td></tr></tbody></table>

#### `status: EXPIRED` <a href="#status-expired" id="status-expired"></a>

<table data-header-hidden="false" data-header-sticky><thead><tr><th width="252.8671875">Error code</th><th width="113.7578125">HTTP</th><th>Meaning</th></tr></thead><tbody><tr><td><code>redirect_not_performed</code></td><td>200 (status field)</td><td>The verification redirect was never executed by the device before the check expired</td></tr><tr><td><code>incomplete_redirect</code></td><td>200 (status field)</td><td>The verification redirect started but did not complete before the check expired</td></tr></tbody></table>

## Client-side SDK errors

If the SDK can't initiate the request, it returns a client-side error before any HTTP request reaches IDlayr. Same set as Secure SNA — see [SDK errors](/get-started/sdks/errors.md) for the cross-platform catalogue.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.idlayr.com/products/number-verification/discovery/error-codes.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
