# Spaw API reference

Base URL: `https://spaw.co/api/v1`. Machine-readable description: https://spaw.co/openapi.json (also /openapi.yaml).

Spaw verifies email addresses, phone numbers, IP addresses, postal addresses and company identifiers over plain REST, and compares those signals against each other: JSON in and out, typed errors, and one credit balance across every endpoint. An email lookup runs RFC syntax parsing, live DNS and MX checks, SPF and DMARC records, open disposable and role lists, and a mailbox-level SMTP handshake; the other signals answer from datasets held on our own servers, and every answer names the datasets it came from. No verification ever sends mail, and nothing is ever sent to a number or an address you check.

## Authentication

Every request carries a secret API key as a bearer token. Create and revoke keys on the dashboard's API keys page; a key is shown once at creation and stored hashed.

```http
Authorization: Bearer sk_live_…
Content-Type: application/json
```

There are two kinds of keys. Secret `sk_live_` keys authenticate servers and unlock the full API. Publishable `pk_` keys are safe in browser page source: they can only run single lookups through the four browser endpoints — `POST /api/v1/email/public`, `POST /api/v1/phone/public` (which never runs the live carrier-network check), `POST /api/v1/ip/public` and `POST /api/v1/address/public` — and only from the domains they are locked to.

A key only works once the account behind it has confirmed its email address. Until then every request under `/api/v1`, and every MCP tool call, answers `403 EMAIL_NOT_VERIFIED` with the standard error envelope, and nothing is charged. Open the link in the verification email, or sign in and request a new one from the verification notice, then retry the same call. The browser endpoint and the bounce webhook URLs are unaffected.

## Response envelope

Successful lookups answer `{ "success": true, "data": …, "meta": … }`. The `meta` block carries `credits_used`, `credits_remaining`, `cache_hit`, and `request_id` (email lookups add `suppressed` and `fair_use_billed`, and `settling` when a callback was requested; IP lookups add `ip_lookups_prepaid`). Failures answer `{ "success": false, "error": { "code", "message", "request_id" } }` with a stable code to branch on; validation failures add `error.errors` keyed by field. Every failure answers in that shape, including the ones the framework used to answer for itself: a record that is not on the account is `404 NOT_FOUND`, a wrong HTTP verb is `405 METHOD_NOT_ALLOWED` with an `Allow` header, and a failure on this side is `500 SERVER_ERROR`. Every response also carries an `X-Request-Id` header that matches every log line the request produced. Quote it when writing to support.

## Billing

You pay for answers, not attempts, and anything you paid to check once is free to check again for seven days.

| Outcome | Credits |
| --- | --- |
| Fresh lookup with a usable answer (deliverable or risky verdict, a domain that accepts mail, a valid phone number, an address that stands as written, a register that answers) | 1 |
| Five fresh IP lookups that place an address | 1 |
| Email answer whose mailbox check was uncertain (`unverified`, including a handshake partner outage) | 0 |
| Undeliverable email verdict within the fair-use allowance | 0 |
| Undeliverable email verdict past the fair-use allowance (`meta.fair_use_billed` true) | 1 |
| Invalid input or no match | 0 |
| Repeat of a recent lookup, within 7 days | 0 |
| Repeat asked for fresh with `refresh` or an exceeded `max_age`, when answered | 1 |
| Rejected or failed request | 0 |
| Monthly free grant, every account | +100 |

An uncertain mailbox answer writes no seven-day repeat marker, so a later lookup of the address is a fresh one: the uncertain probe result is reused for up to 15 minutes (`refresh` and `max_age` do not set it aside), then the mailbox is asked again, and the lookup bills 1 credit only once the mailbox is confirmed.

Fair use: undeliverable email verdicts that needed a mailbox check are free up to 500 in any 30 days, or the number of deliverable and risky email answers billed in those 30 days when that is more. Past the allowance each one bills 1 credit and answers `meta.fair_use_billed: true`. Verdicts settled without a mailbox check (bad syntax, no working mail server, a username the provider never allows), suppressed answers, test addresses and repeats are always free and never counted.

IP lookups are billed in blocks of five. The answered IP lookup that opens a block reports `credits_used: 1` and leaves four prepaid on the account; the next four answered IP lookups report `credits_used: 0`. `meta.ip_lookups_prepaid` says how many are left after the call, and one `ip_lookup` row in the ledger stands for a block of five. Reserved, private and unallocated ranges, unknown addresses and repeats are free and never use a prepaid lookup. ASN and range lookups are not IP lookups and bill 1 credit each.

Credit packs are one-time purchases from the dashboard's Billing page (from $9 for 1,000 credits); plans deposit the same credits every month for less (from $7 a month, or yearly for ten months' price) and can be cancelled at any time. Plan credits are spent first. Pack credits never expire; plan credits roll over up to three months' allowance and stay usable for 60 days after you cancel. `GET /api/v1/account` returns the live balance and the plan for pre-flight checks.

## Rate limits

Every key may make 5 requests per second; a batch or bulk call counts as one request. Over the limit, the API answers `429 RATE_LIMITED` with a `Retry-After` header.

## Test addresses

Six fixed addresses on the reserved `spaw.test` domain always answer the same canonical result, cost no credits, touch no DNS or mail server, and never appear in your history or suppression list. A plus-tag (`deliverable+ci@spaw.test`) works too, on every endpoint including batch, bulk, and the browser endpoint.

| Address | Answer |
| --- | --- |
| deliverable@spaw.test | deliverable · mailbox confirmed, risk_score 0 |
| unverified@spaw.test | risky · reason unverified, smtp_checked false, smtp_reason greylisted, mailbox_confidence set |
| catch-all@spaw.test | risky · reason catch_all, mailbox_exists null |
| disposable@spaw.test | risky · reason disposable, risk_score 90 |
| role@spaw.test | risky · reason role |
| undeliverable@spaw.test | undeliverable · reason mailbox_not_found, smtp_reason no_mailbox |

## Data sources

Every lookup's `data.sources` array names the dataset and version behind the answer (`rfc-5322-syntax`, `live-dns`, `disposable-domains`, `role-addresses`, `free-provider-domains`, `typo-domains`, `provider-username-rules`, `mx-provider-patterns`, `rdap-registration`, the mailbox probe's provider and date, `delivery-feedback`, `suppression-list`, or `test-addresses`), so an answer can always be audited.

## Endpoints

Grouped by product, and inside each product by the kind of endpoint.

### Email verification

#### Lookups

| Method | Path | Summary |
| --- | --- | --- |
| POST | `/api/v1/email` | [Verify an email address](https://spaw.co/docs/api/verify-email) |
| GET | `/api/v1/email/domain/{domain}` | [Inspect a domain's mail setup](https://spaw.co/docs/api/domain-intelligence) |

#### Batch & browser

| Method | Path | Summary |
| --- | --- | --- |
| POST | `/api/v1/email/batch` | [Verify up to 50 addresses in one call](https://spaw.co/docs/api/verify-email-batch) |
| POST | `/api/v1/email/public` | [Verify an address from the browser with a publishable key](https://spaw.co/docs/api/verify-email-public) |

#### Bulk jobs

| Method | Path | Summary |
| --- | --- | --- |
| GET | `/api/v1/email/bulk` | [List the account's bulk verification runs](https://spaw.co/docs/api/list-bulk-jobs) |
| POST | `/api/v1/email/bulk` | [Queue a bulk verification run](https://spaw.co/docs/api/create-bulk-job) |
| GET | `/api/v1/email/bulk/{jobId}` | [Poll a bulk job](https://spaw.co/docs/api/get-bulk-job) |
| POST | `/api/v1/email/bulk/{jobId}/cancel` | [Cancel a bulk job](https://spaw.co/docs/api/cancel-bulk-job) |
| POST | `/api/v1/email/bulk/{jobId}/resume` | [Resume a bulk job that ran out of credits](https://spaw.co/docs/api/resume-bulk-job) |
| POST | `/api/v1/email/bulk/{jobId}/webhook/redeliver` | [Send a finished run's completion webhook again](https://spaw.co/docs/api/redeliver-bulk-webhook) |
| GET | `/api/v1/email/bulk/{jobId}/results` | [Download a bulk job's results as CSV](https://spaw.co/docs/api/download-bulk-results) |

#### Monitored lists

| Method | Path | Summary |
| --- | --- | --- |
| GET | `/api/v1/email/monitors` | [List the account's monitors](https://spaw.co/docs/api/list-monitors) |
| POST | `/api/v1/email/monitors` | [Monitor a list on a schedule](https://spaw.co/docs/api/create-monitor) |
| GET | `/api/v1/email/monitors/{monitorId}` | [Read a monitor and its last results](https://spaw.co/docs/api/get-monitor) |
| PATCH | `/api/v1/email/monitors/{monitorId}` | [Change a monitor](https://spaw.co/docs/api/update-monitor) |
| DELETE | `/api/v1/email/monitors/{monitorId}` | [Stop monitoring a list](https://spaw.co/docs/api/delete-monitor) |
| POST | `/api/v1/email/monitors/{monitorId}/run` | [Re-verify a monitored list now](https://spaw.co/docs/api/run-monitor) |
| GET | `/api/v1/email/domain-monitors` | [List the account's domain monitors](https://spaw.co/docs/api/list-domain-monitors) |
| POST | `/api/v1/email/domain-monitors` | [Monitor a list of domains on a schedule](https://spaw.co/docs/api/create-domain-monitor) |
| GET | `/api/v1/email/domain-monitors/{monitorId}` | [Read a domain monitor and its last results](https://spaw.co/docs/api/get-domain-monitor) |
| PATCH | `/api/v1/email/domain-monitors/{monitorId}` | [Change a domain monitor](https://spaw.co/docs/api/update-domain-monitor) |
| DELETE | `/api/v1/email/domain-monitors/{monitorId}` | [Stop monitoring a domain list](https://spaw.co/docs/api/delete-domain-monitor) |
| POST | `/api/v1/email/domain-monitors/{monitorId}/run` | [Re-check a monitored domain list now](https://spaw.co/docs/api/run-domain-monitor) |

#### Sending policy

| Method | Path | Summary |
| --- | --- | --- |
| GET | `/api/v1/email/policy` | [Read the account's sending policy](https://spaw.co/docs/api/get-email-policy) |
| PUT | `/api/v1/email/policy` | [Change one or more rules of the sending policy](https://spaw.co/docs/api/update-email-policy) |
| DELETE | `/api/v1/email/policy` | [Restore the default sending policy](https://spaw.co/docs/api/reset-email-policy) |

#### Outcome feedback

| Method | Path | Summary |
| --- | --- | --- |
| POST | `/api/v1/email/feedback` | [Report delivery outcomes](https://spaw.co/docs/api/report-delivery-feedback) |
| GET | `/api/v1/email/feedback/summary` | [Measured accuracy](https://spaw.co/docs/api/feedback-summary) |
| POST | `/api/v1/email/feedback/{provider}/{feedbackKey}` | [Receive bounce webhooks from an email provider](https://spaw.co/docs/api/esp-bounce-webhook) |

#### Suppression lists

| Method | Path | Summary |
| --- | --- | --- |
| GET | `/api/v1/email/suppressions` | [List the suppression list](https://spaw.co/docs/api/list-suppressions) |
| POST | `/api/v1/email/suppressions` | [Import known-bad addresses](https://spaw.co/docs/api/add-suppressions) |
| DELETE | `/api/v1/email/suppressions` | [Remove addresses from the suppression list](https://spaw.co/docs/api/remove-suppressions) |
| DELETE | `/api/v1/email/suppressions/{suppressionId}` | [Remove a suppression entry](https://spaw.co/docs/api/remove-suppression) |

#### History

| Method | Path | Summary |
| --- | --- | --- |
| GET | `/api/v1/email/history` | [List the account's verification history](https://spaw.co/docs/api/list-history) |

### Phone intelligence

#### Lookups

| Method | Path | Summary |
| --- | --- | --- |
| POST | `/api/v1/phone` | [Validate and enrich a phone number](https://spaw.co/docs/api/validate-phone) |
| GET | `/api/v1/phone/block/{country}/{prefix}` | [Report a number range from the regulator's table](https://spaw.co/docs/api/phone-block-report) |

#### Batch & browser

| Method | Path | Summary |
| --- | --- | --- |
| POST | `/api/v1/phone/batch` | [Validate up to 1,000 numbers in one call](https://spaw.co/docs/api/lookup-phone-batch) |
| POST | `/api/v1/phone/public` | [Validate a number from the browser with a publishable key](https://spaw.co/docs/api/validate-phone-public) |

#### Bulk jobs

| Method | Path | Summary |
| --- | --- | --- |
| GET | `/api/v1/phone/bulk` | [List the account's bulk phone lookup runs](https://spaw.co/docs/api/list-phone-bulk-jobs) |
| POST | `/api/v1/phone/bulk` | [Queue a bulk phone lookup run](https://spaw.co/docs/api/create-phone-bulk-job) |
| GET | `/api/v1/phone/bulk/{jobId}` | [Poll a bulk phone job](https://spaw.co/docs/api/get-phone-bulk-job) |
| POST | `/api/v1/phone/bulk/{jobId}/cancel` | [Cancel a bulk phone job](https://spaw.co/docs/api/cancel-phone-bulk-job) |
| POST | `/api/v1/phone/bulk/{jobId}/resume` | [Resume a bulk job that ran out of credits](https://spaw.co/docs/api/resume-phone-bulk-job) |
| POST | `/api/v1/phone/bulk/{jobId}/webhook/redeliver` | [Send a finished run's completion webhook again](https://spaw.co/docs/api/redeliver-phone-bulk-webhook) |
| GET | `/api/v1/phone/bulk/{jobId}/results` | [Download a bulk phone job's results](https://spaw.co/docs/api/download-phone-bulk-results) |

#### Monitored lists

| Method | Path | Summary |
| --- | --- | --- |
| GET | `/api/v1/phone/monitors` | [List the account's phone monitors](https://spaw.co/docs/api/list-phone-monitors) |
| POST | `/api/v1/phone/monitors` | [Monitor a phone list on a schedule](https://spaw.co/docs/api/create-phone-monitor) |
| GET | `/api/v1/phone/monitors/{monitorId}` | [Read a phone monitor and its last results](https://spaw.co/docs/api/get-phone-monitor) |
| PATCH | `/api/v1/phone/monitors/{monitorId}` | [Change a monitor](https://spaw.co/docs/api/update-phone-monitor) |
| DELETE | `/api/v1/phone/monitors/{monitorId}` | [Stop monitoring a phone list](https://spaw.co/docs/api/delete-phone-monitor) |
| POST | `/api/v1/phone/monitors/{monitorId}/run` | [Re-check a monitored phone list now](https://spaw.co/docs/api/run-phone-monitor) |

#### Sending policy

| Method | Path | Summary |
| --- | --- | --- |
| GET | `/api/v1/phone/policy` | [Read the account's SMS policy](https://spaw.co/docs/api/get-phone-policy) |
| PUT | `/api/v1/phone/policy` | [Change one or more rules of the SMS policy](https://spaw.co/docs/api/update-phone-policy) |
| DELETE | `/api/v1/phone/policy` | [Restore the default SMS policy](https://spaw.co/docs/api/reset-phone-policy) |

#### Outcome feedback

| Method | Path | Summary |
| --- | --- | --- |
| POST | `/api/v1/phone/feedback/{provider}/{feedbackKey}` | [Receive delivery status webhooks from an SMS provider](https://spaw.co/docs/api/sms-status-webhook) |
| POST | `/api/v1/phone/feedback` | [Report SMS outcomes](https://spaw.co/docs/api/report-phone-feedback) |
| GET | `/api/v1/phone/feedback/summary` | [Reported SMS outcomes](https://spaw.co/docs/api/phone-feedback-summary) |

#### Suppression lists

| Method | Path | Summary |
| --- | --- | --- |
| GET | `/api/v1/phone/suppressions` | [List the phone suppression list](https://spaw.co/docs/api/list-phone-suppressions) |
| POST | `/api/v1/phone/suppressions` | [Import known-dead numbers](https://spaw.co/docs/api/add-phone-suppressions) |
| DELETE | `/api/v1/phone/suppressions` | [Remove numbers from the phone suppression list](https://spaw.co/docs/api/remove-phone-suppressions) |
| DELETE | `/api/v1/phone/suppressions/{suppressionId}` | [Remove a phone suppression entry](https://spaw.co/docs/api/remove-phone-suppression) |

### IP intelligence

#### Lookups

| Method | Path | Summary |
| --- | --- | --- |
| POST | `/api/v1/ip` | [Locate and risk-score an IP address](https://spaw.co/docs/api/lookup-ip) |
| GET | `/api/v1/ip/{ip}` | [Look up an address by path](https://spaw.co/docs/api/get-ip) |
| GET | `/api/v1/ip/me` | [Look up the address the call came from](https://spaw.co/docs/api/get-my-ip) |
| GET | `/api/v1/ip/asn/{asn}` | [Read an autonomous system and its prefixes](https://spaw.co/docs/api/get-ip-asn) |
| GET | `/api/v1/ip/range` | [Read what the feeds say about a whole prefix](https://spaw.co/docs/api/lookup-ip-range) |

#### Batch & browser

| Method | Path | Summary |
| --- | --- | --- |
| POST | `/api/v1/ip/batch` | [Look up up to 1,000 addresses in one call](https://spaw.co/docs/api/lookup-ip-batch) |
| POST | `/api/v1/ip/public` | [Look up an address from the browser with a publishable key](https://spaw.co/docs/api/lookup-ip-public) |

#### Bulk jobs

| Method | Path | Summary |
| --- | --- | --- |
| GET | `/api/v1/ip/bulk` | [List the account's bulk IP lookup runs](https://spaw.co/docs/api/list-ip-bulk-jobs) |
| POST | `/api/v1/ip/bulk` | [Queue a bulk IP lookup run](https://spaw.co/docs/api/create-ip-bulk-job) |
| GET | `/api/v1/ip/bulk/{jobId}` | [Poll a bulk IP job](https://spaw.co/docs/api/get-ip-bulk-job) |
| POST | `/api/v1/ip/bulk/{jobId}/cancel` | [Cancel a bulk IP job](https://spaw.co/docs/api/cancel-ip-bulk-job) |
| POST | `/api/v1/ip/bulk/{jobId}/resume` | [Resume a bulk job that ran out of credits](https://spaw.co/docs/api/resume-ip-bulk-job) |
| POST | `/api/v1/ip/bulk/{jobId}/webhook/redeliver` | [Send a finished run's completion webhook again](https://spaw.co/docs/api/redeliver-ip-bulk-webhook) |
| GET | `/api/v1/ip/bulk/{jobId}/results` | [Download a bulk IP job's results](https://spaw.co/docs/api/download-ip-bulk-results) |

#### Monitored lists

| Method | Path | Summary |
| --- | --- | --- |
| GET | `/api/v1/ip/monitors` | [List the account's IP monitors](https://spaw.co/docs/api/list-ip-monitors) |
| POST | `/api/v1/ip/monitors` | [Monitor your own addresses on a schedule](https://spaw.co/docs/api/create-ip-monitor) |
| GET | `/api/v1/ip/monitors/{monitorId}` | [Read an IP monitor and its last results](https://spaw.co/docs/api/get-ip-monitor) |
| PATCH | `/api/v1/ip/monitors/{monitorId}` | [Change a monitor](https://spaw.co/docs/api/update-ip-monitor) |
| DELETE | `/api/v1/ip/monitors/{monitorId}` | [Stop monitoring an IP list](https://spaw.co/docs/api/delete-ip-monitor) |
| POST | `/api/v1/ip/monitors/{monitorId}/run` | [Re-check a monitored IP list now](https://spaw.co/docs/api/run-ip-monitor) |

#### Your lists

| Method | Path | Summary |
| --- | --- | --- |
| GET | `/api/v1/ip/lists` | [List the account's allow and deny lists](https://spaw.co/docs/api/list-ip-lists) |
| POST | `/api/v1/ip/lists` | [Create an allow or deny list](https://spaw.co/docs/api/create-ip-list) |
| GET | `/api/v1/ip/lists/{listId}` | [Read a list and its entries](https://spaw.co/docs/api/get-ip-list) |
| PATCH | `/api/v1/ip/lists/{listId}` | [Change a list](https://spaw.co/docs/api/update-ip-list) |
| DELETE | `/api/v1/ip/lists/{listId}` | [Remove a list](https://spaw.co/docs/api/delete-ip-list) |

#### Outcome feedback

| Method | Path | Summary |
| --- | --- | --- |
| POST | `/api/v1/ip/feedback` | [Report IP outcomes](https://spaw.co/docs/api/report-ip-feedback) |
| GET | `/api/v1/ip/feedback/summary` | [Reported IP outcomes](https://spaw.co/docs/api/ip-feedback-summary) |

### Address verification

#### Lookups

| Method | Path | Summary |
| --- | --- | --- |
| POST | `/api/v1/address` | [Validate and enrich a postal address](https://spaw.co/docs/api/validate-address) |
| GET | `/api/v1/address/postcode/{postcode}` | [List the addresses at a postcode](https://spaw.co/docs/api/find-addresses-by-postcode) |
| GET | `/api/v1/address/streets` | [List the streets at a postcode](https://spaw.co/docs/api/list-address-streets) |

#### Batch & browser

| Method | Path | Summary |
| --- | --- | --- |
| POST | `/api/v1/address/batch` | [Validate up to 100 addresses in one call](https://spaw.co/docs/api/lookup-address-batch) |
| POST | `/api/v1/address/public` | [Validate an address from the browser with a publishable key](https://spaw.co/docs/api/validate-address-public) |

#### Bulk jobs

| Method | Path | Summary |
| --- | --- | --- |
| GET | `/api/v1/address/bulk` | [List the account's bulk address lookup runs](https://spaw.co/docs/api/list-address-bulk-jobs) |
| POST | `/api/v1/address/bulk` | [Queue a bulk address lookup run](https://spaw.co/docs/api/create-address-bulk-job) |
| GET | `/api/v1/address/bulk/{jobId}` | [Poll a bulk address job](https://spaw.co/docs/api/get-address-bulk-job) |
| POST | `/api/v1/address/bulk/{jobId}/cancel` | [Cancel a bulk address job](https://spaw.co/docs/api/cancel-address-bulk-job) |
| POST | `/api/v1/address/bulk/{jobId}/resume` | [Resume a bulk job that ran out of credits](https://spaw.co/docs/api/resume-address-bulk-job) |
| POST | `/api/v1/address/bulk/{jobId}/webhook/redeliver` | [Send a finished run's completion webhook again](https://spaw.co/docs/api/redeliver-address-bulk-webhook) |
| GET | `/api/v1/address/bulk/{jobId}/results` | [Download a bulk address job's results](https://spaw.co/docs/api/download-address-bulk-results) |

#### Monitored lists

| Method | Path | Summary |
| --- | --- | --- |
| GET | `/api/v1/address/monitors` | [List the account's address monitors](https://spaw.co/docs/api/list-address-monitors) |
| POST | `/api/v1/address/monitors` | [Monitor a list of addresses on a schedule](https://spaw.co/docs/api/create-address-monitor) |
| GET | `/api/v1/address/monitors/{monitorId}` | [Read an address monitor and its last results](https://spaw.co/docs/api/get-address-monitor) |
| PATCH | `/api/v1/address/monitors/{monitorId}` | [Change a monitor](https://spaw.co/docs/api/update-address-monitor) |
| DELETE | `/api/v1/address/monitors/{monitorId}` | [Stop monitoring an address list](https://spaw.co/docs/api/delete-address-monitor) |
| POST | `/api/v1/address/monitors/{monitorId}/run` | [Re-check a monitored address list now](https://spaw.co/docs/api/run-address-monitor) |

#### Sending policy

| Method | Path | Summary |
| --- | --- | --- |
| GET | `/api/v1/address/policy` | [Read the account's shipping policy](https://spaw.co/docs/api/get-address-policy) |
| PUT | `/api/v1/address/policy` | [Change one or more rules of the shipping policy](https://spaw.co/docs/api/update-address-policy) |
| DELETE | `/api/v1/address/policy` | [Restore the default shipping policy](https://spaw.co/docs/api/reset-address-policy) |

#### Outcome feedback

| Method | Path | Summary |
| --- | --- | --- |
| POST | `/api/v1/address/feedback` | [Report what happened to post you sent](https://spaw.co/docs/api/report-address-feedback) |
| GET | `/api/v1/address/feedback/summary` | [Reported postal outcomes](https://spaw.co/docs/api/address-feedback-summary) |

#### Suppression lists

| Method | Path | Summary |
| --- | --- | --- |
| GET | `/api/v1/address/suppressions` | [List the address suppression list](https://spaw.co/docs/api/list-address-suppressions) |
| POST | `/api/v1/address/suppressions` | [Import known-dead addresses](https://spaw.co/docs/api/add-address-suppressions) |
| DELETE | `/api/v1/address/suppressions` | [Remove addresses from the address suppression list](https://spaw.co/docs/api/remove-address-suppressions) |
| DELETE | `/api/v1/address/suppressions/{suppressionId}` | [Remove an address suppression entry](https://spaw.co/docs/api/remove-address-suppression) |

### Business verification

#### Lookups

| Method | Path | Summary |
| --- | --- | --- |
| POST | `/api/v1/entity` | [Check a business identifier against the registers](https://spaw.co/docs/api/verify-entity) |

#### Batch & browser

| Method | Path | Summary |
| --- | --- | --- |
| POST | `/api/v1/entity/batch` | [Check up to 500 identifiers in one call](https://spaw.co/docs/api/lookup-entity-batch) |

#### Monitored lists

| Method | Path | Summary |
| --- | --- | --- |
| GET | `/api/v1/entity/monitors` | [List business monitors](https://spaw.co/docs/api/list-entity-monitors) |
| POST | `/api/v1/entity/monitors` | [Save a business monitor](https://spaw.co/docs/api/create-entity-monitor) |
| GET | `/api/v1/entity/monitors/{monitorId}` | [Get a business monitor](https://spaw.co/docs/api/get-entity-monitor) |
| PATCH | `/api/v1/entity/monitors/{monitorId}` | [Change a monitor](https://spaw.co/docs/api/update-entity-monitor) |
| DELETE | `/api/v1/entity/monitors/{monitorId}` | [Delete a business monitor](https://spaw.co/docs/api/delete-entity-monitor) |
| POST | `/api/v1/entity/monitors/{monitorId}/run` | [Run a business monitor now](https://spaw.co/docs/api/run-entity-monitor) |

### Cross-signal consistency

#### Lookups

| Method | Path | Summary |
| --- | --- | --- |
| POST | `/api/v1/consistency` | [Check several signals against each other](https://spaw.co/docs/api/check-consistency) |

#### Bulk jobs

| Method | Path | Summary |
| --- | --- | --- |
| GET | `/api/v1/consistency/bulk` | [List the account's bulk consistency runs](https://spaw.co/docs/api/list-consistency-bulk-jobs) |
| POST | `/api/v1/consistency/bulk` | [Queue a bulk consistency run](https://spaw.co/docs/api/create-consistency-bulk-job) |
| GET | `/api/v1/consistency/bulk/{jobId}` | [Poll a bulk consistency job](https://spaw.co/docs/api/get-consistency-bulk-job) |
| POST | `/api/v1/consistency/bulk/{jobId}/cancel` | [Cancel a bulk consistency job](https://spaw.co/docs/api/cancel-consistency-bulk-job) |
| POST | `/api/v1/consistency/bulk/{jobId}/resume` | [Resume a bulk consistency job that ran out of credits](https://spaw.co/docs/api/resume-consistency-bulk-job) |
| POST | `/api/v1/consistency/bulk/{jobId}/webhook/redeliver` | [Send a finished run's completion webhook again](https://spaw.co/docs/api/redeliver-consistency-bulk-webhook) |
| GET | `/api/v1/consistency/bulk/{jobId}/results` | [Download a bulk consistency job's results](https://spaw.co/docs/api/download-consistency-bulk-results) |

### Account & status

#### Account

| Method | Path | Summary |
| --- | --- | --- |
| GET | `/api/v1/account` | [Read the account and credit balance](https://spaw.co/docs/api/get-account) |
| GET | `/api/v1/account/requests/{requestId}` | [Look up one request by its id](https://spaw.co/docs/api/get-request) |
| GET | `/api/v1/account/ledger` | [Read the credit ledger](https://spaw.co/docs/api/list-ledger) |

#### Service status

| Method | Path | Summary |
| --- | --- | --- |
| GET | `/api/v1/status/data` | [Health, latency and data freshness](https://spaw.co/docs/api/get-data-status) |

### Webhooks

#### Testing

| Method | Path | Summary |
| --- | --- | --- |
| POST | `/api/v1/webhooks/test` | [Send a test webhook](https://spaw.co/docs/api/send-test-webhook) |

Every error code is explained at https://spaw.co/docs/errors and every verdict reason at https://spaw.co/docs/reasons.
