API reference
Zones
GET
/zonesList zonesReturns all DNS zones accessible to the authenticated identity.
Path & query parameters
| Name | Type | Required | Description |
|---|---|---|---|
suffix_of | string | — | Longest-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 zoneRegisters a new DNS zone. Returns the zone and a status indicating whether DNSSEC DS delegation or a Handshake claim is required.
Request body
| Name | Type | Required | Description |
|---|---|---|---|
zoneName | string | required | The zone apex domain name (e.g. example.com). |
owner | string | — | Team 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 zonePermanently deletes a DNS zone and all its records.
Path & query parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | Zone 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 zoneMarks a zone as parked, suspending record resolution.
Path & query parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | Zone 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 zoneRestores a parked zone to active resolution.
Path & query parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | Zone 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 recordReturns the DS record for the zone's DNSSEC key, for submission to the parent zone.
Path & query parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | Zone 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 recordsReturns all DNS records in a zone.
Path & query parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | Zone 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 recordAdds a new DNS record to a zone.
Path & query parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | Zone ID. |
Request body
| Name | Type | Required | Description |
|---|---|---|---|
name | string | required | Relative to the zone; @ = apex. |
type | A | AAAA | ALIAS | CAA | CNAME | DS | MX | NS | TLSA | TXT | required | DNS record type. |
content | string | required | Record value (IP, hostname, or raw string depending on type). |
ttl | integer | — | Seconds; defaults to the zone default.30–86400 |
priority | integer | — | Mail 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 recordReplaces a DNS record's content, TTL, or priority.
Path & query parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | Zone ID. |
recordId | string | required | Record ID. |
Request body
| Name | Type | Required | Description |
|---|---|---|---|
name | string | required | Relative to the zone; @ = apex. |
type | A | AAAA | ALIAS | CAA | CNAME | DS | MX | NS | TLSA | TXT | required | DNS record type. |
content | string | required | Record value. |
ttl | integer | — | Seconds; defaults to the zone default.30–86400 |
priority | integer | — | Mail 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 recordPermanently removes a DNS record from a zone.
Path & query parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | Zone ID. |
recordId | string | required | Record 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
| Type | Meaning |
|---|---|
A | Maps a hostname to an IPv4 address. |
AAAA | Maps a hostname to an IPv6 address. |
ALIAS | Apex CNAME-like flattening — resolves the target and returns its IPs. |
CAA | Specifies which certificate authorities may issue TLS certificates. |
CNAME | Aliases one name to another; not valid at the zone apex. |
DS | DNSSEC delegation signer record linking a child zone's key. |
MX | Designates a mail exchanger; uses a priority field (lower = preferred). |
NS | Delegates a subdomain to a set of authoritative nameservers. |
TLSA | DANE certificate association; binds a TLS cert to a DNS name. |
TXT | Free-form text; used for SPF, DKIM, domain verification, and more. |
Error codes
| Code | When it occurs |
|---|---|
unauthorized | Missing or invalid API key. |
bad_request | Malformed or unparseable request input. |
forbidden | API key lacks the required permission for this operation. |
no_zone | Zone not found or does not belong to your account. |
rate_limited | Too many write requests in a short window. |
conflict | Duplicate or competing change would violate a constraint. |
dns_server | Upstream DNS error while applying the change. |
not_found | Record or other resource does not exist. |
internal | Unexpected server error; try again or contact support. |
Rate limits
| Bucket | Limit | Window |
|---|---|---|
Zone writes | 10 | 60 seconds |
Record writes | 60 | 60 seconds |
When a limit is exceeded, the API returns 429 with a Retry-After header indicating how many seconds to wait before retrying.