---
title: "Advance domain verification"
method: POST
path: "/v1/email/domains/{id}/verify"
tags: ["Email"]
---

# Advance domain verification

`POST /v1/email/domains/{id}/verify`

## Request

- Base URL: `https://api.samva.dev`
- URL: `https://api.samva.dev/v1/email/domains/{id}/verify`
- Auth: API key in header `x-api-key`

Checks the required DNS records now and, once they all match, moves the domain toward verified. Safe to call repeatedly.

## Path parameters

- `id` string, required

## Response `200`

EmailDomainVerification

- EmailDomainVerification
  - `domainId` string, required
  - `domain` string, required
  - `phase` 'dns-setup' | 'provisioning' | 'verifying' | 'ready' | 'degraded' | 'failed', required
  - `dns` object, required
    - `observed` boolean, required
    - `total` integer, required
    - `satisfied` integer, required
    - `missing` integer, required
    - `mismatch` integer, required
    - `unknown` integer, required
  - `requirements` object[], required
    - `key` string, required
    - `record` object, required
      - `type` 'A' | 'AAAA' | 'CNAME' | 'MX' | 'NS' | 'SOA' | 'PTR' | 'SRV' | 'TXT' | 'CAA', required
      - `name` string, required
      - `value` string, required
      - `ttl` string, nullable
      - `description` string, nullable
      - `priority` integer, nullable
    - `status` 'satisfied' | 'missing' | 'mismatch' | 'unknown', required
    - `evidence` union[], required
      - union
        - object
          - `_tag` 'PublicDns', required
          - `resolver` string, required
          - `status` 'satisfied' | 'missing' | 'mismatch' | 'unknown', required
          - `values` string[], required
          - `detail` string, nullable, required
          - `observedAt` string, required
        - object
          - `_tag` 'Provider', required
          - `provider` string, required
          - `status` 'satisfied' | 'missing' | 'mismatch' | 'unknown', required
          - `values` string[], required
          - `detail` string, nullable, required
          - `observedAt` string, required
        - object
          - `_tag` 'Host', required
          - `source` string, required
          - `status` 'ok' | 'pending' | 'failed', required
          - `label` string, required
          - `detail` string, nullable, required
          - `observedAt` string, required
  - `provider` object, nullable, required
    - `identity` 'pending' | 'verified' | 'failed' | 'unknown', required
    - `dkim` 'pending' | 'verified' | 'failed' | 'unknown', nullable
    - `mailFrom` 'pending' | 'verified' | 'failed' | 'unknown', nullable
  - `operationId` string, required
  - `checkedAt` string, nullable, required
  - `nextCheckAt` string, nullable, required
  - `failure` object, nullable, required
    - `code` string, required
    - `message` string, required
    - `failedAt` string, required
  - `provisioning` EmailDomainProvisioningExecution, required
    - `status` 'none' | 'running' | 'succeeded' | 'failed', required
    - `generation` integer, required
    - `revision` integer, required
  - `health` object, required
    - `actionOwner` 'customer' | 'samva' | 'upstream' | 'none', required
    - `action` string, required
    - `freshness` 'current' | 'stale' | 'unknown', required
    - `observedAt` string, nullable, required
    - `staleAt` string, nullable, required
    - `nextRetryAt` string, nullable, required
    - `reason` 'ready' | 'dns-action-required' | 'dns-unavailable' | 'verification-pending' | 'verification-failed' | 'samva-repair' | 'signing-custody-action-required' | 'ownership-conflict' | 'inactive' | 'observation-stale' | 'observation-unknown', required
  - `sending` object, required: Whether the domain, the organization, and its sending account are healthy enough to send, as last observed. Ready does not guarantee that a particular send is accepted.
    - `actionOwner` 'customer' | 'samva' | 'upstream' | 'none', required
    - `action` string, required
    - `freshness` 'current' | 'stale' | 'unknown', required
    - `observedAt` string, nullable, required
    - `staleAt` string, nullable, required
    - `nextRetryAt` string, nullable, required
    - `status` 'ready' | 'blocked' | 'unknown', required
    - `reason` 'domain-not-ready' | 'domain-observation-stale' | 'operator-paused' | 'sending-paused' | 'sending-status-unknown' | 'ready', required
  - `dmarc` object, required
    - `status` 'valid' | 'missing' | 'invalid' | 'multiple' | 'unknown', required
    - `source` 'direct' | 'organizational' | 'none', required
    - `policyDomain` string, nullable, required
    - `policy` 'none' | 'quarantine' | 'reject', nullable, required
    - `subdomainPolicy` 'none' | 'quarantine' | 'reject', nullable, required
    - `effectivePolicy` 'none' | 'quarantine' | 'reject', nullable, required
    - `observedAt` string, nullable, required
    - `staleAt` string, nullable, required
    - `guidance` string, required
  - `rotation` EmailDkimRotation, required
    - `id` string, required
    - `domainId` string, required
    - `phase` 'staged' | 'cutover' | 'complete', required
    - `selector` string, required
    - `record` object, required
      - `name` string, required
      - `type` 'TXT', required
      - `value` string, required
      - `ttl` string, required
    - `formerRecord` object, required
      - `name` string, required
      - `type` 'TXT', required
      - `value` string, required
    - `minimumRetainUntil` string, nullable, required: The earliest time the former DKIM record may be removed. Keep it published at least until then so mail signed with the former key still verifies.

## Other responses

- `401`: UnauthorizedError
- `403`: ForbiddenError
- `404`: ResourceNotFoundError
- `409`: ConflictError
- `422`: ValidationError
- `429`: RateLimitedError
- `500`: InternalError
- `502`: EmailChannelError
- `504`: GatewayTimeoutError

---

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