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

# Verify operator domain

> Self-verify your operator domain via AAO or submit a manual review request

A verified operator domain is required before your buyer account can transact. Two endpoints let you complete verification without waiting for a Scope3 admin.

## Verify via AAO

`POST /api/v2/buyer/readiness/operator/verify`

Verifies the operator domain by checking the email claim in an AdCP Alliance Organization (AAO) identity token. Use this path when your work email domain matches the domain you're claiming.

The caller must have already completed the AAO OAuth flow (using `openid email` scopes). Pass the resulting `id_token` alongside the domain to verify. The server verifies the JWT signature against AAO's public keys and compares the email domain to the claimed operator domain. On a match, the domain is marked verified for the account.

```bash curl theme={null}
curl -X POST https://api.interchange.io/api/v2/buyer/readiness/operator/verify \
  -H "Authorization: Bearer $SCOPE3_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "domain": "acmeretail.com",
    "idToken": "<id_token from AAO OAuth>",
    "audience": "<client_id from AAO dynamic client registration>"
  }'
```

### Parameters

| Field      | In   | Type   | Required | Notes                                                                                        |
| ---------- | ---- | ------ | -------- | -------------------------------------------------------------------------------------------- |
| `domain`   | body | string | Yes      | Operator domain to verify (hostname, no `https://` prefix)                                   |
| `idToken`  | body | string | Yes      | JWT `id_token` returned by the AAO OAuth token endpoint                                      |
| `audience` | body | string | Yes      | `client_id` returned by AAO dynamic client registration. Prevents cross-session token reuse. |

### Response

```json theme={null}
{ "verified": true }
```

### Errors

* `400 VALIDATION_ERROR` — missing or malformed `domain` or `idToken`; or the email claim in the `id_token` does not match the claimed domain (the error context includes `aaoEmailDomain`). Use the [manual review path](#request-manual-review) if your email is from a different organization.
* `401 UNAUTHORIZED` — missing or invalid bearer token.
* `404 NOT_FOUND` — no saved operator domain found for this account. Save the domain first with `PATCH /api/v2/accounts/{customerId}/domain` or via the account settings panel.
* `500 INTERNAL_ERROR` — the `id_token` could not be verified (invalid signature, expired, or AAO metadata unavailable). Retry the OAuth flow.

***

## Request manual review

`POST /api/v2/buyer/readiness/operator/verify-request`

Submits a manual verification request. Use this path when you're an agency or consultant claiming a client domain that doesn't match your work email. Your request has been recorded. A member of the Scope3 team will follow up with you at the email address you provided.

```bash curl theme={null}
curl -X POST https://api.interchange.io/api/v2/buyer/readiness/operator/verify-request \
  -H "Authorization: Bearer $SCOPE3_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "domain": "clientbrand.com",
    "requesterEmail": "you@youragency.com",
    "message": "We are the agency of record for this brand."
  }'
```

### Parameters

| Field            | In   | Type   | Required | Notes                                   |
| ---------------- | ---- | ------ | -------- | --------------------------------------- |
| `domain`         | body | string | Yes      | Operator domain to verify               |
| `requesterEmail` | body | string | Yes      | Your contact email for this request     |
| `message`        | body | string | No       | Brief explanation (max 2000 characters) |

### Response

Returns `202 Accepted`:

```json theme={null}
{ "submitted": true, "id": "12345" }
```

### Errors

* `400 VALIDATION_ERROR` — missing or malformed fields.
* `401 UNAUTHORIZED` — missing or invalid bearer token.

***

## Related

<CardGroup cols={2}>
  <Card title="Update account domain" href="/v2/buyer/account/tasks/update-customer-domain" icon="globe">
    `PATCH /accounts/:customerId/domain` — save the domain before verifying
  </Card>

  <Card title="Account tasks" href="/v2/buyer/account/tasks" icon="list-check">
    All account operations
  </Card>
</CardGroup>
