{"schema_version":"1.0","name":"HubVibe Site Compliance Auditing Suite","base_url":"https://hubvibe-831480473793.us-south1.run.app","description":"Rule-based, verifiable site audits -- accessibility (axe-core), SEO, security headers, and performance -- callable a la carte or as a single bundle. Every result is a deterministic check against the actual page; nothing here is an LLM guessing at quality, and a check that couldn't run is never reported as a false pass.","pricing":{"model":"per-call","currency":"USD","single_audit_usd":0.03,"bundle_usd":0.1,"note":"Per-call pricing is the product and is what a machine caller should use -- no account, no minimum, no subscription.","human_plans":{"billed_by":"sites watched, not scans","audience":"People who want a recurring report rather than an integration. Not a cheaper way to buy calls.","checkout":"https://hubvibe-831480473793.us-south1.run.app/billing/checkout","tiers":[{"id":"report","name":"Single report","usd":29.99,"interval":"once","covers":"One site, all four checks, delivered as a shareable report page."},{"id":"pro","name":"Pro","usd":79.0,"interval":"month","covers":"5 sites, audited daily across all four dimensions, with history."},{"id":"agency","name":"Agency","usd":249.0,"interval":"month","covers":"50 sites, audited daily, with reports you can hand to clients."}]}},"payment":{"methods":["mpp-stripe","mpp-tempo","stripe_api_key"],"challenge":"Unauthenticated calls return HTTP 402 with a machine-readable `accepts` array in the body and, for MPP, one signed WWW-Authenticate: Payment challenge per method.","note":"Only methods actually configured on this deployment are listed; an empty list means no machine payment rail is live right now."},"limits":{"rate_limit_per_minute":600,"on_limit":"HTTP 429 with Retry-After; nothing is billed."},"discovery":{"openapi":"https://hubvibe-831480473793.us-south1.run.app/openapi.json","mcp_endpoint":"https://hubvibe-831480473793.us-south1.run.app/mcp","mcp":"https://hubvibe-831480473793.us-south1.run.app/mcp.json","llms_txt":"https://hubvibe-831480473793.us-south1.run.app/llms.txt","docs":"https://hubvibe-831480473793.us-south1.run.app/docs"},"guarantees":["You are charged only for an audit that produced a result. A check that could not run returns HTTP 502, is never settled, and is never reported as a pass -- x402 payments are verified to grant access but only settled after the audit has actually delivered.","Rate-limited requests are rejected before any payment is settled, so a 429 never costs you anything.","Results are deterministic rule-based checks against the live page, never an LLM's opinion."],"endpoints":[{"path":"/audit/wcag","method":"POST","payment_required":true,"price_usd":0.03,"input":{"html":"string (optional)","url":"string (optional, one of html/url required)"},"returns":"pass (bool), violations[] with id/impact/help/help_url/nodes_affected.","description":"WCAG 2.1 A/AA accessibility audit via axe-core.","auth":"One of: X-API-Key header (a key issued with a human plan; plans are priced per site watched, so a machine caller wanting volume should use a per-call rail below instead); X-PAYMENT header (x402, see 402 response body for price/network/payTo); or Authorization: Payment ... (MPP -- Stripe SPT for fiat or Tempo network for crypto, see the WWW-Authenticate response headers on a 402 for both challenges)","payment_methods":["mpp-stripe","mpp-tempo","stripe_api_key"],"example_request":{"url":"https://hubvibe-831480473793.us-south1.run.app/audit/wcag","method":"POST","headers":{"Content-Type":"application/json","X-API-Key":"<your key>"},"body":{"url":"https://example.com"}}},{"path":"/audit/seo","method":"POST","payment_required":true,"price_usd":0.03,"input":{"html":"string (optional)","url":"string (optional, one of html/url required)"},"returns":"pass (bool), findings[] with id/severity/detail.","description":"Title, meta description, H1 structure, canonical link, OpenGraph tags, structured data, and lang attribute.","auth":"One of: X-API-Key header (a key issued with a human plan; plans are priced per site watched, so a machine caller wanting volume should use a per-call rail below instead); X-PAYMENT header (x402, see 402 response body for price/network/payTo); or Authorization: Payment ... (MPP -- Stripe SPT for fiat or Tempo network for crypto, see the WWW-Authenticate response headers on a 402 for both challenges)","payment_methods":["mpp-stripe","mpp-tempo","stripe_api_key"],"example_request":{"url":"https://hubvibe-831480473793.us-south1.run.app/audit/seo","method":"POST","headers":{"Content-Type":"application/json","X-API-Key":"<your key>"},"body":{"url":"https://example.com"}}},{"path":"/audit/security","method":"POST","payment_required":true,"price_usd":0.03,"input":{"url":"string (required)"},"returns":"pass (bool), findings[] with id/severity/detail.","description":"HTTPS, HSTS, CSP, X-Content-Type-Options, clickjacking protection, Referrer-Policy, and CORS from a live HTTP response -- not a TLS/cipher scan or a penetration test.","auth":"One of: X-API-Key header (a key issued with a human plan; plans are priced per site watched, so a machine caller wanting volume should use a per-call rail below instead); X-PAYMENT header (x402, see 402 response body for price/network/payTo); or Authorization: Payment ... (MPP -- Stripe SPT for fiat or Tempo network for crypto, see the WWW-Authenticate response headers on a 402 for both challenges)","payment_methods":["mpp-stripe","mpp-tempo","stripe_api_key"],"example_request":{"url":"https://hubvibe-831480473793.us-south1.run.app/audit/security","method":"POST","headers":{"Content-Type":"application/json","X-API-Key":"<your key>"},"body":{"url":"https://example.com"}}},{"path":"/audit/performance","method":"POST","payment_required":true,"price_usd":0.03,"input":{"url":"string (required)"},"returns":"pass (bool), metrics{}, findings[] with id/severity/detail.","description":"DOM node count, transferred bytes, and request count from one real page load -- not a full Lighthouse audit.","auth":"One of: X-API-Key header (a key issued with a human plan; plans are priced per site watched, so a machine caller wanting volume should use a per-call rail below instead); X-PAYMENT header (x402, see 402 response body for price/network/payTo); or Authorization: Payment ... (MPP -- Stripe SPT for fiat or Tempo network for crypto, see the WWW-Authenticate response headers on a 402 for both challenges)","payment_methods":["mpp-stripe","mpp-tempo","stripe_api_key"],"example_request":{"url":"https://hubvibe-831480473793.us-south1.run.app/audit/performance","method":"POST","headers":{"Content-Type":"application/json","X-API-Key":"<your key>"},"body":{"url":"https://example.com"}}},{"path":"/audit/bundle","method":"POST","payment_required":true,"price_usd":0.1,"input":{"url":"string (required)"},"returns":"pass (bool) plus wcag{}, seo{}, security{}, performance{} sub-results.","description":"Runs wcag + seo + security + performance against one URL, billed as a single call. Atomic: if any dimension fails to run, the whole call fails and nothing is billed.","auth":"One of: X-API-Key header (a key issued with a human plan; plans are priced per site watched, so a machine caller wanting volume should use a per-call rail below instead); X-PAYMENT header (x402, see 402 response body for price/network/payTo); or Authorization: Payment ... (MPP -- Stripe SPT for fiat or Tempo network for crypto, see the WWW-Authenticate response headers on a 402 for both challenges)","payment_methods":["mpp-stripe","mpp-tempo","stripe_api_key"],"example_request":{"url":"https://hubvibe-831480473793.us-south1.run.app/audit/bundle","method":"POST","headers":{"Content-Type":"application/json","X-API-Key":"<your key>"},"body":{"url":"https://example.com"}}},{"path":"/audit","method":"POST","payment_required":true,"price_usd":0.03,"input":{"html":"string (optional)","url":"string (optional, one of html/url required)"},"auth":"One of: X-API-Key header (a key issued with a human plan; plans are priced per site watched, so a machine caller wanting volume should use a per-call rail below instead); X-PAYMENT header (x402, see 402 response body for price/network/payTo); or Authorization: Payment ... (MPP -- Stripe SPT for fiat or Tempo network for crypto, see the WWW-Authenticate response headers on a 402 for both challenges)","payment_methods":["mpp-stripe","mpp-tempo","stripe_api_key"],"note":"Alias of /audit/wcag, kept for backward compatibility."}]}