---
title: "Verify domain DNS records"
method: POST
path: "/domains/{id}/verification"
tags: ["Domains"]
---

# Verify domain DNS records

`POST /domains/{id}/verification`

## Request

- Base URL: `https://shipmail.to/api/v1`
- URL: `https://shipmail.to/api/v1/domains/{id}/verification`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://shipmail.to/api/auth/oauth2/authorize`, token URL `https://shipmail.to/api/auth/oauth2/token`)

Check DNS records for the domain and update verification status. Rate limited to 1 request per minute. For automated setups, subscribe to the domain.verified webhook event instead of polling this endpoint.

## Headers

- `X-Shipmail-Organization` string

## Response `200`

Verification result.

- VerificationResult
  - `all_verified` boolean, required
  - `records` object, required: Verification status for each DNS record type.
    - `mx` boolean, required
    - `spf` boolean, required
    - `dkim` boolean, required
    - `dmarc` boolean, required
  - `outbound_verified` boolean, required
  - `outbound_error` boolean, required
  - `existing_spf` string, nullable, required
  - `suggested_spf` string, nullable, required
  - `conflicting_mx` string[], required
  - `dmarc_valid` boolean, required: Whether a DMARC record exists and parses as a valid policy.
  - `dmarc_exact_match` boolean, required: Whether the published DMARC record exactly matches shipmail's recommended record.
  - `dmarc_record_value` string, nullable, required: The DMARC TXT record currently published for the domain, if any.
  - `dmarc_managed_externally` boolean, required: True if a non-shipmail DMARC record is already published for this domain.

## Other responses

- `404`: Resource not found.
- `429`: Rate limit exceeded.

---

[API](https://skmtc.dev/shipmail/apis/shipmail-api.md) · [All operations](https://skmtc.dev/shipmail/apis/shipmail-api/llms.txt) · [OpenAPI document](https://skmtc.dev/shipmail/apis/shipmail-api/revisions/2c23e59d7e30?raw)
