Skip to main content
The API is not open yet. There are no public keys, so the routes that belong to an account answer only the app’s own session. This reference is complete anyway: the shape it documents is the shape it will have when it opens, so anything you design against it now stays valid.
Two surfaces already answer anyone, with no account and no key: Everything else — domains, claims, verifications, proof links — needs a session, and the session is issued to the product’s own front end. The reference under Endpoints is generated from the running server: every route declares its params, body and response schemas, and the OpenAPI document is emitted from those. A route that changes shape changes this reference in the same commit.

Base URL

Same origin as the app. There is no separate API hostname, and no CORS preflight in the supported setup — the browser talks to the origin it is already on.

Conventions

Branch on code. message is written for a person to read and may be reworded without notice. docsUrl resolves to the entry on this site.
A field that can be one of several shapes always carries a discriminant — step on a zone frame, code on a diagnosis, reason on a wait estimate. There is no shape where a value you should not read is merely undefined; if you can reach it, it is there.
"2026-08-24T12:00:00.000Z". Durations are integer seconds in a field named …Seconds, or integer minutes in a field named …Minutes.
diagnosis: null means the check ran and found nothing wrong, not that nothing is known. Fields are present and null rather than omitted.

Rate limits

Enforced at the edge, per IP, on the two public surfaces: Over the limit you get 429 with rate_limited and a Retry-After header in seconds. POST /api/verifications/:id/runs is limited per verification as well as per account, because forcing runs in a loop does not make DNS answer faster.

Stability

What is safe to depend on:
  • Error code values, and diagnosis code values. These are identifiers and will not be reworded.
  • The records block on a claim, and the immutability of token across the lifecycle.
  • The event names on the zone stream (delegation, publishing).
What is not:
  • message strings, and the cause / fix sentences on a diagnosis. They are product copy and are improved regularly. Render them; do not match on them.
  • The absolute set of endpoints. New ones are added; existing shapes are not silently changed.