# HTML Layout Check Current release is shown by /offer.json and /health. Customer purchasing is disabled during operator tests. Do not send a payment to a closed service. Use this service when you are finishing a self-contained static HTML report/page for your owner and want three real renders plus selected actionable measurements. If you already have a dependable equivalent browser workflow, doing it yourself may be preferable. JavaScript, remote resources, navigation, authentication, full-page screenshots and comprehensive visual/accessibility certification are outside this offer. Price:0.10 native USDC on Base per completed check. No prepaid balance, minimum package or subscription. Use only your owner's authorized purchasing budget. You need an EOA capable of an EIP-3009 signature; smart-account and Permit2 signatures are not supported in this first version. The service requests one quoted 0.10 USDC transfer. On the supported EIP-3009 route your wallet signs an authorization and CDP submits settlement; this checkout does not request a separate buyer gas transaction. Wallet funding, on-ramp or third-party client/wallet charges, if any, are outside this quote; include them in the existing authorized total budget. A 0.10 USDC transfer ceiling is not a universal all-in USD guarantee. Before buying, inspect: - /offer.json: exact scope, price, asset, recipient and current availability. - /sample/input.txt: the fixed self-contained fixture. - /sample/output.json: the actual hosted measured result, with each screenshot's hash and file name. - /sample/seeded-390.png, seeded-768.png, seeded-1440.png: actual first-viewport screenshots. The fixture intentionally contains defects. It does not represent every layout or prove subjective quality. Request: POST /v1/check Content-Type: application/json Idempotency-Key: {"html":"

My report

"} Limits:128KiB UTF-8 HTML,3,000 elements,100 findings per viewport. Assets must be embedded. Screenshots cover390x844,768x1024 and1440x1000 viewports, not the entire document. The JSON request envelope is at most1MiB; response is at most3MiB. A provider quota, one-active-job limit,21-second spacing,6 daily browser attempts or60 lifetime attempts can cause refusal before settlement. Failed browser attempts consume capacity. Daily counters use UTC. Purchasing: 1. Submit the request without a payment. A402 contains PAYMENT-REQUIRED (base64 JSON), x402Version2 and one exact native-USDC/Base offer. Check amount100000 (six decimals), networkeip155:8453, asset0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 and the published receiver. Do not change the accepted requirements. 2. Use your compatible x402 client to construct the EIP-3009 payment. Quote window is120 seconds. Preserve the same input and Idempotency-Key when the client resubmits with PAYMENT-SIGNATURE. Do not sign a new payment merely because the response is slow. 3. A completed result includes three base64 PNGs, findings, limitations and a receipt. Decode each PNG and compare its SHA-256 hash before using it. Counts repeat across viewports. A zero-finding result is not certification. /client.mjs is a minimal Node22+ example using the official @x402/core, @x402/evm and @x402/fetch SDKs and viem. Its initial request preserves the supplied job key and refuses an unreviewed price/chain/asset/receiver. You supply a signer already authorized by the owner; never put a wallet private key in chat or commit it. The same module exports saveEvidencePacket({result,directory}). It checks PNG hashes and dimensions, saves three PNG files plus a findings/receipt report into a NEW directory, and returns a short file manifest without base64 image data. Existing directories are refused. The caller keeps its recovery key separately in approved private job state; it is not included in the shareable report. This helper does not sign, pay or render. Recovery, PNG decoding and evidence export need only Node22+ built-ins; no payment SDK installation or signer is needed for those actions. The payment packages are loaded only when purchaseCheck is called. An actual purchase still requires the compatible SDK packages and an already-authorized signer. Recovery and failure: - Keep the private job key. It is recovery authority. Anyone with it and the identical HTML can retrieve saved output. - Retry identical HTML with that SAME key and no payment header to recover. A saved completed job does not verify, render or settle again. -202 job_in_progress: wait10 seconds, then recover. Do not start another purchase. -400 invalid request/payment terms: correct the request; no settlement was attempted. -402 payment_invalid: the submitted payment failed verification; no rendering or settlement. -503 job_failed_before_settlement or a saved failed attempt: no settlement call was made for that job. A deliberate new attempt needs a fresh job key and fresh authorization. -409 changed input/payment or reused nonce: use the original job for recovery. Do not pay again to bypass this error. -410 output_expired: output is no longer retained; this old job will not be charged again. Download promptly. - A receipt marked unconfirmed means settlement outcome is uncertain. The prepared result is still delivered. The service does not submit settlement again. Preserve the receipt and use the issue route if needed. Only onchain_confirmed is independently matched to the exact onchain transfer; facilitator_reported is the provider's report. Retention: source HTML is not saved. Screenshots and finding text may include your private material and are stored for 24 hours in active application storage; small original quote/receipt records remain. Provider backups are outside the app's deletion claim. Download the response and images within 24 hours. Issue review: POST /v1/issues, Content-Type: application/json {"jobKey":"","code":"output_problem"} Codes:output_problem,receipt_pending,recovery_problem. A202 means recorded for operator review; it is not an automatic refund or a promise about timing. There is no automated wallet-spending/refund capability. Finding a defect is a successful check, not itself a delivery failure. Evidence: this is an experimental offering. Own tests, directory listings, request counts and hypothetical buying preferences do not establish independent agent demand. Applicable scope and terms version is2026-10-16.1. Marketplace verification: PayAPI Market funded one0.10USDC check of POST /v1/check and reports its product check passed. The exact stored authorization/quote was matched read-only to the on-chain transfer: https://basescan.org/tx/0x12af034fc0b95170915adf7d6a067ff1cee6a09e9a31be0de48fbeea0d614c19. Live listing: https://payapi.market/api/html-layout-check. This is platform-funded verification, not evidence of an independent customer choosing to buy. The operator did not inspect that caller's private PNGs; existing real sample, scope and limitations still apply. Payment address requirement: the sending wallet must differ from the receiving address. Coinbase rejects self-payments. The operator page pauses this configuration before connection/signing; new signed self-payments are refused locally before provider verification, rendering or settlement. Existing saved-job recovery remains available. Operator-only rehearsal: an explicitly approved temporary receiving address can be used only while RELEASE_STATE is operator_test. Public/closed modes ignore that override and keep the permanent receiver. The public Node client remains pinned to the permanent receiver and is not the operator-test signing page. Owner-funded balances and transfers are tests, not independent revenue.