Products

Registrar Kit

alpha

A white-label domain registration API. Build a registrar under your own brand — backed by xdns infrastructure. WHOIS privacy by default. Supports traditional, Handshake, and xdns-native TLDs.

What you can build

Availability check

Single or bulk domain availability across all supported TLDs — traditional, Handshake, and xdns-operated.

Register & renew

Full registration flow via API. Supports multi-year registration. Renewal reminders via webhook.

Contact management

Create and manage WHOIS contacts. WHOIS privacy enabled by default — no personal data exposed.

Domain transfers

Initiate inbound transfers from any accredited registrar. EPP transfer codes supported.

White-label branding

Configure your own brand name, nameservers, and support email. Customers never see xdns.wtf branding.

Webhook events

Get notified on registration, renewal, transfer, and expiry events. Integrate with your billing system.

Quick start

# 1. Check availability
curl "https://xdns.wtf/api/registrar/check/myapp.com" \
  -H "Authorization: Bearer $TOKEN"
# { "domain": "myapp.com", "available": true, "price_usd": 12.99 }

# 2. Bulk check
curl -X POST https://xdns.wtf/api/registrar/check/bulk \
  -H "Authorization: Bearer $TOKEN" \
  -d '{"domains":["myapp.com","myapp.io","myapp.co"]}'

# 3. Create a contact
curl -X POST https://xdns.wtf/api/registrar/contacts \
  -H "Authorization: Bearer $TOKEN" \
  -d '{
    "name": "Jane Dev",
    "email": "jane@myapp.com",
    "privacy": true
  }'
# { "id": "cnt_01abc" }

# 4. Register the domain
curl -X POST https://xdns.wtf/api/registrar/domains \
  -H "Authorization: Bearer $TOKEN" \
  -d '{
    "domain": "myapp.com",
    "years": 2,
    "contact_id": "cnt_01abc",
    "nameservers": ["ns1.xdns.wtf", "ns2.xdns.wtf"]
  }'
# {
#   "domain": "myapp.com",
#   "status": "active",
#   "expires_at": "2028-03-13",
#   "nameservers": ["ns1.xdns.wtf", "ns2.xdns.wtf"]
# }

White-label configuration

Configure your brand so customers never see xdns.wtf:

curl -X PUT https://xdns.wtf/api/registrar/config \
  -H "Authorization: Bearer $TOKEN" \
  -d '{
    "brand_name": "AcmeDomains",
    "nameservers": ["ns1.acmedomains.com", "ns2.acmedomains.com"],
    "support_email": "support@acmedomains.com",
    "whois_privacy_default": true,
    "webhook_url": "https://acmedomains.com/webhooks/xdns"
  }'

Domain transfers

# Initiate transfer in
curl -X POST https://xdns.wtf/api/registrar/transfers/in \
  -H "Authorization: Bearer $TOKEN" \
  -d '{
    "domain": "myapp.com",
    "auth_code": "EPP-AUTH-CODE-FROM-CURRENT-REGISTRAR",
    "contact_id": "cnt_01abc"
  }'

# { "transfer_id": "tr_01xyz", "status": "pending", "estimated_days": 5 }

# Check transfer status
curl "https://xdns.wtf/api/registrar/transfers/tr_01xyz" \
  -H "Authorization: Bearer $TOKEN"

# { "status": "approved", "completed_at": "2026-03-15T12:00:00Z" }

Webhook events

EventTriggered when
domain.registeredNew domain successfully registered
domain.renewedDomain renewal completed
domain.expiringDomain expires in 30 / 7 / 1 day(s)
domain.expiredDomain passed expiry date
transfer.approvedInbound transfer completed
transfer.rejectedTransfer rejected by losing registrar
contact.updatedWHOIS contact information changed

API endpoints

GET/api/registrar/check/:domainSingle domain availability
POST/api/registrar/check/bulkBulk availability (up to 50)
POST/api/registrar/domainsRegister domain
GET/api/registrar/domainsList registered domains
PUT/api/registrar/domains/:domain/renewRenew domain
POST/api/registrar/contactsCreate contact
PUT/api/registrar/contacts/:idUpdate contact
POST/api/registrar/domains/:domain/privacyEnable WHOIS privacy
POST/api/registrar/transfers/inInitiate inbound transfer
GET/api/registrar/transfers/:idGet transfer status
PUT/api/registrar/configUpdate white-label config
Supported TLD types
  • ·xdns-native — TLDs registered on Handshake via the Custom TLDs product
  • ·Traditional gTLDs — .com, .net, .org, .io, .co, .app, .dev via EPP upstream partners
  • ·Handshake TLDs — any HNS-registered TLD where xdns is authoritative