Usage Guide
How the proof link flow works - from signing on your server to the user-visible verification result.
How it works
signProof(siteId, host, secretKey) and redirects the user to the resulting URL (via proofToUrl()). Signing happens server-side so the secret key never leaves your server.allowed_domains.Proof URL
Generated by proofToUrl(params). The SDK builds and signs this automatically - you don't need to construct it manually.
https://registry.liorith.net/verify ?site=SITE_ID &host=example.com &ts=1719820800000 &nonce=a3f8c2d1e0b4 &sig=<hmac-sha256>
sitehosttsnoncesigEndpoints
registry.liorith.net/verify?site=…&host=…&ts=…&nonce=…&sig=…HTML result pageapi.registry.liorith.net/verify?site=…&host=…&ts=…&nonce=…&sig=…JSON resultapi.registry.liorith.net/check?domain=…JSON registry lookup/verify on registry.liorith.net is the user-facing page. api.registry.liorith.net/verify returns the same data as JSON for programmatic use. api.registry.liorith.net/check looks up any domain without requiring a signed proof - useful for status badges and widgets.
Checking a domain with /check
Use api.registry.liorith.net/check when you want to display registry status without redirecting the user through a proof flow - for example in status badges, admin dashboards, or showing whether a domain is Liorith-verified inline.
const res = await fetch(
'https://api.registry.liorith.net/check?domain=example.com'
);
const data = await res.json();
// { result: 'verified_registry', status: 'active', site: { name: '…', id: '…' } }
// { result: 'unknown' }
// { result: 'blacklisted' }verified_registryunknownblacklistedUnlike /verify, this endpoint requires no signature or nonce - it is read-only and rate-limited. See Response Codes for the full reference.