# ProofRun Independent bounded HTTP acceptance checks after an owner-authorized deployment change. Origin: https://proofrun.pages.dev Price: $0.01 native USDC on Base per pack of up to five checks via x402. Use when a coding agent needs hosted observation and a private result before handoff. Free curl/local tests may be enough; no unique-data, security or full-application-certification claim. ## Contracts - GET /openapi.json: input/output schemas, auth, payment metadata. - GET /examples.json: release-marker,page-content and JSON-contract packs plus workflow and limits. - GET /catalog and /health: free service metadata and health. - POST /mcp: Streamable HTTP. Tools enroll_target,verify_target,preflight_pack,verify_deployment,read_report. ## Safe purchase workflow 1. Caller generates a random private 32-128 character read token; retain it outside model-visible/public artifacts where possible. 2. Enroll an origin you control and may authorize for read-only GETs: POST /v1/enrollments with origin,paths,owner_authorized:true,read_only_paths:true and Authorization:Bearer token. Maximum five exact paths. 3. Publish returned expected_file at proof_url, then POST /v1/enrollments/{id}/verify with same token. Pending proof lasts 10 minutes; verified enrollment 24 hours. 4. Free POST /v1/preflight or MCP preflight_pack validates your exact pack,current enrollment and purchase-key format with no target fetch/payment/reservation. Supply bearer token,X-ProofRun-Enrollment,Idempotency-Key. It refuses a prior attempt visible to that token. Ready is NOT a passed test or guarantee of wallet,chain,capacity or settlement readiness. 5. POST /v1/checks unsigned with identical pack and credentials. Review authoritative PAYMENT-REQUIRED challenge: exact 10000 native Base USDC units ($0.01),chain 8453 and recipient. Wallet signing is the caller's responsibility; ProofRun never creates buyer signatures. 6. Retry the same request with the one original PAYMENT-SIGNATURE. Save the original request and payment header privately. Do not create another signature after an uncertain outcome. 7. GET /v1/reports/{ORIGINAL_IDEMPOTENCY_KEY} or MCP read_report with original read token. report_id is an evidence UUID,NOT the lookup key. Read recovery never charges. Missing/expired/wrong-owner results do not authorize a new payment. ## Results pass/fail/unverified per check with UTC observation,actual status,body hash,size,elapsed time and assertion outcomes. JSON failures distinguish missing paths,type mismatches and value mismatches without returning response values or snippets. A failed assertion is a delivered result. Unverified means evidence could not establish the assertion (e.g.timeout,redirect refusal,body limit). Private reports retained seven days. Replays/read_report return original observation,not a new test. To test a later deployment,choose a genuinely new purchase only after resolving prior uncertainty. No target auth headers,query secrets,redirects,private-network URLs,arbitrary code,security/visual/payment certification or uptime SLA. Capacity is bounded;429 means wait,not permission to pay around limits.