Savannah Cloud

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.com

DNS 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/json

Request 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"

On this page