# Porkbun API v3 — Aftermarket

> Registered domains that are for sale: partner aftermarkets (Afternic, Sedo, Atom, NameBright, DAX), Porkbun Marketplace and DAX auctions, in one search. Read-only; buying happens on porkbun.com through each listing's buyUrl.

Part of the Porkbun API v3.62. Topic index: https://porkbun.com/llms · Full reference: https://porkbun.com/llms-full.txt · Overview: https://porkbun.com/llms.txt · OpenAPI spec: https://porkbun.com/api/json/v3/spec

**Auth:** send `X-API-Key` / `X-Secret-API-Key` headers (preferred) or `apikey` / `secretapikey` in the JSON body. Create keys at https://porkbun.com/account/api

---

# Endpoints

## GET /api/json/v3/aftermarket/search

**Search domains for sale on the aftermarket**

Find registered domains that are for sale: the partner aftermarket (Afternic, Sedo, Atom, NameBright and DAX listings, merged to the lowest price per name), Porkbun Marketplace, and DAX auctions. The same listings the website's search shows. Use it when `checkDomain` says a name is taken (its `aftermarketSearch` field links here), or to browse names for sale by keyword.

`query` is a keyword (`coffee`) or a full domain (`coffee.com`). For a full domain, `exactMatch` holds its listing if it has one, and related listings follow. Results come back as: the exact name first, then buy-now listings, then make-offer, then auctions, each by price.

**Read `saleType` before quoting a price.** `buy_now`: `price` is the price to buy it. `make_offer`: `price` is the seller's minimum offer, not a price. `auction`: `price` is the current bid. All prices are integer US cents and are the current listed price; the binding price is set at checkout.

**Buying is on the website, not the API:** send the user to the listing's `buyUrl`. An aftermarket name arrives by transfer from the seller, usually within a few days (`fastTransfer: true` is quicker).

A cold search queries several marketplaces and can take a few seconds; results are cached for 10 minutes. Limited to 20 searches a minute per account (`RATE_LIMIT_EXCEEDED`). If a source cannot be reached, the others are still returned and `sourcesUnavailable` names it. Also accepts POST with the same fields in the body. Works with sandbox keys (the listings are real).

**Key permission needed:** `read`

| Parameter | In | Required | Description |
|---|---|---|---|
| `query` | query | yes | A keyword or a full domain. |
| `tld` | query | no | Only listings on this TLD, with or without the leading dot. |
| `saleType` | query | no | Only this kind of listing. |
| `priceMin` | query | no | Minimum price, integer US cents. |
| `priceMax` | query | no | Maximum price, integer US cents. |
| `limit` | query | no | Listings to return (1-200, default 50). `total` says how many matched. |

Response fields:

| Field | Type | Description |
|---|---|---|
| `status` | string |  |
| `query` | string |  |
| `exactMatch` |  | The listing for the exact domain searched, or null. |
| `listings` | object[] |  |
| `count` | integer |  |
| `total` | integer | Listings that matched before `limit`. |
| `sourcesUnavailable` | string[] | Sources that could not be searched this time (partners, marketplace, daxauction). |
| `note` | string |  |

---

## More

- Guides (how-tos): https://porkbun.com/llms/guides
- Topic index: https://porkbun.com/llms
- Full reference (one file): https://porkbun.com/llms-full.txt
- OpenAPI spec (full schemas): https://porkbun.com/api/json/v3/spec
- Short overview: https://porkbun.com/llms.txt
- Official MCP server: https://porkbun.com/mcp (`npx -y @porkbunllc/mcp-server`)
- Create API keys: https://porkbun.com/account/api
