DocsDNS Reference
Documentation

DNS API

Connect domains you own to Reinterface nameservers, then manage their DNS records over REST with your personal API key.

Overview

The flow has three steps: connect a domain (we register its zone and copy over its existing public records), switch nameservers at your registrar to the three we return, and once delegation is verified the domain goes active and every record change you make takes effect on our nameservers within minutes. Records can be managed from the dashboard or this API interchangeably.

Once a domain is connected, two more APIs build on it: Email Forwarding creates addresses on the domain that deliver to any inbox, and Domain Health runs live checks on delegation, reachability, and mail posture.

Base URL: https://api.reinterface.com/api/v1. All responses are JSON. Last updated: 2026-08-08.

Authentication

Requests carry a short-lived access token, not your API key. POST your personal key to /api/v1/token once, then send the token it returns in the Authorization header for the next hour. Find your key under Dashboard → Settings → API keys. Domains are scoped to your account; you can only see and manage domains you connected.

Exchange your key for a token
curl -X POST https://api.reinterface.com/api/v1/token \
  -H "x-api-key: <YOUR_API_KEY>"

# {"access_token":"eyJ...","token_type":"Bearer","expires_in":3600}
Auth header
-H "Authorization: Bearer <ACCESS_TOKEN>"

Connect a domain

POST/api/v1/dns/domains

Register a domain's zone on Reinterface nameservers

Registers the zone and scans the domain’s current public DNS (apex A/AAAA/MX/TXT and www) to import existing records, so switching nameservers doesn’t take your site or mail down. The response lists the nameservers to set at your registrar and everything that was imported. The domain starts as pending.

Request
curl -X POST https://api.reinterface.com/api/v1/dns/domains \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "content-type: application/json" \
  -d '{ "domain": "company.com" }'
Response
{
  "domain": "company.com",
  "status": "pending",
  "nameservers": [
    "ns1.reinterfacens.com",
    "ns2.reinterfacens.com",
    "ns3.reinterfacens.com"
  ],
  "imported_records": [
    { "id": "", "type": "A", "name": "@", "value": "203.0.113.10", "ttl": 3600 },
    { "id": "", "type": "MX", "name": "@", "value": "mx1.company.com", "ttl": 3600, "priority": 10 }
  ]
}
A domain can only be connected by one account. If it is already connected you get 409 domain_taken.

List domains

GET/api/v1/dns/domains

List your connected domains and our nameservers

Request
curl https://api.reinterface.com/api/v1/dns/domains \
  -H "Authorization: Bearer <ACCESS_TOKEN>"
Response
{
  "domains": [
    {
      "domain": "company.com",
      "status": "active",
      "last_checked_at": "2026-07-30T10:41:00Z",
      "created_at": "2026-07-29T08:12:00Z"
    }
  ],
  "nameservers": [
    "ns1.reinterfacens.com",
    "ns2.reinterfacens.com",
    "ns3.reinterfacens.com"
  ]
}

Check delegation

GET/api/v1/dns/domains/{domain}

Live nameserver check; updates the stored status

Looks up the domain’s nameservers on the public DNS tree and compares them with ours. When all expected nameservers are present, the domain flips to active. Nameserver changes can take up to 24-48 hours to propagate, so keep polling this endpoint after switching.

Request
curl https://api.reinterface.com/api/v1/dns/domains/company.com \
  -H "Authorization: Bearer <ACCESS_TOKEN>"
Response
{
  "domain": "company.com",
  "status": "active",
  "expected_nameservers": [
    "ns1.reinterfacens.com",
    "ns2.reinterfacens.com",
    "ns3.reinterfacens.com"
  ],
  "current_nameservers": [
    "ns1.reinterfacens.com",
    "ns2.reinterfacens.com",
    "ns3.reinterfacens.com"
  ]
}

Remove a domain

DELETE/api/v1/dns/domains/{domain}

Delete the zone and disconnect the domain

Deletes the zone from our nameservers and releases the domain from your account. If its nameservers still point at us afterwards, the domain stops resolving, so switch them back at your registrar first.

Request
curl -X DELETE https://api.reinterface.com/api/v1/dns/domains/company.com \
  -H "Authorization: Bearer <ACCESS_TOKEN>"
Response
{
  "success": true,
  "domain": "company.com",
  "status": "deleted"
}

List records

GET/api/v1/dns/records

List a domain's DNS records

Required query param: domain. name uses @ for the zone apex. NS records appear in listings but are managed by Reinterface; attempts to modify or delete them return 403 protected_record.

Request
curl "https://api.reinterface.com/api/v1/dns/records?domain=company.com" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"
Response
{
  "domain": "company.com",
  "records": [
    { "id": "856390610", "type": "NS", "name": "@", "value": "ns1.reinterfacens.com", "ttl": 3600 },
    { "id": "856390654", "type": "A", "name": "@", "value": "203.0.113.10", "ttl": 300 },
    { "id": "856390662", "type": "MX", "name": "@", "value": "mx1.company.com", "ttl": 3600, "priority": 10 }
  ]
}

Create a record

POST/api/v1/dns/records

Create a DNS record on a connected domain

Required: domain, type (A, AAAA, CNAME, MX, TXT), name (@ for apex) and value. Optional: ttl in seconds (60, 300, 900, 1800, 3600, 21600, 43200 or 86400; defaults to 3600, other values round up) and priority (MX only, defaults to 10). Values are validated per type; an A record value must be an IPv4 address, AAAA an IPv6 address, and so on.

Request
curl -X POST https://api.reinterface.com/api/v1/dns/records \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "content-type: application/json" \
  -d '{
    "domain": "company.com",
    "type": "MX",
    "name": "@",
    "value": "mx1.company.com",
    "priority": 10,
    "ttl": 3600
  }'
Response
{
  "id": "856390662",
  "type": "MX",
  "name": "@",
  "value": "mx1.company.com",
  "ttl": 3600,
  "priority": 10
}

Update a record

PUT/api/v1/dns/records/{id}

Update a record's name, value, TTL or priority

Required: domain and value. Optional: name, ttl and priority (each keeps its current value when omitted). A record’s type cannot change; delete and recreate instead.

Request
curl -X PUT https://api.reinterface.com/api/v1/dns/records/856390654 \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "content-type: application/json" \
  -d '{
    "domain": "company.com",
    "value": "203.0.113.20",
    "ttl": 300
  }'
Response
{
  "id": "856390654",
  "type": "A",
  "name": "@",
  "value": "203.0.113.20",
  "ttl": 300
}

Delete a record

DELETE/api/v1/dns/records/{id}

Delete a DNS record

Required query param: domain.

Request
curl -X DELETE "https://api.reinterface.com/api/v1/dns/records/856390654?domain=company.com" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"
Response
{
  "success": true,
  "id": "856390654",
  "status": "deleted"
}

Deliverability records

Sending domains still get their SPF, DKIM, and DMARC records generated and verified automatically when you register them for email; those flows live in the Email Connectors API. The DNS API is for the rest of your zone.

Errors

Errors return { "success": false, "error": { "code", "message" } }.

StatusCodeMeaning
401unauthorizedMissing, invalid or expired access token
400invalid_requestMissing or invalid fields
404domain_not_foundDomain is not attached to your account
404record_not_foundRecord id does not exist on this domain
403protected_recordNS records are managed by Reinterface
409domain_takenDomain is already connected to an account
409record_conflictA conflicting record already exists
502cloudns_errorUpstream DNS provider unreachable
503dns_not_configuredDNS management is disabled on this server

Endpoint summary

MethodPathPurpose
GET/api/v1/dns/domainsList your connected domains
POST/api/v1/dns/domainsConnect a domain (registers its zone)
GET/api/v1/dns/domains/{domain}Live delegation check
DELETE/api/v1/dns/domains/{domain}Remove a domain and its zone
GET/api/v1/dns/recordsList a domain's records
POST/api/v1/dns/recordsCreate a record
PUT/api/v1/dns/records/{id}Update a record
DELETE/api/v1/dns/records/{id}Delete a record