API reference
ZoneVouch API
Status, 9 October 2026: these routes run on our engine inside our network. The public ZoneVouch API with your own keys is not open yet; the routes below are the contract it exposes. Examples below are real recorded responses, trimmed, with vendor fields generalised.
Basics
- Format
- JSON. Every body has
ok: true|false; errors adderror. - Base
/v1/<module>(host announced when the public API opens)- Auth
- Research routes need no key. Everything else needs a key; in the app, your session.
- Discover
GET /v1/moduleslists modules and their status. Modules that are not switched on answer with an error that names the module.
Research Live
Registry verdict for 1–20 names plus the registrar's register and renewal price. Verdicts: available, taken, unknown, conflict, invalid. Add price=0 to skip pricing. A registrar outage degrades the price, not the verdict.
Recorded 2026-10-09 15:01 UTC · HTTP 200 · 1,890 ms · trimmed
{
"ok": true,
"results": [
{
"domain": "zonevouch.com",
"verdict": "available",
"rdap": {
"status": "available",
"source": "rdap",
"detail": "registry: no such domain",
"registrar": "",
"cached": true,
"checked_at": 1791557989.7041943
},
"registrar": {
"provider": "registrar",
"registrable": true,
"reason": null,
"tier": "standard",
"currency": "USD",
"registration_cost": "10.46",
"renewal_cost": "10.46",
"source": "registrar:domain-check",
"checked_at": "2026-10-09T15:01:35Z"
}
},
{
"domain": "zonevouch.io",
"verdict": "available",
"rdap": {
"status": "available",
"source": "whois",
"detail": "registry: no match",
"registrar": "",
"cached": true,
"checked_at": 1791557989.644324
},
"registrar": {
"provider": "registrar",
"registrable": true,
"reason": null,
"tier": "standard",
"currency": "USD",
"registration_cost": "32.00",
"renewal_cost": "50.00",
"source": "registrar:domain-check",
"checked_at": "2026-10-09T15:01:35Z"
}
}
],
"registrar_error": null,
"registrar_cred": "registrar"
}Verdict only, faster. Up to 20 names.
Recorded 2026-10-09 15:01 UTC · HTTP 200 · 399 ms · trimmed
{
"ok": true,
"results": [
{
"domain": "zonevouch.com",
"status": "available",
"source": "rdap",
"detail": "registry: no such domain",
"cached": true,
"checked_at": 1791557989.7041943,
"registrar": ""
},
{
"status": "available",
"source": "rdap",
"detail": "registry: no such domain",
"domain": "zonevouch.app",
"cached": false,
"checked_at": 1791558098.498709
}
]
}Every registrable extension for a name, with prices.
Recorded 2026-10-09 15:01 UTC · HTTP 200 · 1,502 ms · trimmed
{
"ok": true,
"query": "zonevouch",
"domains": [
{
"name": "zonevouch.com",
"registrable": true,
"tier": "standard",
"pricing": {
"currency": "USD",
"registration_cost": "10.46",
"renewal_cost": "10.46"
}
},
{
"name": "zonevouch.net",
"registrable": true,
"tier": "standard",
"pricing": {
"currency": "USD",
"registration_cost": "11.86",
"renewal_cost": "11.86"
}
},
{
"name": "zonevouch.org",
"registrable": true,
"tier": "standard",
"pricing": {
"currency": "USD",
"registration_cost": "8.50",
"renewal_cost": "11.20"
}
}
],
"source": "registrar:domain-search",
"cred": "(internal)",
"checked_at": "2026-10-09T15:01:42Z"
}Extensions, variations and a name score with each criterion's reason, including criteria that were not run.
Recorded 2026-10-09 15:02 UTC · HTTP 200 · 21,113 ms · trimmed
{
"ok": true,
"name": "zonevouch",
"score": {
"total": 100.0
},
"variations": "[41 items]"
}Whether the handle is free on each network; unknown with a reason when a network can't be checked.
Recorded 2026-10-09 15:02 UTC · HTTP 200 · 4 ms · trimmed
{
"ok": true,
"handle": "zonevouch",
"checked_at": "2026-10-09T14:59:51Z",
"sites": {
"github": {
"status": "available"
},
"x": {
"status": "unknown"
},
"instagram": {
"status": "unknown"
},
"facebook": {
"status": "available"
},
"tiktok": {
"status": "available"
},
"youtube": {
"status": "available"
},
"reddit": {
"status": "unknown"
},
"linkedin": {
"status": "available"
}
}
}Module list with status and phase.
Recorded 2026-10-09 15:01 UTC · HTTP 200 · 301 ms · trimmed
{
"ok": true,
"modules": [
{
"group": "research",
"status": "live"
},
{
"group": "intelligence",
"status": "planned"
},
{
"group": "diligence",
"status": "partial"
},
{
"group": "decisions",
"status": "planned"
},
{
"group": "acquire",
"status": "live"
},
{
"group": "monitor",
"status": "planned"
},
{
"group": "protect",
"status": "planned"
},
{
"group": "grow",
"status": "planned"
},
{
"group": "portfolio",
"status": "live"
}
]
}Diligence Partial
Run the checks and wait. Each check returns ok, error or skipped with a reason.
Recorded 2026-10-09 15:02 UTC · HTTP 200 · 17,890 ms · trimmed
{
"ok": true,
"job": {
"job_id": "dlg_\u2026",
"domain": "clovitek.com",
"status": "done",
"result": {
"registration": {
"status": "ok"
},
"dns": {
"status": "ok"
},
"history": {
"status": "error"
},
"registrar": {
"status": "ok"
},
"reputation": {
"status": "skipped"
},
"cloviscan": {
"status": "skipped"
},
"typo": {
"status": "skipped"
},
"seo": {
"status": "skipped"
}
}
}
}Start a job; returns 202 and a job id. Poll GET /v1/diligence/jobs/<id>.
Portfolio Live
List watchlist entries. POST adds one, DELETE /v1/portfolio/watchlist/<id> removes one.
Owned domains with days to expiry; also /zones, /registrations, /dns/<domain>.
Acquire Gated
Whether purchasing is enabled and how long a quote lasts.
Recorded 2026-10-09 15:02 UTC · HTTP 200 · 4 ms · trimmed
{
"ok": true,
"purchase_enabled": false,
"registrar": "registrar",
"approval": "Class B (founder) - quote -> confirm with one-time token",
"quote_ttl_s": 900
}Live price check and a one-time confirm token valid for 15 minutes. A quote never spends money.
Refused with 403 purchase_disabled unless purchasing is switched on at the server; then also needs the token, a named approver and an approval reference. Not part of the public API.
Rate limits
Unauthenticated routes: 30 requests per minute per address. Over the limit: HTTP 429 with a one-line message. The public API will publish its own per-key limits.
Errors
| HTTP | Recorded body | What to do |
|---|---|---|
| 400 | {"ok": false, "error": "send 1-20 domains"} | Fix the request: here, no domains were sent. |
| 401 | {"ok": false, "error": "internal caller required (X-Clovi-Internal, slug clovidomains)"} | This route needs a key. |
| 429 | {"ok": false, "error": "rate limited, try again in a minute"} | Slow down; retry after a minute. |