# Pre-flight up to 100 numbers in one call

Source: https://docs.usetone.ai/reference/compliance/complianceChecks.checkBatch

> Each number runs the full gate and is metered as its own verdict, so a batch of 100 costs 100 verdicts.

`POST /v1/compliance/check/batch`
Each number runs the full gate and is metered as its own verdict, so a batch of 100 costs 100 verdicts. A campaign-sized list belongs in a campaign, which has a pre-flight built for that scale.

Requires the `write` scope.

## Request body

| Field | Type | | Meaning |
|---|---|---|---|
| `e164s` | string[] | required | The numbers to pre-flight, 1-100. Each one runs the full gate and is metered as its own verdict. A campaign-sized list belongs in a campaign, which has a pre-flight built for that scale. |
| `purpose` | string | optional | The sender classification this call falls under, which decides the legal calling window and whether consent is required. Omit to use your organisation's declared `defaultCallPurpose`. It may only ever narrow — you cannot declare a stricter default and then send a looser purpose per request. Applies to every number in the batch. Open set — handle an unrecognised value rather than throwing. Today: `promotional`, `service`, `transactional`, `collections`. |

### Example request

```json
{
  "e164s": [
    "+919876543210",
    "+919812345678"
  ],
  "purpose": "promotional"
}
```

## Response



### Example response

```json
{
  "data": [
    {
      "allowed": true,
      "blockedBy": null,
      "checks": [
        {
          "callId": "9f1c2d84-4e3a-4f6c-b902-7d1e8a33c451",
          "checkType": "dnc",
          "createdAt": "2026-08-25T09:14:22Z",
          "detail": {},
          "e164": "+919876543210",
          "enforced": true,
          "id": "8814",
          "outcome": "pass",
          "reason": "Asked to be removed during a call on 2026-08-20.",
          "source": "internal"
        }
      ],
      "e164": "+919876543210",
      "purpose": "promotional"
    }
  ]
}
```
