List DNS Records

GET /v1/domains/self/{uuid}/dns-records

Proxy DNS records from your domain's configured provider. The platform calls the provider's API live (Cloudflare, DigitalOcean, Route53, cPanel, Webmin, Namecheap) using the credentials you stored at domain creation, normalises the result into a common shape, and returns it.

This is a read-through view — there's no DNS-record cache. Every call hits the upstream provider, so DNS-provider rate limits apply. Pagination is in-memory: providers return all records, the platform slices to your page_size.

Behaviour depends on the domain's provisioning_mode. auto (provider credentials stored) returns the live, editable record list described here. manual domains (you manage DNS at your own provider) instead return a read-only payload — { "read_only": true, "required_records": [ { "type", "name", "host", "value" } ], "records": [] } — listing the records you must add (the wildcard *.<domain> CNAME, plus an apex A row when configured). For manual domains the create / update / delete record endpoints return 409.

Path parameters

uuid string (uuid) Req
Domain UUID. Must belong to the calling user (or admin).

Query parameters

page int
1-indexed page. Default 1.
page_size int
Records per page. Default 50, max 200.

Response (200 OK)

records array
DNS records from the provider, normalised to the schema below.
records[].type string
A | AAAA | CNAME | TXT | MX | NS | SRV | CAA.
records[].name string
Subdomain part. "@" for the apex; otherwise the relative subdomain ("api", "www").
records[].content string
Record value. For A: IPv4 address. CNAME: target hostname. TXT: text payload. MX: mail server hostname (priority via priority).
records[].ttl int
Time-to-live in seconds.
records[].priority int?
MX priority (lower = preferred). Only set on MX records.
records[].proxied boolean?
Cloudflare-only: whether the record is "orange-cloud" proxied through CF. Always false on non-CF providers.
total, page, page_size int
Pagination metadata.

Errors

400 Bad Request
Domain has no DNS provider configured (provider: "none") or provider credentials are missing required fields.
401 Unauthorized
Missing auth.
404 Not Found
Domain doesn't exist or doesn't belong to the calling user.
502 Bad Gateway
DNS provider call failed (network, auth, or provider-side error). The error message includes the provider's response.
Request
curl "https://api.ngris.com/v1/domains/self/<uuid>/dns-records?page=1&page_size=50" \ -H "X-API-KEY: <your_api_key>"
Python
from ngris import Ngris client = Ngris(api_key="<your_api_key>") for r in client.domains.list_dns_records("<domain_uuid>"): print(f"{r['type']:<6} {r['name']:<20} -> {r['content']}")
Response — 200 OK (auto)
{ "records": [ {"type": "A", "name": "@", "content": "203.0.113.10", "ttl": 3600}, {"type": "CNAME", "name": "www", "content": "@", "ttl": 3600, "proxied": true}, {"type": "MX", "name": "@", "content": "mx1.example.com", "ttl": 3600, "priority": 10} ], "total": 3, "page": 1, "page_size": 50 }
Response — 200 OK (manual, read-only)
{ "read_only": true, "provisioning_mode": "manual", "message": "This domain's DNS is managed at your own provider. Add the records below, then validate the domain.", "required_records": [ {"type": "CNAME", "name": "*", "host": "*.example.com", "value": "cname.ngris.io"} ], "records": [] } # The apex "A" row (name "@", host "example.com") is included only when an # apex fallback IP is configured for the platform.
On this page
List DNS Records
Iris