NessGate

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 URLMust 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 proofMust 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.
TokensExpire after 60 minutes; single use.
Rate limits30 requests per hour per IP on /api/register and /api/verify.
Updates / deletesSame flow — re-verification replaces or removes the existing pointer.