# Agent Output Verifier > Independently verify an agent's output before you pay. Independent, deterministic checks for invoices, deliverables and any structured output: structure, formats, ranges and cross-field rules, such as "line totals must equal the total," against your own requirements, written in standard JSON Schema plus optional rules. Returns pass/fail, the percentage of checks passed, fix hints, and an Ed25519-signed attestation and receipt that anyone can verify with our public key. Sellers: check your own output before you submit it, and deliver it with a signed attestation and receipt. No signup: pay per call with x402 v2, in USDC on Base or Solana. Free during launch: 1000 verification checks a day per caller through MCP and REST (POST /verify/schema and POST /verify/deliverable), then $0.02 USDC per call via x402. Agent Scores are paid only: $0.01 per lookup. Related terms: JSON Schema validation, structured output validation, LLM output validation, agent output verification, acceptance checks, signed attestation and receipt, x402. ## Endpoints - POST https://fastapi-service-5ag4.onrender.com/verify/schema — check JSON against a caller-supplied JSON Schema (draft-04 through 2020-12) plus deterministic integrity checks. Returns pass/fail, every violation, fix hints for a verify-repair-verify loop, scores showing the percentage of checks passed (schema_compliance, integrity_checks, overall), and a signed attestation with a receipt (output_hash, schema_hash, rules_hash). Optional rules and bounds are flags unless enforce_rules is set, and then they bind the result. $0.02 USDC per call. Free during launch: 1000 verification checks a day per caller through MCP and REST (POST /verify/schema and POST /verify/deliverable), then $0.02 USDC per call via x402. - POST https://fastapi-service-5ag4.onrender.com/verify/deliverable — check agent output before you accept or pay for a deliverable: the same check, request and response shape, signed receipt, price ($0.02 USDC per call) and networks as /verify/schema, listed under its own name. Free during launch: 1000 verification checks a day per caller through MCP and REST (POST /verify/schema and POST /verify/deliverable), then $0.02 USDC per call via x402. - GET https://fastapi-service-5ag4.onrender.com/score/{agent_id} — an agent_id's verification history: raw counts (verified, passed, failed, last seen) plus a recency-weighted score with a 95% confidence interval, signed. Covers /verify/schema results only; agent_id is an unauthenticated label (identity_verified is false); a statistical signal from past verification activity. Paid only: $0.01 USDC per call. - GET https://fastapi-service-5ag4.onrender.com/reputation/{agent_id} — free pass/fail call history for an agent_id, no payment required. - POST https://fastapi-service-5ag4.onrender.com/mcp — the same two operations as Model Context Protocol tools (verify_schema, get_verification_record). Free during launch: 1000 verification checks a day per caller through MCP and REST (POST /verify/schema and POST /verify/deliverable), then $0.02 USDC per call via x402. Agent Scores are paid only: $0.01 per lookup. An unpaid request that needs payment gets HTTP 402 whose body reports this caller's own remaining free allowance for today (with a reset time), going beyond a generic pointer to this page. - GET https://fastapi-service-5ag4.onrender.com/health — free liveness check. ## Payment Paid endpoints use the x402 protocol, **v2 only** (no `X-PAYMENT` header, no v1-shaped 402 body). An unpaid request receives HTTP 402, with the price and payment requirements in the `Payment-Required` response header. A paid request carries its signed payment in the `Payment-Signature` request header; a settled response carries the settlement receipt in the `Payment-Response` response header. You can pay in USDC on either network; the 402 response lists both, and the price is the same on each: - Base: USDC on eip155:8453 (mint 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913), pay to 0x42a3c399f83BCcC3b9eEf81e65954a715D54855E - Solana: USDC on solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp (mint EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v), pay to 38Fmaf3MWTR6AWPWrtrdXoqn6iqfVcUBHMFRhiUAEjFb A `fail` result is a complete, valid answer to the question asked and is charged the same as a `pass` - the work (running every check) is identical either way. Every response from a paid endpoint is also signed (Ed25519) so it can be verified independently of this service after the fact. ## Payment errors Every 402 body (REST) and every payment-related MCP tool result (in `structuredContent.payment_error`) carries the same structured shape: a stable `error_code`, a clean `message`, `charged: false`, `retryable`/`retry_after`, the current `payment_terms` (the same accepts/resource a fresh unpaid request would get), and `next_actions`. `insufficient_funds` additionally suggests any other accepted network in `next_actions`. The codes: - `no_payment`: No payment was attached to the request. - `malformed_payment`: The payment header/field failed to parse as JSON, or as base64 at all (REST only - MCP's x402/payment meta always arrives as a JSON value already). - `unsupported_payment_version`: The payment used x402 protocol version 1 (or an unrecognized version); only v2 is accepted. - `no_matching_requirements`: The payment's declared scheme, network or asset differs from every one of this call's accepted payment options. - `amount_mismatch`: The signed payment authorization is for less than the required price. - `recipient_mismatch`: The signed payment authorization pays an address other than this service's own. - `invalid_signature`: The payment authorization's signature fails to verify. - `expired_authorization`: The payment authorization's validity window has already passed, or has yet to begin. - `payment_already_used`: This exact payment (the same nonce) has already been spent. - `insufficient_funds`: The paying wallet holds less balance than this payment requires to settle on-chain. - `facilitator_unreachable`: The payment facilitator was unreachable (network/timeout). - `facilitator_error`: The facilitator rejected the payment for a reason outside this service's known set, with nothing in particular singled out as the cause. ## Versions Two separate numbers appear in responses: `verifier_version` (in every /verify/schema and /score response) names the shape and behavior of that signed receipt; the OpenAPI/agent-card top-level `version` names the service build as a whole, including changes - new search tags, documentation - that never touch a receipt's shape. They move independently, by design. ## Full details - OpenAPI schema: https://fastapi-service-5ag4.onrender.com/openapi.json - Agent Card (machine-readable discovery manifest): https://fastapi-service-5ag4.onrender.com/.well-known/agent-card.json - x402 resource-server manifest: https://fastapi-service-5ag4.onrender.com/.well-known/x402 - Worked example with real signed receipts and on-chain payment evidence: https://github.com/mglbagi/agent-output-verifier#worked-example-invoice-verification