TLDers API
Access domain pricing data programmatically — the same data that powers TLDers, via a simple REST API.
- 10,000 requests/day
- Full pricing + comparison endpoints
- Multiple API keys per account
- 10,000 requests/day
- Full pricing + comparison endpoints
- Multiple API keys per account
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/tldsAuthentication
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
/api/v1/tldsList 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 }
}/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 }
}
}
}/api/v1/tlds/{tld}/historyPer-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 }
]
}
]
}/api/v1/compare?tlds=com,io,netSide-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 } ] }
]
}/api/v1/registrarsList 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 }
]
}/api/v1/promosActive, 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" } }
]
}/api/v1/check?domain=example.comLive 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" }.
| Status | Meaning |
|---|---|
| 400 | Bad request — a required parameter is missing or invalid. |
| 401 | Missing, invalid, or revoked API key. |
| 402 | Your subscription is not active — check Account → Billing. |
| 404 | The requested resource (e.g. TLD) does not exist. |
| 429 | Rate 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 }
]
}