POST /v1/site-audit asks for one public page and returns a report: a score from 0 to 100, Lighthouse category scores and top issues, DNS (A, AAAA, MX, NS), SPF, DMARC and DKIM selectors, TLS, security headers, discovered subdomains and timings. Verza does not fetch or render the page. A separate render worker does, and verza returns that report with its usual endpoint name and disclaimer.
The price is $0.50, settled in USDC on Base, and only after the worker returns 200. An empty body or {} is a 402 when the worker can run, so a directory probe sees the payment challenge. A private or loopback host, a bad scheme, or any other invalid body is HTTP 400 after payment is verified, and that call is not settled. If the worker is not configured, busy or unreachable, the response is HTTP 503 with Retry-After and no 402, so you are not asked to pay for a job that cannot run. A URL the worker rejects is HTTP 400 and is not settled. A timeout is HTTP 504 and is not settled. A job usually takes 20 to 60 seconds. Allow about 75 seconds for the call.
Audit one public http or https page: Lighthouse scores, DNS, SPF, DMARC, DKIM selectors, TLS, security headers and subdomains. Verza calls a render worker and does not fetch the page itself. An empty body is a 402 when the worker can run. A private or loopback host is HTTP 400 after payment is verified and is not settled. A busy or unreachable worker is HTTP 503 with Retry-After and is not settled.
POST /v1/site-audit
Content-Type: application/json
{"url":"https://example.com"}
Price: $0.50 USDC on Base (eip155:8453), scheme exact.
The payTo address is the one in /.well-known/x402.json.
Worker accepting, unpaid:
HTTP 402
payment-required: the x402 challenge (amount 500000, which is $0.50 of USDC)
Worker busy, unreachable, or not configured:
HTTP 503
Retry-After: 30
{"error":"busy","retry_after":30}
When the worker is not configured the body is {"error":"audit temporarily unavailable"}.
No 402 is issued.
Worker rejects the URL (passed through, not settled):
HTTP 400
{"error":"url blocked"}
Completed audit:
HTTP 200
{
"endpoint": "site-audit",
"url": "https://example.com",
"final_url": "https://example.com/",
"fetched_at": "2026-10-22T12:00:00Z",
"score": 91,
"score_method": "lighthouse-weighted",
"lighthouse": {
"performance": 0.9,
"accessibility": 0.95,
"best_practices": 0.92,
"seo": 0.88,
"top_issues": [{"id": "lcp", "title": "Largest Contentful Paint", "score": 0.7}]
},
"dns": {"a": ["93.184.216.34"], "aaaa": [], "mx": [], "ns": ["ns.example.com"]},
"email_security": {"spf": "v=spf1 -all", "dmarc": "v=DMARC1; p=reject", "dkim_selectors_found": ["default"]},
"tls": {"issuer": "Example CA", "valid_to": "2027-01-01T00:00:00Z", "days_left": 70},
"security_headers": {"present": ["strict-transport-security"], "missing": ["content-security-policy"]},
"subdomains": ["www.example.com"],
"timings_ms": {"total": 21000},
"disclaimer": "..."
}API key. The free tier issues a key at /signup: send it as Authorization: Bearer <key> and calls come off a monthly allowance, no crypto anywhere in that path. Every key comes with a sandbox twin (vz_test_) that never counts against quota and accepts only the documented test inputs, so you can wire up an integration before spending a single call.
Pay per call. Send no key at all and a paid endpoint replies HTTP 402 with the exact payment requirements; an x402 client pays USDC on Base (about two seconds to settle) and retries automatically. No account, no signup, which is what makes it work for autonomous agents.
Either way, invalid input is rejected with a free 400 before any payment is challenged, so you never pay (or spend quota) to learn you made a typo.
South African ID number validation API South African VAT number validation API NCA credit agreement lawfulness API South African KYB and onboarding API South African contact validation API CIPC registration number check Domain age and registry status API IP address screening API Business pre-screen API Risk score API Guides: how the interest rate caps work zaref: NCA maximum interest rates