ACME Status
Current state of a custom domain and its automated TLS certificate issuance. The platform issues certificates via Let's Encrypt (or another configured ACME CA) using the DNS-01 challenge against the provider you configured. This endpoint reports the domain's status, the last issuance error and time, and the most recent ACME job.
Useful for surfacing TLS health to users and for integrations that need to wait for a fresh cert before deploying — poll it while status is pending_issuance or issuing. Renewal happens automatically before the certificate expires — to force an immediate reissue, use POST /v1/domains/self/{uuid}/reissue-ssl.
It is also the endpoint to poll after Check again on a domain suspended because its registration expired: while suspended, the response carries an expiry_suspension object.
The registration object reports the domain's registration (at the registrar — not the TLS certificate): its expiry date, where the platform read it (Cloudflare Registrar, RDAP or WHOIS), the registry's statuses and when it was last checked. Every custom domain is looked up about once a day, whatever its DNS provider. See Domain registration expiry.
Path parameters
uuid from /domains/available.Response (200 OK)
example.com).cloudflare).pending_cname | awaiting_cert (manual mode) | pending_issuance | issuing | active | issuance_failed | renewal_failed | revoked | expired (registration expired, domain suspended — see expiry_suspension). See Domain status.auto | manual.true while the domain is paused because the account is over its plan's custom-domain count — kept, but not served or used.status: "expired"); absent otherwise. Holds suspended_at, expires_at (the stored registration expiry, as in registration.expires_at), deletes_at (suspended_at + 30 days), recheck_interval_hours (4), check_again_available, check_state (idle | requested | running), last_checked_at, last_check_outcome (still_expired | lookup_failed | unsupported | account_suspended | error), check_requested_at and next_check_allowed_at. Field by field: the expiry_suspension object. After Check again, check_state goes requested → running → idle with a last_check_outcome; when the renewal is found, the domain is no longer suspended — status is back to what it was and expiry_suspension disappears.expires_at, source, statuses, not_renewed_status, checked_at, lookup_error. Field by field: the registration object. Absent while registration lookups aren't enabled on the platform yet.{job_type, status, attempt_count, max_attempts, last_error}. job_type is e.g. issue or renew; status is pending | running | completed | failed. Omitted when the domain has no jobs.Deprecated: until the sunset this response also carries the legacy integer domain_id (and an internal latest_job.id). Don't use them; read domain_uuid.
The registration object
What the platform last learned about the domain's registration. It reads every custom domain's registration about once a day (a new domain within about 15 minutes), whatever its DNS provider: from the Cloudflare Registrar record when the DNS provider is Cloudflare and Cloudflare has one, otherwise from RDAP (the TLD registry's server, found via the IANA RDAP bootstrap), otherwise from WHOIS (TLDs without RDAP). It is returned by this endpoint, on the items of GET /v1/domains/self and on your account's own domains in GET /v1/domains/available. Absent while registration lookups aren't enabled on the platform yet.
null = unknown. A date the registry reports together with a not_renewed_status is not taken at face value: during the registry's auto-renew grace this stays the old date.rdap | whois | cloudflare (Cloudflare Registrar). Absent until a lookup has succeeded.client transfer prohibited, auto renew period). Empty when none were reported.auto renew period | redemption period | pending delete | pending restore | client hold | server hold present in statuses. Many registries move the expiration date a year forward on the expiry day even if nobody has paid (the auto-renew grace period, up to 45 days); while one of these statuses is present, the registry's date is not treated as a renewal — the dashboard shows "Registry: <status> — not renewed yet". Absent when none is present. A renewal counts only when the new date is more than 7 days in the future and there is no not_renewed_status.the registry has no record of this domain) — the dashboard shows "Couldn't check the registration" with this reason. Absent when the last lookup succeeded. A failed or empty lookup never suspends the domain.In the "registry auto-renew grace" example, the registry already shows next year's date, but auto renew period means it isn't paid yet: expires_at stays the old date, the domain keeps working, and the expiry reminders don't stop.