TLDers API

Access domain pricing data programmatically — the same data that powers TLDers, via a simple REST API.

monthly
$5 / month
  • 10,000 requests/day
  • Full pricing + comparison endpoints
  • Multiple API keys per account
Subscribe
yearly
Best value
$30 / year
  • 10,000 requests/day
  • Full pricing + comparison endpoints
  • Multiple API keys per account
Subscribe

Try it live

No API key needed — this hits the real endpoints against a rate-limited sandbox.

No parameters — returns the first 25 tracked TLDs.

GET /api/v1/tlds

Authentication

Pass your API key as a bearer token, or via an X-API-Key header. Create keys from your account once subscribed.

curl https://tlders.com/api/v1/tlds \
  -H "Authorization: Bearer tld_live_..."

# or
curl https://tlders.com/api/v1/tlds \
  -H "X-API-Key: tld_live_..."

Endpoints

GET/api/v1/tlds

List every tracked TLD with its cheapest current registration price. Filter with ?type=, ?category=, ?q=; sort with ?sort=price_asc|price_desc|tld|popularity; paginate with ?limit=&offset=.

{
  "data": [
    { "tld": "com", "type": "gtld", "cheapestRegister": { "price": 9.98, "registrar": { "name": "Porkbun", "slug": "porkbun" } } },
    { "tld": "io", "type": "cctld", "cheapestRegister": { "price": 34.99, "registrar": { "name": "Namecheap", "slug": "namecheap" } } }
  ],
  "meta": { "total": 214, "limit": 50, "offset": 0 }
}
GET/api/v1/tlds/{tld}

Full detail and live per-registrar pricing for a single TLD, including average/median pricing across every registrar we track for it.

{
  "data": {
    "tld": "com",
    "type": "gtld",
    "currentPrices": [
      { "registrar": { "name": "Porkbun" }, "priceRegister": 9.98, "priceRenew": 10.98, "priceTransfer": 9.98 }
    ],
    "priceStats": {
      "average": { "register": 11.42, "renew": 14.30, "transfer": 10.85 },
      "median": { "register": 10.98, "renew": 13.98, "transfer": 9.98 }
    }
  }
}
GET/api/v1/tlds/{tld}/history

Per-registrar price history over time for a single TLD — the same data behind the price chart on its detail page.

{
  "data": [
    {
      "registrar": { "name": "Porkbun", "slug": "porkbun" },
      "points": [
        { "fetchedAt": "2026-06-01T02:00:00.000Z", "priceRegister": 11.08, "priceRenew": 12.98 },
        { "fetchedAt": "2026-07-01T02:00:00.000Z", "priceRegister": 9.98, "priceRenew": 12.98 }
      ]
    }
  ]
}
GET/api/v1/compare?tlds=com,io,net

Side-by-side price comparison across up to several TLDs at once.

{
  "data": [
    { "tld": "com", "prices": [ { "registrar": { "name": "Porkbun" }, "priceRegister": 9.98 } ] },
    { "tld": "io", "prices": [ { "registrar": { "name": "Namecheap" }, "priceRegister": 34.99 } ] }
  ]
}
GET/api/v1/registrars

List every active registrar we track, with affiliate network and WHOIS-privacy metadata.

{
  "data": [
    { "id": "cln1a2b3c", "name": "Porkbun", "slug": "porkbun", "affiliateNetwork": "direct", "whoisPrivacyIncluded": true, "trackedTlds": 214 }
  ]
}
GET/api/v1/promos

Active, verified promo codes across all registrars. Paginate with ?limit=&offset= (default 50, max 200).

{
  "data": [
    { "code": "NEWCOM2024", "discountType": "percentage", "discountValue": 15, "appliesTo": "register", "registrar": { "name": "Namecheap", "slug": "namecheap" }, "tld": { "tld": "com" } }
  ]
}
GET/api/v1/check?domain=example.com

Live RDAP domain availability check — the same lookup that powers the public domain checker.

{
  "data": { "domain": "example.com", "available": false, "registrar": "RESERVED-Internet Assigned Numbers Authority", "expires": null }
}

Errors

Errors are a non-2xx status with a JSON body: { "error": "message" }.

StatusMeaning
400Bad request — a required parameter is missing or invalid.
401Missing, invalid, or revoked API key.
402Your subscription is not active — check Account → Billing.
404The requested resource (e.g. TLD) does not exist.
429Rate limit exceeded for your plan.

Rate limits

Every plan is capped at 10,000 requests/day per key, on a rolling 24-hour window. Exceeding it returns a 429 with a JSON error body. Create additional keys from your account if you need to separate usage across applications.

Webhooks

Get notified instead of polling — add a URL from your account and we'll POST to it whenever a tracked TLD's cheapest registration price changes. Best-effort, single attempt per event — no retry queue yet, so treat it as a nudge to refetch rather than a guaranteed delivery log.

POST https://your-app.com/webhooks/tlders
X-TLDers-Signature: <hex HMAC-SHA256 of the raw body, signed with your webhook secret>
Content-Type: application/json

{
  "event": "price.changed",
  "timestamp": "2026-01-01T00:00:00.000Z",
  "data": [
    { "tld": "com", "registrar": "porkbun", "oldPriceRegister": 11.08, "newPriceRegister": 10.98 }
  ]
}