---
title: "Verify manual DNS records"
method: POST
path: "/v1/domains/{domain_id}/verify-dns"
tags: ["Domains"]
---

# Verify manual DNS records

`POST /v1/domains/{domain_id}/verify-dns`

## Request

- Base URL: `https://api.winnr.app`
- URL: `https://api.winnr.app/v1/domains/{domain_id}/verify-dns`
- Auth: HTTP bearer

Verify DNS records for a manual-setup domain via live DNS lookups.
Only available for domains with dns_provider="manual".
When all critical records (A, MX, SPF, DKIM) are verified,
promotes domain to "complete" status.

## Path parameters

- `domain_id` string, required

## Response `200`

Verification results

- object
  - `meta` Meta
    - `request_id` string
    - `timestamp` string, date-time
  - `data` object
    - `domain` string
    - `all_verified` boolean
    - `critical_verified` boolean: A, MX, SPF and DKIM all resolve. Gates promotion to "complete".
    - `ses_records_verified` boolean: All SES identity records resolve. Does NOT gate "complete" — mail flows on transport=local without them. Stamps `ses_records_verified_at` on the domain so the SES promotion sweep can confirm with SES and flip the transport.
    - `ses_transport` string, nullable: Target SES transport for this domain (ses1..ses7), if any.
    - `records` object[]
      - `type` string
      - `host` string
      - `purpose` string
      - `verified` boolean
      - `expected` string
      - `actual` string, nullable

## Other responses

- `400`: Domain is not a manual DNS domain
- `401`: Authentication required or token invalid
- `404`: Resource not found
- `409`: DNS records not yet computed (mailbox provisioning in progress)

---

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