the same search as the web form, as JSON
GET https://rdata.dev/api/v1/{type}?q=<value[,value…]>&op=or|and&after=<cursor>
{type} is one of the enabled types below, or auto. q takes up to 16 values separated by commas or whitespace. op=or|and (default or) — domains carrying any / all of the values. after is the opaque cursor from the previous page's next.
{
"type": "ns", "op": "and", "query": ["ns1.example.com", "ns2.example.com"],
"approx_total": 1234, // upper bound: candidate rows before verification
"results": [ {"domain": "a.com", "resolved_at": "2026-10-01T12:00:00Z", "parked": false, "matched": ["ns1.example.com", "ns2.example.com"]} ],
"next": "…", // "" on the last page
"duration_ms": 42,
"note": "…" // optional: partial page, unverified display
}
Every page is verified against the live source tables: a domain is listed only if the value is in its current record set. Errors come as {"error": "…"}: 400 bad input / type not enabled / bad cursor, 401 unknown key, 403 anonymous page depth, 429 rate limit or quota (Retry-After), 503 busy or timed out — narrow the query.
a — A (IPv4): 985708465 of 985708465 domainscname — CNAME target: 985708465 of 985708465 domainsns — NS host: 1189713806 of 1189713806 domains
GET /api/v1/types returns this list as JSON.
Anonymous: 30 requests per minute per IP (IPv6 per /64) and at most 10 pages per query. With a key: no per-IP limit, unlimited paging, a monthly quota of requests (1 unit per request, any type) reported in X-RateLimit-Limit / X-RateLimit-Remaining. Pass the key as ?key=rd_… or Authorization: Bearer rd_….
A request counts against the quota even when it ends in a 503 (busy or timed out).
Keys are issued by hand: write to [email protected] with your use case and expected volume.
curl 'https://rdata.dev/api/v1/a?q=1.1.1.1' curl 'https://rdata.dev/api/v1/ns?q=ns1.example.com,ns2.example.com&op=and' -H 'Authorization: Bearer rd_…' curl 'https://rdata.dev/api/v1/cname?q=shops.myshopify.com&after=…'