API Reference
← Back to API overview & pricing
Base URL
https://tldes.com/v1
Authentication
Add key={your_key} parameter. Some endpoints are free (no key required).
Example request
GET https://tldes.com/v1?data=prices&key=YOUR_KEY
Updates
Data is updated hourly. First daily update is approximately 00:30 UTC.
Filtering
data=prices, data=promos and data=promospecial accept two optional parameters, separately or combined in one request:
- registrars — comma-separated registrar names
- tlds — comma-separated TLDs (without dot)
GET https://tldes.com/v1?data=prices&key=YOUR_KEY®istrars=dynadot.com,porkbun.com&tlds=com,net
The response has the same format but contains only the matching registrars and TLDs. Unknown registrar names and TLDs are silently ignored; use data=registrars to get the list of valid names. When filtering by tlds, registrars with no matching TLDs are omitted from the response. For data=prices the totalRegistrars field reflects the count after filtering. On all other endpoints these parameters are ignored.
data=prices Key required
All registrar prices for registration, renewal, and transfer.
Optional: filter the response with ®istrars=dynadot.com,porkbun.com and/or &tlds=com,net — see Filtering.
{
"updated": "2026-01-14T13:23:42.939Z",
"totalRegistrars": 147,
"registrars": [
{
"name": "dynadot.com",
"ts": "2026-01-14T13:23:23.207Z",
"currency": "USD",
"ICANNfee": "0.00",
"prices": [
["com", "10.88", "10.88", "10.88"],
["xyz", "1.99", "13.17", "13.17"]
]
}
]
}
| Field | Type | Description |
|---|---|---|
| updated | string | ISO 8601 timestamp of last data update |
| totalRegistrars | number | Total number of registrars in response |
| registrars[].name | string | Registrar domain name |
| registrars[].ts | string | When this registrar's prices were last fetched |
| registrars[].currency | string | Currency code (USD, EUR, GBP, etc.) |
| registrars[].ICANNfee | string | ICANN fee amount (if shown separately) |
| registrars[].prices | array | Array of price tuples (see format below) |
Price array format
[tld, registration, renewal, transfer]
Example: ["com", "10.88", "10.88", "10.88"]
- All 4 values are strings
- Prices are in the registrar's currency
- Prices shown as displayed on registrar website (may exclude taxes)
data=promos Key required
Active promotional prices and coupon codes.
Optional: filter the response with ®istrars=dynadot.com,porkbun.com and/or &tlds=com,net — see Filtering.
{
"updated": "2026-01-14T13:23:44.595Z",
"registrars": {
"spaceship.com": {
"currency": "USD",
"ICANNfee": "0.00",
"promos": [
[0, "com", "2.90", "COMPROS", 1, false],
[2, "com", "8.17", "SPSCOMTR", 0, false]
]
},
"godaddy.com": {
"currency": "USD",
"ICANNfee": "0.20",
"promos": [
[0, "com", "4.99", "", 1, true]
]
}
}
}
Promo array format
[type, tld, price, code, limit, newUsersOnly]
| Index | Type | Description |
|---|---|---|
| 0 | number | Operation type: 0=registration, 1=renewal, 2=transfer |
| 1 | string | TLD (without dot) |
| 2 | string | Promo price |
| 3 | string | Coupon code (empty string if no code needed) |
| 4 | number | Limit per customer (0 = no limit) |
| 5 | boolean | true = new customers only |
data=promospecial Key required
Special promotions with non-standard conditions (club membership, bundles, referral links, etc.).
Optional: filter the response with ®istrars=dynadot.com,porkbun.com and/or &tlds=com,net — see Filtering.
{
"updated": "2026-01-14T13:23:44.727Z",
"strings": [
"$p limit 100/week for Domainer Club members",
"$p limit 200/week for Domainer Club members",
"$p for IO+TECH bundle in cart",
"$p for COM+ONLINE bundle in cart, limit: 10"
],
"registrars": {
"unstoppabledomains.com": {
"currency": "USD",
"ICANNfee": "0.00",
"promos": [
[0, "xyz", "1.00", "", 100, false, 0],
[0, "com", "5.99", "", 200, false, 1]
]
},
"dynadot.com": {
"currency": "USD",
"ICANNfee": "0.00",
"promos": [
[0, "io", "22.99", "", 0, false, 2],
[0, "com", "8.88", "", 10, false, 3]
]
}
}
}
Special promo array format
[type, tld, price, code, limit, newUsersOnly, stringIndex]
Same as regular promo, plus:
| Index | Type | Description |
|---|---|---|
| 6 | number | Index into strings array describing special conditions |
About the strings array
- Contains HTML tooltips explaining special conditions
- $p placeholder should be replaced with the promo price
- Example: "$p for IO+TECH bundle" → "22.99 for IO+TECH bundle"
data=meta Key required
Registrar metadata: WHOIS privacy pricing, Trustpilot ratings, traffic data, ICANN accreditation.
{
"updated": "2026-01-14T13:23:43.713Z",
"registrars": {
"dynadot.com": {
"whoisPrivacy": {"price": "0.00", "currency": "USD"},
"payment": "Credit/Debit Cards, PayPal, Apple Pay, ...",
"trustpilot": {
"reviews": 3956,
"rating": 4.5,
"ratingText": "Excellent",
"ts": "2026-01-14T06:17:12.039Z"
},
"similarweb": {"visitors": "1.8m", "date": "December 2025"},
"iana": {
"number": "472",
"country": "United States of America",
"gtld": {
"domains": "7.4m",
"domainsExact": 7397368,
"date": "2026-01-06"
}
}
}
},
"currencies": {
"updated": "2026-01-13T23:17:09.910Z",
"rates": {
"EUR": {"rate": 0.91, "name": "Euro"},
"GBP": {"rate": 0.78, "name": "British Pound"}
}
}
}
| Field | Description |
|---|---|
| whoisPrivacy | WHOIS privacy service price |
| payment | Accepted payment methods (HTML string) |
| trustpilot | Trustpilot rating data |
| similarweb | Monthly visitor estimate from SimilarWeb |
| iana.number | IANA registrar ID |
| iana.country | Registrar's country of registration |
| iana.gtld | Number of gTLD domains under management |
| currencies.rates | Exchange rates to USD for currency conversion |
data=registrars Free
List of all registrars included in the API. The response is a plain JSON array of registrar names:
["namecheap.com", "dynadot.com", "porkbun.com", ...]
data=demo Free
Sample data with 2 registrars and 10 TLDs. Same format as data=prices.
data=status Free
Last update timestamp.
{
"updated": "2026-01-14T13:23:42.939Z"
}
data=keyinfo Key required
API key expiration info.
{
"keyValidUntil": "2026-12-31T23:59:59.000Z"
}
Errors
Errors are returned with the corresponding HTTP status code and a JSON body with an error field:
| Status | Response | Cause |
|---|---|---|
| 401 | {"error": "The request must contain a key"} | Missing key parameter on protected endpoint |
| 401 | {"error": "Invalid key"} | Key not found |
| 401 | {"error": "key is expired"} | Key has expired |
| 400 | {"error": "Invalid request"} | Unknown data parameter value |
Notes
- All prices are displayed as shown on registrar websites and may not include taxes or fees
- ICANNfee field shows if ICANN fee is displayed separately (add to price) or already included ("0.00")
- Data is refreshed hourly from 100+ registrar websites
- There are no fixed rate limits. Since data changes hourly, the recommended pattern is to poll data=status and download full data only when the updated timestamp changes
- CORS is enabled (Access-Control-Allow-Origin: *) — the API can be called directly from browser code
- Machine-readable spec: openapi.json (OpenAPI 3.0)