API reference

Zones

GET/zonesList zones

Returns all DNS zones accessible to the authenticated identity.

Path & query parameters

NameTypeRequiredDescription
suffix_ofstringLongest-suffix match for a FQDN; used by the cert flow.
curl -X GET https://api.yeil.app/v1/dns/zones \
  -H "Authorization: Bearer $YEIL_API_KEY"

Responses

  • 200OK
  • 401Unauthorized
    {
      "error": "unauthorized",
      "message": "Invalid or missing API key."
    }
  • 429Rate limited
    {
      "error": "rate_limited",
      "message": "Too many requests. Please slow down."
    }
POST/zonesCreate a zone

Registers a new DNS zone. Returns the zone and a status indicating whether DNSSEC DS delegation or a Handshake claim is required.

Request body

NameTypeRequiredDescription
zoneNamestringrequiredThe zone apex domain name (e.g. example.com).
ownerstringTeam id; omit for personal.
curl -X POST https://api.yeil.app/v1/dns/zones \
  -H "Authorization: Bearer $YEIL_API_KEY"

Responses

  • 200OK
  • 401Unauthorized
    {
      "error": "unauthorized",
      "message": "Invalid or missing API key."
    }
  • 429Rate limited
    {
      "error": "rate_limited",
      "message": "Too many requests. Please slow down."
    }
DELETE/zones/{id}Delete a zone

Permanently deletes a DNS zone and all its records.

Path & query parameters

NameTypeRequiredDescription
idstringrequiredZone ID.
curl -X DELETE https://api.yeil.app/v1/dns/zones/$ZONE_ID \
  -H "Authorization: Bearer $YEIL_API_KEY"

Responses

  • 204No content
  • 401Unauthorized
    {
      "error": "unauthorized",
      "message": "Invalid or missing API key."
    }
  • 429Rate limited
    {
      "error": "rate_limited",
      "message": "Too many requests. Please slow down."
    }
POST/zones/{id}/parkPark a zone

Marks a zone as parked, suspending record resolution.

Path & query parameters

NameTypeRequiredDescription
idstringrequiredZone ID.
curl -X POST https://api.yeil.app/v1/dns/zones/$ZONE_ID/park \
  -H "Authorization: Bearer $YEIL_API_KEY"

Responses

  • 200OK
  • 401Unauthorized
    {
      "error": "unauthorized",
      "message": "Invalid or missing API key."
    }
POST/zones/{id}/unparkUnpark a zone

Restores a parked zone to active resolution.

Path & query parameters

NameTypeRequiredDescription
idstringrequiredZone ID.
curl -X POST https://api.yeil.app/v1/dns/zones/$ZONE_ID/unpark \
  -H "Authorization: Bearer $YEIL_API_KEY"

Responses

  • 200OK
  • 401Unauthorized
    {
      "error": "unauthorized",
      "message": "Invalid or missing API key."
    }
GET/zones/{id}/dsGet DNSSEC DS record

Returns the DS record for the zone's DNSSEC key, for submission to the parent zone.

Path & query parameters

NameTypeRequiredDescription
idstringrequiredZone ID.
curl -X GET https://api.yeil.app/v1/dns/zones/$ZONE_ID/ds \
  -H "Authorization: Bearer $YEIL_API_KEY"

Responses

  • 200OK
  • 401Unauthorized
    {
      "error": "unauthorized",
      "message": "Invalid or missing API key."
    }

Records

GET/zones/{id}/recordsList records

Returns all DNS records in a zone.

Path & query parameters

NameTypeRequiredDescription
idstringrequiredZone ID.
curl -X GET https://api.yeil.app/v1/dns/zones/$ZONE_ID/records \
  -H "Authorization: Bearer $YEIL_API_KEY"

Responses

  • 200OK
  • 401Unauthorized
    {
      "error": "unauthorized",
      "message": "Invalid or missing API key."
    }
  • 429Rate limited
    {
      "error": "rate_limited",
      "message": "Too many requests. Please slow down."
    }
POST/zones/{id}/recordsCreate a record

Adds a new DNS record to a zone.

Path & query parameters

NameTypeRequiredDescription
idstringrequiredZone ID.

Request body

NameTypeRequiredDescription
namestringrequiredRelative to the zone; @ = apex.
typeA | AAAA | ALIAS | CAA | CNAME | DS | MX | NS | TLSA | TXTrequiredDNS record type.
contentstringrequiredRecord value (IP, hostname, or raw string depending on type).
ttlintegerSeconds; defaults to the zone default.30–86400
priorityintegerMail exchange priority.0–65535, MX only
curl -X POST https://api.yeil.app/v1/dns/zones/$ZONE_ID/records \
  -H "Authorization: Bearer $YEIL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "_acme-challenge",
  "type": "TXT",
  "content": "u8fGnBm9KvJdLp2eYhRzxQkWAoT7sE0cNiO4M5jHFw",
  "ttl": 120
}'

Responses

  • 201Created
    {
      "id": "rec_01HZ7XMGP2Q4V8BNWRKE3DYFT",
      "name": "_acme-challenge",
      "type": "TXT",
      "content": "u8fGnBm9KvJdLp2eYhRzxQkWAoT7sE0cNiO4M5jHFw",
      "ttl": 120,
      "priority": null
    }
  • 401Unauthorized
    {
      "error": "unauthorized",
      "message": "Invalid or missing API key."
    }
  • 429Rate limited
    {
      "error": "rate_limited",
      "message": "Too many requests. Please slow down."
    }
PUT/zones/{id}/records/{recordId}Update a record

Replaces a DNS record's content, TTL, or priority.

Path & query parameters

NameTypeRequiredDescription
idstringrequiredZone ID.
recordIdstringrequiredRecord ID.

Request body

NameTypeRequiredDescription
namestringrequiredRelative to the zone; @ = apex.
typeA | AAAA | ALIAS | CAA | CNAME | DS | MX | NS | TLSA | TXTrequiredDNS record type.
contentstringrequiredRecord value.
ttlintegerSeconds; defaults to the zone default.30–86400
priorityintegerMail exchange priority.0–65535, MX only
curl -X PUT https://api.yeil.app/v1/dns/zones/$ZONE_ID/records/$RECORD_ID \
  -H "Authorization: Bearer $YEIL_API_KEY"

Responses

  • 200OK
  • 401Unauthorized
    {
      "error": "unauthorized",
      "message": "Invalid or missing API key."
    }
  • 429Rate limited
    {
      "error": "rate_limited",
      "message": "Too many requests. Please slow down."
    }
DELETE/zones/{id}/records/{recordId}Delete a record

Permanently removes a DNS record from a zone.

Path & query parameters

NameTypeRequiredDescription
idstringrequiredZone ID.
recordIdstringrequiredRecord ID.
curl -X DELETE https://api.yeil.app/v1/dns/zones/$ZONE_ID/records/$RECORD_ID \
  -H "Authorization: Bearer $YEIL_API_KEY"

Responses

  • 204No content
  • 401Unauthorized
    {
      "error": "unauthorized",
      "message": "Invalid or missing API key."
    }
  • 429Rate limited
    {
      "error": "rate_limited",
      "message": "Too many requests. Please slow down."
    }

Record types

TypeMeaning
AMaps a hostname to an IPv4 address.
AAAAMaps a hostname to an IPv6 address.
ALIASApex CNAME-like flattening — resolves the target and returns its IPs.
CAASpecifies which certificate authorities may issue TLS certificates.
CNAMEAliases one name to another; not valid at the zone apex.
DSDNSSEC delegation signer record linking a child zone's key.
MXDesignates a mail exchanger; uses a priority field (lower = preferred).
NSDelegates a subdomain to a set of authoritative nameservers.
TLSADANE certificate association; binds a TLS cert to a DNS name.
TXTFree-form text; used for SPF, DKIM, domain verification, and more.

Error codes

CodeWhen it occurs
unauthorizedMissing or invalid API key.
bad_requestMalformed or unparseable request input.
forbiddenAPI key lacks the required permission for this operation.
no_zoneZone not found or does not belong to your account.
rate_limitedToo many write requests in a short window.
conflictDuplicate or competing change would violate a constraint.
dns_serverUpstream DNS error while applying the change.
not_foundRecord or other resource does not exist.
internalUnexpected server error; try again or contact support.

Rate limits

BucketLimitWindow
Zone writes1060 seconds
Record writes6060 seconds

When a limit is exceeded, the API returns 429 with a Retry-After header indicating how many seconds to wait before retrying.