DNS Management
Auth
# Set your DNS provider API key
DNS_API_KEY="<YOUR_DNS_API_KEY>"
DNS_API_BASE="<YOUR_DNS_API_BASE_URL>" # e.g., https://api.hosting.ionos.com/dns/v1/zones
Header: X-API-Key: $DNS_API_KEY (or Authorization: Bearer $DNS_API_KEY depending on provider)
Known Zone IDs
| Domain | Zone ID |
|---|---|
| example.com | <ZONE_ID> |
Operations
List all zones (find zone ID)
curl -s -H "X-API-Key: $DNS_API_KEY" "$DNS_API_BASE" | jq '.[] | {name, id}'
List records for a zone
curl -s -H "X-API-Key: $DNS_API_KEY" "$DNS_API_BASE/{zoneId}" | jq '.records[] | {name, type, content, id}'
# Filter by type:
curl -s -H "X-API-Key: $DNS_API_KEY" "$DNS_API_BASE/{zoneId}?recordType=A"
Add record
curl -s -X POST \
-H "X-API-Key: $DNS_API_KEY" \
-H "Content-Type: application/json" \
-d '[{"name":"sub.domain.com","type":"A","content":"1.2.3.4","ttl":3600}]' \
"$DNS_API_BASE/{zoneId}/records"
Update record (need record ID first)
curl -s -X PUT \
-H "X-API-Key: $DNS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"content":"1.2.3.4","ttl":3600}' \
"$DNS_API_BASE/{zoneId}/records/{recordId}"
Delete record
curl -s -X DELETE \
-H "X-API-Key: $DNS_API_KEY" \
"$DNS_API_BASE/{zoneId}/records/{recordId}"
Workflow
- If zone ID unknown: list zones, find matching domain
- List existing records for the zone
- Add / update / delete as needed
- Verify:
dig sub.domain.com @8.8.8.8(propagation takes 1-5 min)
Common Record Types
| Type | Use case | Example content |
|---|---|---|
| A | IPv4 | 93.184.216.34 |
| CNAME | Alias | cname.vercel-dns.com |
| TXT | Verification, SPF | "v=spf1 include:..." |
| MX | 10 smtp.example.com |