REST API
DNS SaaS provides a full REST API for programmatic access. All endpoints are prefixed with /api/v1.
Authentication
Use Sanctum tokens. Set the header:
Authorization: Bearer
DNS Zones
List zones — `GET /api/v1/dns/zones`
Returns all zones for the authenticated user.
Create zone — `POST /api/v1/dns/zones`
Request body:
{
"domain": "example.com",
"provider_credential_id": null
}
On success (201):
{
"success": true,
"data": {
"id": 1,
"domain": "example.com",
"status": "pending",
"record_count": 4,
"created_at": "2026-05-29T10:00:00Z"
},
"message": "DNS zone for example.com created."
}
Get zone — `GET /api/v1/dns/zones/{id}`
Delete zone — `DELETE /api/v1/dns/zones/{id}`
Activate zone — `POST /api/v1/dns/zones/{id}/activate`
DNS Records
Create record — `POST /api/v1/dns/zones/{zoneId}/records`
Request body:
{
"type": "a",
"name": "www",
"value": "192.168.1.1",
"ttl": 3600,
"priority": null
}
On success (201):
{
"success": true,
"data": {
"id": 10,
"zone_id": 1,
"type": "a",
"name": "www",
"value": "192.168.1.1",
"ttl": 3600,
"is_active": true
},
"message": "DNS record added."
}
Update record — `PATCH /api/v1/dns/zones/{zoneId}/records/{recordId}`
{
"value": "10.0.0.1",
"ttl": 300
}
Delete record — `DELETE /api/v1/dns/zones/{zoneId}/records/{recordId}`
Toggle record — `POST /api/v1/dns/zones/{zoneId}/records/{recordId}/toggle`
Providers
List types — `GET /api/v1/providers/types`
List connected — `GET /api/v1/providers`
Connect a provider — `POST /api/v1/providers`
Token-based (Cloudflare, Hetzner, DigitalOcean, Vultr):
{
"provider": "cloudflare",
"name": "My Cloudflare",
"api_token": "your-api-token"
}
Key+Secret-based (GoDaddy):
{
"provider": "godaddy",
"name": "My GoDaddy",
"api_key": "your-api-key",
"api_secret": "your-api-secret"
}
Key+Secret+Region (Route53):
{
"provider": "route53",
"name": "My AWS",
"api_key": "AKI...",
"api_secret": "...",
"api_endpoint": "us-east-1"
}
Import zones — `POST /api/v1/providers/{id}/import`
Import single zone — `POST /api/v1/providers/{id}/import`
{
"domain": "example.com"
}
Disconnect — `DELETE /api/v1/providers/{id}`
Test connection — `POST /api/v1/providers/{id}/test`