{"openapi":"3.1.0","info":{"title":"NorthlineIQ Website Check agent API","version":"1.0.0","description":"No-account, one-scan bearer capabilities. Scan before pay; hosted Checkout link only, no direct or saved-card charging."},"servers":[{"url":"https://northlineiq.com"}],"x-northlineiq-offer":{"product_code":"website_check","offer_version":"1.3","contract_hash":"81d676b60699f194a6981f7bbb6e1ce3a7ccf8dbfe85a12afdf60831df610d23","base_amount_minor":500,"currency":"usd","tax_behavior":"exclusive","scope":"one authorized website's discoverable public HTTPS pages; deterministic HTML observations with explicit coverage; only completed checks can enter checkout","payment_flow":"stripe_hosted_checkout","direct_api_charging_supported":false,"browser_agent_payment_support":"Runtime-discovered Stripe WebMCP tools when available; an authorized payment method and buyer confirmation are required."},"externalDocs":{"url":"https://northlineiq.com/website-check/agents","description":"Workflow and safety instructions"},"components":{"securitySchemes":{"scanCapability":{"type":"http","scheme":"bearer","description":"Client-generated nliq_wc_ plus 43 base64url characters from 32 cryptographically random bytes. First POST binds its hash to one job; never use cookies or put the secret in URLs."}}},"paths":{"/website-check/api/v1/scans":{"post":{"operationId":"createWebsiteCheck","security":[{"scanCapability":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":16,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$"}}],"summary":"Start or resume one authorized website check; no payment","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"url":{"type":"string","format":"uri","maxLength":2048},"authorized_to_scan":{"const":true}},"required":["url","authorized_to_scan"]}}}},"responses":{"200":{"description":"Success; status/report/hosted checkout details as appropriate"},"202":{"description":"Durable scan accepted or resumed"},"401":{"description":"Missing or malformed bearer capability"},"402":{"description":"Verified payment required"},"404":{"description":"Resource or scoped capability unavailable"},"409":{"description":"Conflict or scan not ready"},"422":{"description":"Invalid authorization, URL, or frozen offer"},"429":{"description":"Capacity limited; Retry-After supplied"},"503":{"description":"Unavailable; retry the same idempotent operation"}}}},"/website-check/api/v1/scans/{scan_id}":{"get":{"operationId":"getWebsiteCheckStatus","security":[{"scanCapability":[]}],"parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","pattern":"^ws_[a-f0-9]{32}$"}}],"summary":"Read persisted progress and next action","responses":{"200":{"description":"Success; status/report/hosted checkout details as appropriate"},"202":{"description":"Durable scan accepted or resumed"},"401":{"description":"Missing or malformed bearer capability"},"402":{"description":"Verified payment required"},"404":{"description":"Resource or scoped capability unavailable"},"409":{"description":"Conflict or scan not ready"},"422":{"description":"Invalid authorization, URL, or frozen offer"},"429":{"description":"Capacity limited; Retry-After supplied"},"503":{"description":"Unavailable; retry the same idempotent operation"}}}},"/website-check/api/v1/scans/{scan_id}/checkout":{"post":{"operationId":"createWebsiteCheckCheckout","security":[{"scanCapability":[]}],"parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","pattern":"^ws_[a-f0-9]{32}$"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":16,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$"}}],"summary":"Return a Stripe hosted payment URL; never charge directly","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"authorized_to_purchase":{"const":true},"base_amount_minor":{"const":500},"currency":{"const":"usd"},"tax_behavior":{"const":"exclusive"},"offer_version":{"const":"1.3"},"contract_hash":{"const":"81d676b60699f194a6981f7bbb6e1ce3a7ccf8dbfe85a12afdf60831df610d23"}},"required":["authorized_to_purchase","base_amount_minor","currency","tax_behavior","offer_version","contract_hash"]}}}},"responses":{"200":{"description":"Success; status/report/hosted checkout details as appropriate"},"202":{"description":"Durable scan accepted or resumed"},"401":{"description":"Missing or malformed bearer capability"},"402":{"description":"Verified payment required"},"404":{"description":"Resource or scoped capability unavailable"},"409":{"description":"Conflict or scan not ready"},"422":{"description":"Invalid authorization, URL, or frozen offer"},"429":{"description":"Capacity limited; Retry-After supplied"},"503":{"description":"Unavailable; retry the same idempotent operation"}}}},"/website-check/api/v1/scans/{scan_id}/report":{"get":{"operationId":"getWebsiteCheckReport","security":[{"scanCapability":[]}],"parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","pattern":"^ws_[a-f0-9]{32}$"}}],"summary":"Read paid full report or free incomplete result","responses":{"200":{"description":"Success; status/report/hosted checkout details as appropriate"},"202":{"description":"Durable scan accepted or resumed"},"401":{"description":"Missing or malformed bearer capability"},"402":{"description":"Verified payment required"},"404":{"description":"Resource or scoped capability unavailable"},"409":{"description":"Conflict or scan not ready"},"422":{"description":"Invalid authorization, URL, or frozen offer"},"429":{"description":"Capacity limited; Retry-After supplied"},"503":{"description":"Unavailable; retry the same idempotent operation"}}}},"/website-check/api/v1/scans/{scan_id}/capability":{"delete":{"operationId":"revokeWebsiteCheckCapability","security":[{"scanCapability":[]}],"parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","pattern":"^ws_[a-f0-9]{32}$"}}],"summary":"Revoke this capability without changing payment history","responses":{"200":{"description":"Success; status/report/hosted checkout details as appropriate"},"202":{"description":"Durable scan accepted or resumed"},"401":{"description":"Missing or malformed bearer capability"},"402":{"description":"Verified payment required"},"404":{"description":"Resource or scoped capability unavailable"},"409":{"description":"Conflict or scan not ready"},"422":{"description":"Invalid authorization, URL, or frozen offer"},"429":{"description":"Capacity limited; Retry-After supplied"},"503":{"description":"Unavailable; retry the same idempotent operation"}}}}}}