Custom Domains
Add custom domains, delegate DNS to Savannah nameservers, and auto-verify.
Savannah Cloud manages DNS for custom domains via PowerDNS. Once a domain is delegated to Savannah's nameservers, it can be used as a deployment URL and email sender.
Nameservers:
ns1.savannahcloud.com
ns2.savannahcloud.comDNS verification runs automatically every 5 minutes — checks the domain's A record against VPS IP 178.105.152.34 via Google DNS (8.8.8.8) and sets verified=true when matched.
List Domains
GET /domains
Authorization: Bearer <token>Response 200
[
{
"id": "dom_abc123",
"hostname": "app.acme.com",
"verified": true,
"created_at": "2026-05-01T09:00:00Z"
}
]Add a Domain
POST /domains
Authorization: Bearer <token>
Content-Type: application/jsonRequest body
{
"hostname": "app.acme.com"
}Response 201
{
"id": "dom_abc123",
"hostname": "app.acme.com",
"txt_record": "_savannah-verify=abc123...",
"nameservers": ["ns1.savannahcloud.com", "ns2.savannahcloud.com"],
"verified": false
}Point your domain's nameservers to ns1.savannahcloud.com and ns2.savannahcloud.com at your registrar. Verification happens automatically within 5 minutes.
Delete a Domain
DELETE /domains/{id}
Authorization: Bearer <token>Response 204 No Content
Trigger Verification
Manually trigger a DNS check without waiting for the next automatic run.
POST /domains/{id}/verify
Authorization: Bearer <token>Response 200
{
"verified": true,
"resolved_ip": "178.105.152.34"
}Quick Reference
# List domains
curl https://api.savannahcloud.com/domains \
-H "Authorization: Bearer YOUR_JWT"
# Add a domain
curl -X POST https://api.savannahcloud.com/domains \
-H "Authorization: Bearer YOUR_JWT" \
-H "Content-Type: application/json" \
-d '{"hostname":"app.acme.com"}'
# Trigger verification
curl -X POST https://api.savannahcloud.com/domains/dom_abc123/verify \
-H "Authorization: Bearer YOUR_JWT"