> ## 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.

# Check property list

> Validate a candidate identifier set against the AAO registry without creating a list

`POST /api/v2/buyer/property-lists/check`

Lints a candidate identifier set against the AAO Community Registry and curation rules without creating anything. Use it before a bulk import to see which entries are clean, which are canonicalized, which should be dropped, and which need manual review.

## Request

<CodeGroup>
  ```bash curl theme={null}
  curl -X POST https://api.interchange.io/api/v2/buyer/property-lists/check \
    -H "Authorization: Bearer $SCOPE3_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "identifiers": [
        { "type": "domain", "value": "example-times.com" },
        { "type": "domain", "value": "duplicate.com" },
        { "type": "domain", "value": "duplicate.com" },
        { "type": "ios_bundle", "value": "com.facebook.katana" }
      ]
    }'
  ```

  ```json Domains shorthand theme={null}
  {
    "domains": ["example-times.com", "WWW.example-press.co.uk", "example-news.com"]
  }
  ```
</CodeGroup>

## Parameters

| Field         | Type      | Required | Notes                                                          |
| ------------- | --------- | -------- | -------------------------------------------------------------- |
| `domains`     | string\[] | No       | Shorthand for `identifiers` of `type: "domain"`. Up to 100,000 |
| `identifiers` | object\[] | No       | Typed `{ type, value }`. Up to 100,000                         |

Provide `domains`, `identifiers`, or both; the combined total must be 1–100,000. Non-domain identifiers (mobile/CTV) are not yet checked against AAO and always land in the `assess` bucket.

## Response

```json theme={null}
{
  "summary": { "total": 4, "remove": 1, "modify": 0, "assess": 1, "ok": 2 },
  "ok": [
    { "domain": "example-times.com", "source": "aao", "identifier": { "type": "domain", "value": "example-times.com" } }
  ],
  "modify": [],
  "remove": [
    { "input": "duplicate.com", "canonical": "duplicate.com", "reason": "duplicate", "identifier": { "type": "domain", "value": "duplicate.com" } }
  ],
  "assess": [
    { "domain": "com.facebook.katana", "identifier": { "type": "ios_bundle", "value": "com.facebook.katana" } }
  ],
  "reportId": "rpt_abc123",
  "reportIds": ["rpt_abc123"]
}
```

Entries are grouped into buckets — `ok` (safe to include), `modify` (canonicalized), `remove` (duplicate or blocked), and `assess` (manual review). Each entry carries an `identifier: { type, value }` mirroring the input. `reportId` (and `reportIds[]` when domain input is chunked) is returned only when at least one `domain` was submitted; bundle-only requests return no report IDs.

## Errors

* `400 VALIDATION_ERROR` — empty identifier set or combined total above 100,000.

See [Errors](/v2/reference/errors) for the full error contract.

## Related

<CardGroup cols={2}>
  <Card title="Property list tasks" href="/v2/buyer/property-lists/tasks" icon="list-check">
    All property list operations
  </Card>

  <Card title="Property Lists guide" href="/v2/guides/property-lists" icon="list">
    Check buckets and identifier types
  </Card>

  <Card title="Get check report" href="/v2/buyer/property-lists/tasks/get-check-report" icon="file-lines">
    Retrieve a stored check report by ID
  </Card>

  <Card title="Create property list" href="/v2/buyer/property-lists/tasks/create-property-list" icon="plus">
    Commit a validated set to a list
  </Card>
</CardGroup>
