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

# List validation items

> Read a validation run's answers, a page at a time.

Answers a page of a validation run's items in the order they were submitted, each with its verdict. Page with cursor until nextCursor is null. complete is true once the run is final. While it is false an item already passed can still be answered, so page again from the start once complete is true. For the whole run as a file, call download_validation.

`GET https://api.leadity.io/v1/validations/{id}/items`

- Scope: `read`
- Spends credits: no
- MCP tool: `list_validation_items`

## Headers

- `Authorization`, string, required. Bearer, a space, then an API key: Bearer lk_api_... An MCP key is refused here with wrong_key_kind.

## Path parameters

- `id`, string, required. The validation run's id, as create_validation and list_validations answer it. 1 to 64 characters, matches ^[A-Za-z0-9]{1,64}$.

## Query parameters

- `cursor`, string, optional. The nextCursor of the previous page of items. Leave it out for the first page. 1 to 200 characters.
- `limit`, integer, optional. How many items one page holds, 1 to 500. Default 100. 1 to 500. Default `100`.

## Example request

```bash cURL
curl "https://api.leadity.io/v1/validations/Wq5nB8kT3m/items?limit=100" \
  -H "Authorization: Bearer $LEADITY_API_KEY"
```

```javascript Node.js
const response = await fetch("https://api.leadity.io/v1/validations/Wq5nB8kT3m/items?limit=100", {
  headers: {
    Authorization: `Bearer ${process.env.LEADITY_API_KEY}`,
  },
});

const data = await response.json();
console.log(data);
```

```python Python
import os

import requests

response = requests.get(
    "https://api.leadity.io/v1/validations/Wq5nB8kT3m/items",
    params={"limit": 100},
    headers={
        "Authorization": f"Bearer {os.environ['LEADITY_API_KEY']}",
    },
)

print(response.json())
```

## Response

- `items`, object[], required.
  - `input`, string, required. The item as submitted.
  - `normalized`, string, required. The item as checked: E.164 for a number, lowercase for an address.
  - `verdict`, string | null, required. The answer, or null while the item waits.
  - `detail`, object, required. What else the check learned: the carrier and rate centre of a number, the verifier's own fields for an address.
- `nextCursor`, string | null, required. Pass it as cursor to read the next page. Null on the last page.
- `complete`, boolean, required. True once the run is final and no item can still be answered.

## Example response

```json 200
{
  "items": [
    {
      "input": "(512) 555-0123",
      "normalized": "+15125550123",
      "verdict": "mobile",
      "detail": {
        "carrier": "T-Mobile USA",
        "rateCenter": "AUSTIN"
      }
    }
  ],
  "nextCursor": "aXRlbTo0NDEyOQ",
  "complete": true
}
```

## Errors

Every refusal answers `{ error, message }` with the status below. The full list is on the [Errors](https://docs.leadity.io/errors) page.

| Code | Status | Meaning | Extra fields |
| --- | --- | --- | --- |
| `unauthorized` | 401 | The API key is missing, malformed, revoked or expired. | - |
| `wrong_key_kind` | 401 | This key opens the other surface: an API key works on the HTTP API, an MCP key on the MCP server. | - |
| `account_suspended` | 403 | The account is suspended. | - |
| `email_not_verified` | 403 | The account's email address is not verified yet. | - |
| `invalid_body` | 400 | The request does not match the operation's schema. | `issues`: The problems found, each with path (the field as a dotted path, led by the part of the request it travels in: path, query or body, such as body.items.1) and message (what is wrong there). |
| `not_found` | 404 | No such resource on this account. | `id`: On export_scrapes: the first id that is not one of the account's scrapes. |
| `rate_limited` | 429 | Too many requests. Wait for the Retry-After seconds and try again. | `retryAfterSeconds`: The seconds to wait, the same number as the Retry-After header. |
| `try_again` | 503 | Leadity could not answer just now. Retry in a moment, with the same Idempotency-Key on a spending call. | `retryAfterSeconds`: When a request with this Idempotency-Key is still being processed: the seconds to wait before retrying with the same key, as the Retry-After header says. |
| `internal_error` | 500 | Something failed on our side. Nothing was charged twice. | `body`: On the MCP server, when Leadity answered in a shape the tool does not publish: that answer as it came. |
