# Domain price comparison API

Compare what registrars charge for a domain ending as JSON: first year, renewal and transfer for each registrar, with the cheapest and the renewal traps marked. Free calls also read the renewal traps and the newest price changes.

- Without a key: every registrar's price for an ending (one ending a day outside the endings with a page on the website), the renewal traps the website shows and the newest confirmed price changes.
- With a key: the cheapest registrar for up to 100 endings at once, every renewal trap, the whole price change feed, and every stored price for one name.
- Free calls need no key: 60 calls an hour and 100 a day from one address.

## Try it

```bash
curl -X GET "https://api.unique.domains/v1/prices/tlds/io"
```

## Example answer

200, application/json

```json
{
  "data": [
    {
      "registrar": "cloudflare",
      "name": "Cloudflare",
      "homepageUrl": "https://www.cloudflare.com/products/registrar/",
      "purchasePrice": 38.5,
      "renewalPrice": 38.5,
      "transferPrice": 38.5,
      "currency": "USD",
      "isPromo": false,
      "renewalTrap": false,
      "cheapest": true,
      "cheapestRenewal": true,
      "cheapestTransfer": true
    }
  ],
  "meta": {
    "asOf": "2026-11-05T08:00:00Z",
    "cursor": null,
    "limit": null
  },
  "links": {
    "self": "https://api.unique.domains/v1/prices/tlds/io",
    "next": null,
    "register": null,
    "product": null,
    "dataset": null
  }
}
```

## Endpoints

- [GET /prices/tlds/{tld}](https://unique.domains/api/list-tld-prices) (Free): Every registrar's list price for one ending, with the cheapest and trap marks.
- [GET /prices/cheapest](https://unique.domains/api/list-cheapest-prices) (Paid): The cheapest registrar per ending for up to 100 endings.
- [GET /prices/traps](https://unique.domains/api/list-price-traps) (Free): Endings whose cheapest first year renews at a trap price, alphabetical.
- [GET /prices/changes](https://unique.domains/api/list-price-changes) (Free): Confirmed registrar price changes across the nine, newest first.
- [GET /names/{name}/prices](https://unique.domains/api/get-name-prices) (Paid): Every stored registrar quote for one name, and the renewal-trap flag.

## Ways to call it

- On RapidAPI: Domain Price Comparison API, https://rapidapi.com/dopamyn-network-dopamyn-network-default/api/domain-price-comparison
- From Node.js: `npm install @uniquedomains/registrar-prices`, or `npx @uniquedomains/registrar-prices io`
- From any language: https://unique.domains/api

## Questions

### In which order are registrars listed?

The registrars of our catalog in catalog order, then the others alphabetically. The answer is never sorted by price; a mark shows the cheapest first year.

### What is a renewal trap?

An ending whose cheapest first year's renewal is at least twice the first year and at least $10 more. GET /prices/traps lists them alphabetically: free calls read the rows the website shows, a key reads them all.

### Does it show promotional prices?

Yes. A promotional first year shows as the price, marked as a promotion. The regular price behind it needs a key.

Full reference: https://unique.domains/api
