Base URL https://planet-project.click/api/v1
Access Bearer token + whitelist IP
Rate limit 10 RPS per token
Version API v1.3
Updated Updated 15 May 2026
Trading domain-core API
PlanetDomains API
A calm, predictable API for domain trading: search, registration, renewals, DNS, nameservers, Cloudflare, and webhook events. Public docs stay open, while working methods are protected by token and whitelist IP.
Base URL https://planet-project.click/api/v1
Auth Bearer token from the bot + whitelist IP. Token creation and rotation require at least $40 balance.
Mutations Idempotency-Key is required for register, renew, DNS, NS, bind, and batch.
Limits 10 RPS per token. If the spike is too hard, the token is temporarily blocked for 5 minutes.
Create a token in the bot: Profile -> API. Add the server IP that will call the API into Whitelist. Send Authorization: Bearer <token> with every protected request. Attach a unique Idempotency-Key to every mutating request.
Token creation, whitelist, and webhook are managed from the bot. New token issuance and rotation require at least $40 balance. An empty whitelist means the API is fully closed even with a valid token.
GET
/api/v1/account#
Balance, API status, whitelist, webhook, and default config summary.
Reference
Auth Bearer + whitelist
Params none
Response account summary
Idempotency not required
Effect read-only
Show detailsparams / body / response / notes Response shape Copy {
"status": true,
"result": {
"user_id": 7,
"balance_usd": 1.25,
"api_enabled": true,
"webhook_enabled": false
}
}
GET
/api/v1/zones#
List available zones with register pricing, renewal pricing, and premium flags.
Reference
Auth Bearer + whitelist
Params none
Response zones[]
Idempotency not required
Effect read-only
Show detailsparams / body / response / notes Response shape Copy {
"status": true,
"result": {
"zones": [
{"zone": ".click", "register_price_usd": 3.20, "renew_price_usd": 27.47, "premium": false}
]
}
}Operational notes Use this method as the base for storefront pricing and calculators.
GET
/api/v1/domains/search#
Exact domain lookup or shortlist search by query.
Trading
Auth Bearer + whitelist
Query query
Response availability / shortlist
Idempotency not required
Effect read-only
Show detailsparams / body / response / notes Params query
A full domain or a base name.
Response shape Copy {
"status": true,
"result": {
"query": "planet-project.click",
"available": false,
"price_usd": 3.20
}
}Errors 401 unauthorized
The token is invalid or revoked.
403 forbidden
The caller IP is not whitelisted.
Operational notes If query looks like a full domain, the method runs exact lookup. POST
/api/v1/domains/search/batch#
Batch domain search with item-level results.
Batch Trading
Auth Bearer + whitelist
Body items[]
Response count / success / failed / items[]
Idempotency not required
Effect read-only
Show detailsparams / body / response / notes Request body Copy {
"items": ["planet-project.click", "planet-trade.click"]
}Response shape Copy {
"status": true,
"result": {
"count": 2,
"success": 2,
"failed": 0,
"items": []
}
}Operational notes Do not treat one failed item as a failure of the whole request.
POST
/api/v1/domains/register#
Register a single domain. If config is omitted, configurator defaults are used.
Trading config
Auth Bearer + whitelist
Body domain, years?, config?
Response order summary
Idempotency required
Effect creates an order
Show detailsparams / body / response / notes Request body Copy {
"domain": "planet-project.click",
"years": 1,
"client_ref": "deal-42",
"external_ref": "invoice-77"
}Response shape Copy {
"status": true,
"result": {
"domain": "planet-project.click",
"status": "registered",
"client_ref": "deal-42",
"external_ref": "invoice-77"
}
}Errors 404 domain_not_found
The domain is missing or already taken.
422 validation_error
The payload or config is invalid.
Operational notes Always attach Idempotency-Key for mutating operations. client_ref and external_ref are returned in detail, list, and webhook payloads. POST
/api/v1/domains/register/batch#
Batch registration with partial success and item-level statuses.
Batch Trading
Auth Bearer + whitelist
Body items[]
Response count / success / failed / items[]
Idempotency required
Effect creates orders
Show detailsparams / body / response / notes Request body Copy {
"items": [
{"domain": "planet-project.click", "years": 1, "client_ref": "deal-1"},
{"domain": "planet-trade.click", "years": 1, "client_ref": "deal-2"}
]
}Response shape Copy {
"status": true,
"result": {
"count": 2,
"success": 1,
"failed": 1,
"items": []
}
}Operational notes Batch allows partial success. Read every item independently.
Batch flows always return a result for every item. Do not rely on one top-level status and do not infer the whole request outcome from the first failure.
invalid_domain
The domain failed local validation.
not_available
The domain is already taken or unavailable for registration.
validation_error
The payload item contains an incompatible configuration.
request_in_progress
A request with the same Idempotency-Key is still running.
POST
/api/v1/domains/{domain}/renew#
Renew a single domain.
Trading
Auth Bearer + whitelist
Body years, client_ref?, external_ref?
Response renewal summary
Idempotency required
Effect renews the domain
Show detailsparams / body / response / notes Params domain
A domain from your account.
Request body Copy {
"years": 1,
"client_ref": "renew-42"
}Response shape Copy {
"status": true,
"result": {
"domain": "planet-project.click",
"status": "renewed"
}
}Operational notes The renew path uses the same pricing logic as the bot. POST
/api/v1/domains/renew/batch#
Batch domain renewals.
Batch Trading
Auth Bearer + whitelist
Body items[]
Response count / success / failed / items[]
Idempotency required
Effect renews a domain batch
Show detailsparams / body / response / notes Request body Copy {
"items": [
{"domain": "planet-project.click", "years": 1},
{"domain": "planet-trade.click", "years": 1}
]
}Response shape Copy {
"status": true,
"result": {
"count": 2,
"success": 2,
"failed": 0,
"items": []
}
}Operational notes Use batch renew for reseller cycles and overnight jobs.
client_ref and external_ref help map deals, invoices, and internal orders back to our response. They are stored on the order and returned in list, detail, and webhook payloads.
Python Copy import requests
r = requests.get(
f"{BASE_URL}/account",
headers={"Authorization": f"Bearer {TOKEN}"},
timeout=20,
)
print(r.json())Node.js Copy const response = await fetch(`${BASE_URL}/domains/search?query=planet-project.click`, {
headers: { Authorization: `Bearer ${TOKEN}` },
});
console.log(await response.json());PHP Copy $ch = curl_init(BASE_URL . "/account");
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ["Authorization: Bearer " . TOKEN],
CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch);
Account Copy {
"status": true,
"result": {
"user_id": 7,
"balance_usd": 1.25,
"api_enabled": true
}
}Domain search Copy {
"status": true,
"result": {
"query": "planet-project.click",
"available": false,
"register_price_usd": 3.20
}
}Webhook delivery Copy {
"status": true,
"result": {
"limit": 10,
"count": 1,
"items": [
{"event_type": "domain.renewed", "attempt_number": 1, "status": "delivered", "status_code": 200}
]
}
}
GET
/api/v1/domains/{domain}/dns#
Current DNS records, nameservers, and domain mode.
Infrastructure
Auth Bearer + whitelist
Path domain
Response records / nameservers / mode
Idempotency not required
Effect read-only
Show detailsparams / body / response / notes Params domain
A domain from your account.
Response shape Copy {
"status": true,
"result": {
"mode": "cloudflare",
"records": [],
"nameservers": ["elaine.ns.cloudflare.com", "thomas.ns.cloudflare.com"]
}
}PUT
/api/v1/domains/{domain}/dns#
Fully replace the DNS record set through the same validator used by the bot.
Infrastructure
Auth Bearer + whitelist
Body records[]
Response updated dns
Idempotency required
Effect replaces DNS
Show detailsparams / body / response / notes Params domain
A domain from your account.
Request body Copy {
"records": [
{"type": "A", "name": "@", "content": "2.26.84.230", "ttl": 300}
]
}Response shape Copy {
"status": true,
"result": {
"updated": true,
"records": []
}
}PATCH
/api/v1/domains/{domain}/nameservers#
Fully replace nameservers via preset_key or explicit nameservers.
Infrastructure
Auth Bearer + whitelist
Body preset_key or nameservers
Response updated nameservers
Idempotency required
Effect replaces NS
Show detailsparams / body / response / notes Params domain
A domain from your account.
Request body Copy {
"nameservers": ["ns1.example.net", "ns2.example.net"]
}Response shape Copy {
"status": true,
"result": {
"updated": true,
"nameservers": ["ns1.example.net", "ns2.example.net"]
}
}
POST
/api/v1/domains/{domain}/cloudflare/bind#
Bind a domain to a Cloudflare profile managed in the bot.
Cloudflare
Auth Bearer + whitelist
Body cloudflare_profile_key
Response cloudflare bind summary
Idempotency required
Effect binds Cloudflare
Show detailsparams / body / response / notes Params domain
A domain from your account.
Request body Copy {
"cloudflare_profile_key": "default"
}Response shape Copy {
"status": true,
"result": {
"bound": true,
"cloudflare_profile_key": "default"
}
}Errors 409 cloudflare_not_configured
The Cloudflare profile is missing or disabled.
Webhook is configured from the bot and sends all supported domain events for the user. For payloads, signatures, and retries, open the dedicated webhook guide.
The most useful model is simple: 401/403 are access issues, 404/422 are payload or ownership issues, 409 is state or config mismatch, and 429 is pacing plus backoff.
GET /account
Balance, whitelist, webhook, and account summary.
GET /zones
Zones and register/renew pricing.
GET /domains/search
Exact domain lookup.
POST /domains/search/batch
Batch domain search.
POST /domains/register
Single-domain registration.
POST /domains/register/batch
Batch domain registration.
POST /domains/{domain}/renew
Single-domain renew.
POST /domains/renew/batch
Batch domain renew.
GET/PUT /domains/{domain}/dns
Read and fully replace DNS.
PATCH /domains/{domain}/nameservers
Fully replace nameservers.
POST /domains/{domain}/cloudflare/bind
Bind to a Cloudflare profile.
Use OpenAPI JSON for client generation, contract checks, and schema navigation.