API
List, read, create, update and delete the listings on your account.
Domains
A domain is one listing on your account. Everything here needs domains:read,
and the three writing endpoints need domains:write; see
Authentication for keys and abilities.
| Method | Path | Ability |
|---|---|---|
GET |
/domains |
domains:read |
GET |
/domains/{domain} |
domains:read |
POST |
/domains |
domains:write |
PATCH |
/domains/{domain} |
domains:write |
DELETE |
/domains/{domain} |
domains:write |
{domain} is either the UUID or the full domain name, so
/domains/example.net and /domains/01920f1a-… address the same listing.
The domain object
{
"id": "01920f1a-6c4e-7a51-9d0b-4c8f2b7e1a33",
"name": "example",
"extension": "net",
"domain": "example.net",
"description": "Short and easy to say out loud.",
"status": "active",
"featured": false,
"pricing": {
"price": 1950,
"sale_price": null,
"sale_ends_at": null,
"effective_price": 1950,
"offer_from": 950,
"currency": "EUR",
"accepts_offers": true
},
"metrics": {
"seo_score": 29,
"moz_da": 31,
"moz_links": 623,
"moz_spam": 11,
"majestic_tf": 28,
"majestic_cf": 23,
"traffic_per_month": 120,
"updated_at": "2026-09-01T03:14:00+00:00"
},
"valuation": {
"marketplace": 2400,
"auction": 1400,
"brokerage": 3100,
"source": "estivai",
"updated_at": "2026-09-01T03:14:00+00:00"
},
"categories": ["tech", "short"],
"stats": {
"views": 412,
"leads": 3
},
"url": "https://ydomain.com/domains/example.net",
"created_at": "2026-01-08T10:22:41+00:00",
"updated_at": "2026-09-12T19:03:55+00:00"
}
categories is present when the listing was loaded with them, which is the
case on every endpoint here.
Status
| Value | Meaning |
|---|---|
draft |
Not published; only you can see it |
active |
Published on the marketplace |
parked |
Published, but says nothing about a sale |
contact |
Published, no amount shown, offers welcome |
pending |
Under offer |
sold |
Sold |
expired |
Registration lapsed |
hidden |
Taken off the marketplace, kept on your account |
A parked listing, and any listing without a price, sale price or minimum
offer, shows no price, no offer invitation and no for-sale wording anywhere:
not on its page, not in a card, not in structured data. An offer_amount sent
to such a listing is dropped. This is a legal requirement, not a display
preference, so it is enforced on the server and cannot be switched off.
sold cannot be set through POST /domains; it is set by PATCH and stamps
sold_at for you.
Pricing
price— the asking price.sale_price— a temporary lower price; must be belowprice.sale_ends_at— when that sale price stops applying.effective_price— what a buyer actually sees right now: the sale price while it runs, otherwise the price.offer_from— the minimum offer you will consider.accepts_offers— whether the listing takes offers at all.
List your domains
curl "https://ydomain.com/api/v1/domains?status=active&per_page=2" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Accept: application/json"
| Parameter | Default | Notes |
|---|---|---|
status |
— | One of the status values above |
per_page |
25 |
Capped at 100 |
page |
1 |
{
"data": [
{
"id": "01920f1a-6c4e-7a51-9d0b-4c8f2b7e1a33",
"domain": "example.net",
"status": "active",
"pricing": { "effective_price": 1950, "currency": "EUR" },
"stats": { "views": 412, "leads": 3 }
},
{
"id": "01920f1a-8d13-7b02-8a71-2f5c9e4d7b10",
"domain": "example.org",
"status": "parked",
"pricing": { "effective_price": null, "currency": "EUR" },
"stats": { "views": 88, "leads": 0 }
}
],
"links": { "next": "https://ydomain.com/api/v1/domains?page=2" },
"meta": { "current_page": 1, "last_page": 74, "per_page": 2, "total": 148 }
}
The objects above are abbreviated; the full shape is the one at the top of this page. Newest listings come first.
Read one domain
curl https://ydomain.com/api/v1/domains/example.net \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Accept: application/json"
{
"data": {
"id": "01920f1a-6c4e-7a51-9d0b-4c8f2b7e1a33",
"domain": "example.net",
"status": "active",
"pricing": { "price": 1950, "currency": "EUR", "accepts_offers": true }
}
}
A domain that is not yours gives 404.
Create a domain
name and extension are separate, and the pair must be unique across the
marketplace. Everything else is optional; currency falls back to your account
currency and status to active.
curl -X POST https://ydomain.com/api/v1/domains \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"name": "example",
"extension": "org",
"description": "A calm, brandable name for a lighting or wellness brand.",
"price": 7250,
"offer_from": 3500,
"currency": "EUR",
"status": "active",
"categories": ["tech", "short"]
}'
| Field | Rules |
|---|---|
name |
Required, max 63, letters, digits and hyphens |
extension |
Required, max 31; co.uk is fine |
description |
Optional, max 5000 |
status |
Optional, any status except sold |
price, sale_price, offer_from |
Optional numbers, 0–99,999,999 |
sale_price |
Must be lower than price |
sale_ends_at |
Optional date in the future |
currency |
Optional, three letters, a supported currency |
has_website |
Optional boolean |
redirect |
Optional https URL |
categories |
Optional, up to 5 category slugs |
201 Created:
{
"data": {
"id": "01920f2b-51aa-7c14-9e02-6b3d8f1c4e77",
"name": "example",
"extension": "org",
"domain": "example.org",
"status": "active",
"pricing": {
"price": 7250,
"effective_price": 7250,
"offer_from": 3500,
"currency": "EUR",
"accepts_offers": true
},
"categories": ["short", "tech"],
"url": "https://ydomain.com/domains/example.org",
"created_at": "2026-09-17T08:12:03+00:00"
}
}
A name that is already listed gives 422:
{
"message": "That domain is already listed.",
"errors": { "name": ["That domain is already listed."] }
}
This also fires the domain.created webhook.
Update a domain
Send only what changes. Leaving categories out keeps the current ones;
sending [] clears them.
curl -X PATCH https://ydomain.com/api/v1/domains/example.org \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"price": 6500, "sale_price": 5900, "sale_ends_at": "2026-12-31T23:59:59+00:00"}'
{
"data": {
"domain": "example.org",
"pricing": {
"price": 6500,
"sale_price": 5900,
"sale_ends_at": "2026-12-31T23:59:59+00:00",
"effective_price": 5900,
"currency": "EUR"
},
"updated_at": "2026-09-17T08:20:44+00:00"
}
}
Setting "status": "sold" stamps the sale date and fires domain.sold. Every
other change fires domain.updated.
Delete a domain
curl -X DELETE https://ydomain.com/api/v1/domains/example.org \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Accept: application/json"
HTTP/1.1 204 No Content
The listing is soft deleted: it disappears from the marketplace and from the
API, and its leads are kept. Fires domain.deleted.