<Intro>

<EndpointHeader />

<Description>

Removes the link tracking configuration from this domain. Any tracking links in previously delivered messages will stop resolving. Once released, another organization can configure the same tracking subdomain.

</Description>

</Intro>

<Parameters in="path">

<Parameter name="domain_id" type="string">

<Description>

Domain ID.

</Description>

</Parameter>

</Parameters>

<Payload kind="response">

<Field name="id" type="string" required />

<Field name="workspace_id" type="string" required />

<Field name="domain" type="string" required>

<Description>

The sending domain name. Set at creation and immutable.

</Description>

</Field>

<Field name="vendor" type="string" required>

<Description>

The DNS provider hosting this domain's nameservers, so you know which provider's dashboard to manage the required DNS records in. Returns "other" when the provider has not been detected or is not recognized.

</Description>

</Field>

<Field name="status" type="string" required>

<Description>

Domain ownership verification, proven by the DKIM record. Readiness to send or track is reported separately per capability under `capabilities.*.status`.
- `pending` — the DKIM record has not been published yet. - `verified` — the DKIM record is in place; ownership is confirmed. - `failed` — a DKIM record exists but does not match the expected
  value (for example a stale record from an earlier setup), or a
  previously verified record was removed. Correct the record to
  recover.
- `temporary_failure` — DNS resolution failed transiently (timeout,
  unreachable nameserver). Verification is queued for retry on a 72h
  cadence; customer should not edit DNS records before the retry runs.
- `rejected` — the domain was refused for policy reasons and cannot be
  used for sending. Contact support if you believe this is an error.

</Description>

</Field>

<Field name="settings" type="object" required>

<Description>

Per-domain behavior toggles. Changes apply immediately to new sends.

</Description>

<FieldChildren kind="response">

<Field name="click_tracking" type="boolean" prefix="settings.">

<Description>

Rewrite links in HTML email through your tracking domain to record clicks. You can enable this before your tracking domain has verified — it begins working once verification completes. A tracking domain must be configured; enabling it without one returns `409`.

</Description>

</Field>

<Field name="open_tracking" type="boolean" prefix="settings.">

<Description>

Insert a tracking pixel in HTML email to record opens. You can enable this before your tracking domain has verified — it begins working once verification completes. A tracking domain must be configured; enabling it without one returns `409`.

</Description>

</Field>

</FieldChildren>

</Field>

<Field name="dkim" type="object" required>

<Description>

Active DKIM signing configuration for the domain.

</Description>

<FieldChildren kind="response">

<Field name="mode" type="string" prefix="dkim." required>

<Description>

How the DKIM public key is published in your DNS. `txt` — you publish the key as a TXT record. `delegated` — you publish a single CNAME and Bird hosts and rotates the key.

</Description>

</Field>

<Field name="selector" type="string" prefix="dkim." required>

<Description>

DKIM selector used to sign mail from this domain.

</Description>

</Field>

<Field name="key_size" type="integer" prefix="dkim." required>

<Description>

RSA key size in bits.

</Description>

</Field>

</FieldChildren>

</Field>

<Field name="capabilities" type="object" required>

<FieldChildren kind="response">

<Field name="sending" type="object" prefix="capabilities." required>

<FieldChildren kind="response">

<Field name="status" type="string" prefix="capabilities.sending." required>

<Description>

Capability verification status.
- `pending` — verification has not run, or is currently running. - `verified` — all DNS records for this capability resolved with the
  expected values.
- `warning` — a record for this capability verified before and a recent
  check no longer matches, but it is still within the grace period.
  Sending is not yet affected; fix it before the grace period ends.
- `failed` — DNS records resolved but at least one value is wrong.
  Update your DNS to recover.
- `temporary_failure` — DNS lookup failed transiently. Verification is
  queued for retry; don't change DNS records yet.
- `not_configured` — the capability is not set up on this domain
  (e.g. no tracking domain configured).

</Description>

</Field>

<Field name="domain" type="nullable string" prefix="capabilities.sending.">

<Description>

Hostname this capability is configured with — the return-path domain, the tracking domain, or the domain where the DMARC policy was found. Null when not applicable or not configured.

</Description>

</Field>

<Field name="pending" type="object" prefix="capabilities.sending.">

<Description>

A staged configuration change awaiting DNS verification. The currently active configuration keeps serving until the staged one verifies, at which point it is promoted automatically. Submitting another change for the same capability replaces the staged value.

</Description>

<FieldChildren kind="response">

<Field name="domain" type="string" prefix="capabilities.sending.pending." required>

<Description>

Hostname the capability will use once the staged change verifies.

</Description>

</Field>

<Field name="status" type="string" prefix="capabilities.sending.pending." required>

<Description>

Verification status of the staged change. `pending` — waiting for the DNS records to be detected. `failed` — the records resolved with wrong values; correct them or submit a different change. `temporary_failure` — DNS lookup failed transiently and will be retried.

</Description>

</Field>

</FieldChildren>

</Field>

<Field name="reason" type="nullable string" prefix="capabilities.sending.">

<Description>

Machine-readable reason code for a failed capability status. Only set when `status` is `failed`. Use this to display a specific message to users rather than a generic failure message.
- `tracking_domain_in_use` — the link tracking subdomain is already claimed
  by another organization.

</Description>

</Field>

</FieldChildren>

</Field>

<Field name="return_path" type="object" prefix="capabilities." required>

<FieldChildren kind="response">

<Field name="status" type="string" prefix="capabilities.return_path." required>

<Description>

Capability verification status.
- `pending` — verification has not run, or is currently running. - `verified` — all DNS records for this capability resolved with the
  expected values.
- `warning` — a record for this capability verified before and a recent
  check no longer matches, but it is still within the grace period.
  Sending is not yet affected; fix it before the grace period ends.
- `failed` — DNS records resolved but at least one value is wrong.
  Update your DNS to recover.
- `temporary_failure` — DNS lookup failed transiently. Verification is
  queued for retry; don't change DNS records yet.
- `not_configured` — the capability is not set up on this domain
  (e.g. no tracking domain configured).

</Description>

</Field>

<Field name="domain" type="nullable string" prefix="capabilities.return_path.">

<Description>

Hostname this capability is configured with — the return-path domain, the tracking domain, or the domain where the DMARC policy was found. Null when not applicable or not configured.

</Description>

</Field>

<Field name="pending" type="object" prefix="capabilities.return_path.">

<Description>

A staged configuration change awaiting DNS verification. The currently active configuration keeps serving until the staged one verifies, at which point it is promoted automatically. Submitting another change for the same capability replaces the staged value.

</Description>

<FieldChildren kind="response">

<Field name="domain" type="string" prefix="capabilities.return_path.pending." required>

<Description>

Hostname the capability will use once the staged change verifies.

</Description>

</Field>

<Field name="status" type="string" prefix="capabilities.return_path.pending." required>

<Description>

Verification status of the staged change. `pending` — waiting for the DNS records to be detected. `failed` — the records resolved with wrong values; correct them or submit a different change. `temporary_failure` — DNS lookup failed transiently and will be retried.

</Description>

</Field>

</FieldChildren>

</Field>

<Field name="reason" type="nullable string" prefix="capabilities.return_path.">

<Description>

Machine-readable reason code for a failed capability status. Only set when `status` is `failed`. Use this to display a specific message to users rather than a generic failure message.
- `tracking_domain_in_use` — the link tracking subdomain is already claimed
  by another organization.

</Description>

</Field>

</FieldChildren>

</Field>

<Field name="dmarc" type="object" prefix="capabilities." required>

<FieldChildren kind="response">

<Field name="status" type="string" prefix="capabilities.dmarc." required>

<Description>

Capability verification status.
- `pending` — verification has not run, or is currently running. - `verified` — all DNS records for this capability resolved with the
  expected values.
- `warning` — a record for this capability verified before and a recent
  check no longer matches, but it is still within the grace period.
  Sending is not yet affected; fix it before the grace period ends.
- `failed` — DNS records resolved but at least one value is wrong.
  Update your DNS to recover.
- `temporary_failure` — DNS lookup failed transiently. Verification is
  queued for retry; don't change DNS records yet.
- `not_configured` — the capability is not set up on this domain
  (e.g. no tracking domain configured).

</Description>

</Field>

<Field name="domain" type="nullable string" prefix="capabilities.dmarc.">

<Description>

Hostname this capability is configured with — the return-path domain, the tracking domain, or the domain where the DMARC policy was found. Null when not applicable or not configured.

</Description>

</Field>

<Field name="pending" type="object" prefix="capabilities.dmarc.">

<Description>

A staged configuration change awaiting DNS verification. The currently active configuration keeps serving until the staged one verifies, at which point it is promoted automatically. Submitting another change for the same capability replaces the staged value.

</Description>

<FieldChildren kind="response">

<Field name="domain" type="string" prefix="capabilities.dmarc.pending." required>

<Description>

Hostname the capability will use once the staged change verifies.

</Description>

</Field>

<Field name="status" type="string" prefix="capabilities.dmarc.pending." required>

<Description>

Verification status of the staged change. `pending` — waiting for the DNS records to be detected. `failed` — the records resolved with wrong values; correct them or submit a different change. `temporary_failure` — DNS lookup failed transiently and will be retried.

</Description>

</Field>

</FieldChildren>

</Field>

<Field name="reason" type="nullable string" prefix="capabilities.dmarc.">

<Description>

Machine-readable reason code for a failed capability status. Only set when `status` is `failed`. Use this to display a specific message to users rather than a generic failure message.
- `tracking_domain_in_use` — the link tracking subdomain is already claimed
  by another organization.

</Description>

</Field>

</FieldChildren>

</Field>

<Field name="tracking" type="object" prefix="capabilities." required>

<FieldChildren kind="response">

<Field name="status" type="string" prefix="capabilities.tracking." required>

<Description>

Capability verification status.
- `pending` — verification has not run, or is currently running. - `verified` — all DNS records for this capability resolved with the
  expected values.
- `warning` — a record for this capability verified before and a recent
  check no longer matches, but it is still within the grace period.
  Sending is not yet affected; fix it before the grace period ends.
- `failed` — DNS records resolved but at least one value is wrong.
  Update your DNS to recover.
- `temporary_failure` — DNS lookup failed transiently. Verification is
  queued for retry; don't change DNS records yet.
- `not_configured` — the capability is not set up on this domain
  (e.g. no tracking domain configured).

</Description>

</Field>

<Field name="domain" type="nullable string" prefix="capabilities.tracking.">

<Description>

Hostname this capability is configured with — the return-path domain, the tracking domain, or the domain where the DMARC policy was found. Null when not applicable or not configured.

</Description>

</Field>

<Field name="pending" type="object" prefix="capabilities.tracking.">

<Description>

A staged configuration change awaiting DNS verification. The currently active configuration keeps serving until the staged one verifies, at which point it is promoted automatically. Submitting another change for the same capability replaces the staged value.

</Description>

<FieldChildren kind="response">

<Field name="domain" type="string" prefix="capabilities.tracking.pending." required>

<Description>

Hostname the capability will use once the staged change verifies.

</Description>

</Field>

<Field name="status" type="string" prefix="capabilities.tracking.pending." required>

<Description>

Verification status of the staged change. `pending` — waiting for the DNS records to be detected. `failed` — the records resolved with wrong values; correct them or submit a different change. `temporary_failure` — DNS lookup failed transiently and will be retried.

</Description>

</Field>

</FieldChildren>

</Field>

<Field name="reason" type="nullable string" prefix="capabilities.tracking.">

<Description>

Machine-readable reason code for a failed capability status. Only set when `status` is `failed`. Use this to display a specific message to users rather than a generic failure message.
- `tracking_domain_in_use` — the link tracking subdomain is already claimed
  by another organization.

</Description>

</Field>

</FieldChildren>

</Field>

<Field name="inbound" type="object" prefix="capabilities.">

<FieldChildren kind="response">

<Field name="status" type="string" prefix="capabilities.inbound." required>

<Description>

Capability verification status.
- `pending` — verification has not run, or is currently running. - `verified` — all DNS records for this capability resolved with the
  expected values.
- `warning` — a record for this capability verified before and a recent
  check no longer matches, but it is still within the grace period.
  Sending is not yet affected; fix it before the grace period ends.
- `failed` — DNS records resolved but at least one value is wrong.
  Update your DNS to recover.
- `temporary_failure` — DNS lookup failed transiently. Verification is
  queued for retry; don't change DNS records yet.
- `not_configured` — the capability is not set up on this domain
  (e.g. no tracking domain configured).

</Description>

</Field>

<Field name="domain" type="nullable string" prefix="capabilities.inbound.">

<Description>

Hostname this capability is configured with — the return-path domain, the tracking domain, or the domain where the DMARC policy was found. Null when not applicable or not configured.

</Description>

</Field>

<Field name="pending" type="object" prefix="capabilities.inbound.">

<Description>

A staged configuration change awaiting DNS verification. The currently active configuration keeps serving until the staged one verifies, at which point it is promoted automatically. Submitting another change for the same capability replaces the staged value.

</Description>

<FieldChildren kind="response">

<Field name="domain" type="string" prefix="capabilities.inbound.pending." required>

<Description>

Hostname the capability will use once the staged change verifies.

</Description>

</Field>

<Field name="status" type="string" prefix="capabilities.inbound.pending." required>

<Description>

Verification status of the staged change. `pending` — waiting for the DNS records to be detected. `failed` — the records resolved with wrong values; correct them or submit a different change. `temporary_failure` — DNS lookup failed transiently and will be retried.

</Description>

</Field>

</FieldChildren>

</Field>

<Field name="reason" type="nullable string" prefix="capabilities.inbound.">

<Description>

Machine-readable reason code for a failed capability status. Only set when `status` is `failed`. Use this to display a specific message to users rather than a generic failure message.
- `tracking_domain_in_use` — the link tracking subdomain is already claimed
  by another organization.

</Description>

</Field>

</FieldChildren>

</Field>

</FieldChildren>

</Field>

<Field name="dns_records" type="array of object" required>

<Description>

The domain's DNS records and their individual verification state, returned in full on both the list and single-domain responses. This is the complete set to publish across DKIM, return-path, DMARC, tracking, and inbound; records for a staged change carry `state: pending`. Inbound MX records are always included as a regional reference, even while receiving is off (`capabilities.inbound.status` is `not_configured`) — their presence alone does not mean receiving is enabled (see `DomainUpdate.inbound`).

</Description>

<FieldChildren kind="response">

<Field name="type" type="string" prefix="dns_records." required />

<Field name="name" type="string" prefix="dns_records." required>

<Description>

The record name — the part you enter in your DNS provider's "Name" or "Host" field, relative to the DNS zone the record belongs in (your registered domain). For a sending domain `mail.acme.com` the DKIM record name is `bird1._domainkey.mail`, entered in the `acme.com` zone. `@` for records at the zone apex.

</Description>

</Field>

<Field name="host" type="string" prefix="dns_records." required>

<Description>

The fully qualified hostname for this record (e.g. `bird1._domainkey.mail.acme.com`).

</Description>

</Field>

<Field name="value" type="string" prefix="dns_records." required />

<Field name="purpose" type="string" prefix="dns_records." required>

<Description>

What this record is for.
- `dkim` — signs outbound mail and proves domain ownership. - `return_path` — return-path (bounce) CNAME for sending. - `tracking` — branded open/click tracking CNAME (optional). - `dmarc` — advisory DMARC policy record. - `inbound_mx` — MX record routing mail to Bird for receiving. Always
  present wherever inbound is available, as a regional reference,
  regardless of whether receiving is enabled; publishing it does not
  enable receiving on its own — see `DomainUpdate.inbound`.

</Description>

</Field>

<Field name="state" type="string" prefix="dns_records." required>

<Description>

Lifecycle state of this record.
- `active` — the record backs the domain's current configuration. - `pending` — the record belongs to a staged configuration change;
  publish it to complete the change.
- `deprecated` — the record belonged to a previous configuration.
  Keep it in DNS until `safe_to_remove` is `true`; in-flight mail and
  previously sent tracked links may still resolve through it.

</Description>

</Field>

<Field name="optional" type="boolean" prefix="dns_records." required>

<Description>

Whether this record can be skipped. Optional records enable extra functionality (e.g. tracking) but are not required for sending.

</Description>

</Field>

<Field name="status" type="string" prefix="dns_records." required>

<Description>

Verification status of this record's most recent DNS check.
- `pending` — the record has not verified yet; publish it (or correct it)
  and it will verify on the next check.
- `verified` — the most recent check matched the expected value. - `warning` — the record verified before and a recent check no longer
  matched, but it is still within the grace period. Sending is not yet
  affected; fix the record before the grace period ends to avoid it
  being blocked.
- `failed` — the record verified before but later checks kept failing
  past the grace period; the configuration has regressed and needs
  attention.

</Description>

</Field>

<Field name="error" type="nullable string" prefix="dns_records.">

<Description>

Human-readable detail for a failed check on this record — what was found in DNS and why it did not match. Null when the record is verified or not yet checked.

</Description>

</Field>

<Field name="safe_to_remove" type="nullable boolean" prefix="dns_records.">

<Description>

Only set on `deprecated` records: `true` once the record is no longer referenced by in-flight mail or live tracked links and can be deleted from your DNS. Null on `active` and `pending` records.

</Description>

</Field>

</FieldChildren>

</Field>

<Field name="last_checked_at" type="nullable string">

<Description>

When Bird last checked this domain's DNS records, whether or not the outcome changed. Updated on every verification — your manual refresh and the periodic automatic re-checks alike. Null if the domain has never been checked.

</Description>

</Field>

<Field name="verified_at" type="nullable string">

<Description>

When the domain's ownership was confirmed — the moment `status` became `verified` via the DKIM record. Unchanged by later re-checks while it stays verified. Null if the domain has never been verified.

</Description>

</Field>

<Field name="created_at" type="string" required>

<Description>

When the domain was added.

</Description>

</Field>

<Field name="updated_at" type="string" required>

<Description>

When the domain's configuration was last changed (such as a settings or return-path change). Verification re-checks do not change this; see `last_checked_at` and `verified_at` for verification timing.

</Description>

</Field>

</Payload>