API Documentation
Base URL: https://nessgate.com. All read endpoints are public — no
authentication, no API keys, CORS enabled (Access-Control-Allow-Origin: *).
Responses are JSON unless noted.
Resolve a domain
GET /resolve/{domain}
Returns the official JSON URL registered by a verified domain.
$ curl https://nessgate.com/resolve/example.com
200 OK
{
"domain": "example.com",
"json_url": "https://example.com/data/ai-info.json",
"verified": true
}
404 Not Found — domain is not registered
{ "domain": "example.com", "json_url": null, "verified": false }
400 Bad Request — input is not a valid domain
Responses are cached for 60 seconds. Input is normalized: scheme, path,
port, and a leading www. are ignored.
Full registry
GET /registry.json
The complete public registry as a JSON array of {"domain", "json_url"} objects.
Suitable for bulk consumption by crawlers and AI agents.
Human-readable pages
GET /{domain} e.g. https://nessgate.com/example.com
An HTML page for each registered domain. Machine discovery: /sitemap.xml and /robots.txt.
Register, update, or delete a listing
Writing requires proving control of the domain — see the Verification Guide. The flow is two calls:
POST /api/register
Content-Type: application/json
{ "action": "register", // or "delete"
"domain": "example.com",
"json_url": "https://example.com/data/ai-info.json" } // omit for delete
200 OK → { "token": "…", "code": "…", "expires_in": 3600,
"verification": { "file_url": …, "file_content": …,
"dns_record": …, "json_field": … } }
Place the code using any verification option, then:
POST /api/verify
Content-Type: application/json
{ "token": "the token from /api/register" }
200 OK → { "ok": true, "action": "register", "domain": "…", "json_url": "…" }
422 → ownership proof or JSON URL check failed (message explains what to fix)
400 → invalid, expired, or already-used token
Rules and limits
| JSON URL | Must be HTTPS on the registered domain or a subdomain; must return HTTP 200 with valid JSON (≤ 1 MB). During verification the response is parsed only to confirm it is valid JSON, then discarded — contents are never stored or analyzed. |
| Ownership proof | Must come from the domain itself: the .well-known file and JSON-field proofs are accepted only from the apex domain (or www), and the DNS TXT record must sit at _nessgate.{domain}. Control of an unrelated subdomain cannot claim the parent domain. The json_field option is omitted from the register response when the JSON URL is on another subdomain. |
| Tokens | Expire after 60 minutes; single use. |
| Rate limits | 30 requests per hour per IP on /api/register and /api/verify. |
| Updates / deletes | Same flow — re-verification replaces or removes the existing pointer. |