{"criteria_id":"payer-preflight/v1","criteria_revision":"1.0.0","family":"payer-preflight/v1","family_note":"Family payer-preflight/v1 (FIX-CANDIDATES §C): the brief pins the family id payer-preflight/v1 as this build's criteria id (Sec. C5 names no separate criteria id) — recorded as an interpretation in REGISTRY.md.","op":"quote","ops_not_offered":[],"corpus":{"id":"true-cost-corpus/v1","sha256":"f4e5760c987581bd37160880ec340d6e1c99769c6cb134ada19933f9a1364c06"},"corpus_pin_definition":"The corpus pin is the SHA-256 of the corpus's canonical serialization (the corpus object excluding its sha256 field), computed and verifiable by the published harness (harness.mjs). Expected outputs inside corpus cases are derived from the criteria text by an independent implementation in gen-corpus.mjs (never the engine's code path), and each case labels its provenance (constructed from on-disk fleet records vs synthetic).","price":{"usdc_units_per_call":10000,"label":"$0.01","basis":"per quote"},"free_tier":{"per_day":100,"min_interval_ms":5000,"on_exhaustion":"402"},"input_contract":{"body":"One JSON request body: { quote, caller? (free pre-check only) }. quote is the price + facilitator + scheme submission under the published input contract.","caps":{"body_bytes":262144,"seller_price_micro":1000000000000,"leg_count":100},"over_cap":"A request body over 262,144 bytes is a free pre-gate refusal naming the cap.","validation":"The submission is validated FREE, before any payment: shape, per-field shape rules under the published malformed rule. A malformed submission fails free and never consumes a payment. The quote itself is computed only after payment verification (or a verified-marker resume)."},"input_contract_text":"Input contract: the request body is one JSON object { quote, caller? (free pre-check only) }. quote is one JSON object: seller_price_micro (REQUIRED integer, 0 to 1,000,000,000,000 USDC micro-units — the seller's per-call price in atomic units; amounts carry no in-band decimals, FRICTION-MAP friction 07, so the price is submitted in micro-units, never as a decimal string); facilitator (REQUIRED string naming the facilitator exactly as the published fee-model table names it, lowercase; the table is closed — a facilitator string with no row in the table is a valid submission whose quote is MODEL-NOT-PUBLISHED); scheme (REQUIRED, one of exact / batch-settlement / upto — a closed list); leg_count (the number of on-chain legs this call consumes: for exact it is 1 and an explicit value must be 1; for batch-settlement / upto it is REQUIRED, an integer 1 to 100 — the legs vary by facilitator and batch shape, PayAI's record counting deposit + claim + refund each, so the caller states them and the service never assumes them); cdp_monthly_tx_position (REQUIRED for facilitator cdp only: the number of on-chain transactions the seller has already settled through CDP in the current month BEFORE this call, an integer >= 0 — the CDP free tier is positional, so without the position the fee leg cannot be computed from published data; for other facilitators the field is accepted and ignored, noted in the quote's factors).","malformed_rule":"Malformed submissions (named FREE refusals, before any payment): body or quote missing or not an object (quote_required); seller_price_micro missing (seller_price_required) or not an integer, negative, or over the published cap of 1,000,000,000,000 (seller_price_malformed); facilitator missing, not a string, empty, or over 64 characters (facilitator_required); scheme missing (scheme_required) or not one of exact / batch-settlement / upto (scheme_unsupported); leg_count present but not an integer 1 to 100 (leg_count_malformed); batch-settlement or upto without a leg_count (leg_count_required); exact with a leg_count other than 1 (leg_count_scheme_mismatch); facilitator cdp without cdp_monthly_tx_position (cdp_monthly_position_required) or with a position that is not an integer >= 0 (cdp_monthly_position_malformed). A malformed submission fails free and never consumes a payment.","computation_rule":"Computation: the price leg is the submitted seller price, once per call. The fee leg is computed ONLY under a published model row: for cdp, charged legs = the legs whose monthly positions (position ... position+leg_count-1) are >= 1,000, fee per charged leg 1,000 micro-units, fee leg = charged legs x 1,000, fee status FREE-TIER-ZERO when charged legs = 0 else MODEL-FEE, and the all-in total = price leg + fee leg. For payai the published model is a daily-refreshed rate this service does not read: fee status MODEL-ONLY-NOT-A-LIVE-NUMBER, the model is printed, and no fee leg and no total is computed. For any other facilitator: fee status MODEL-NOT-PUBLISHED, no fee leg and no total. All arithmetic is exact integer arithmetic in USDC micro-units; the CDP fee is a whole number of micro-units per charged leg, so no rounding ever occurs and totals are exact sums of the printed legs. The total is an arithmetic sum of printed legs, never a grade; there is no composite score.","fee_model_table":[{"facilitator":"cdp","model_id":"cdp-flat-per-tx/1000-free-then-0.001","status":"PUBLISHED","free_tier_txs_per_month":1000,"fee_per_tx_micro":1000,"rule":"First 1,000 on-chain transactions per month free; then $0.001 (1,000 USDC micro-units) per on-chain transaction; verification always free. exact = one on-chain transaction per payment; batch-settlement / upto consume one transaction per on-chain leg counted in leg_count. Charged legs for a call = the legs whose monthly positions (cdp_monthly_tx_position ... position+legs-1) are >= 1,000.","source":"CDP Facilitator docs — pricing, docs.cdp.coinbase.com/x402/seller/facilitator, as held on disk in research_notes/402-frictions-2026-11-03/ (lane-1 F-13/F-26; lane-2 facilitator-economics note)","vintage":"2026-11-02 (the docs' updated date in the on-disk record; record crawled 2026-11-03)"},{"facilitator":"payai","model_id":"payai-credit-model/gas-plus-30-refreshed-daily","status":"PUBLISHED-MODEL-ONLY","credit_value_micro":1000,"rule":"Credit model: 1 credit = $0.001; the per-network rate = on-chain gas + 30%, refreshed daily; batch-settlement / upto priced per on-chain leg (deposit + claim + refund each count). The rate is daily-refreshed and no public live rate read is established for this service — this service reports the model, never a live number, and computes no fee and no total for this facilitator.","source":"PayAI pricing docs, github.com/payainetwork/docs — x402/facilitators/pricing.mdx, as held on disk in research_notes/402-frictions-2026-11-03/ (lane-1 F-13/F-26)","vintage":"2026-11-03 (the crawled date in the on-disk record)","historical_observations":"Labelled historical observations, NOT the current rate: the pricing docs' own Solana example is 1.33 credits (about $0.00133); our fleet measured about 1.45 credits (about $0.00145) per settle on 2026-10-12; the 402 Open Book's PayAI settlement cost 1.25 credits on 2026-11-01. A quote never uses these as the rate."}],"schemes":["exact","batch-settlement","upto"],"fee_statuses":["FREE-TIER-ZERO","MODEL-FEE","MODEL-ONLY-NOT-A-LIVE-NUMBER","MODEL-NOT-PUBLISHED"],"payai_model_line":"PayAI's fee is a credit model, not a fixed number: 1 credit = $0.001; the per-network rate = on-chain gas + 30%, refreshed daily. This quote reports the MODEL, not a live number — no public live rate read is established for this service. All-in cost per call = seller price + leg_count x (the day's PayAI network rate in credits x $0.001). No fee number and no total is computed.","not_published_line":"MODEL-NOT-PUBLISHED: no published fee model for this facilitator is on record in this service's published fee-model table. No fee has been invented, estimated, or interpolated, and no all-in total is computed. All-in cost per call = seller price + the facilitator's fee under its own (unpublished-to-this-service) terms.","cdp_model_line":"CDP fee computed under the published model printed in this quote: first 1,000 on-chain transactions per month free, then $0.001 (1,000 USDC micro-units) per charged on-chain leg, at the monthly position you submitted.","rounding_rule":"All arithmetic is exact integer arithmetic in USDC micro-units. The CDP fee is a whole number of micro-units per charged leg (1,000), so no rounding ever occurs; totals are exact sums of the printed legs. Where no number is published (PayAI's daily rate; an unpublished facilitator), nothing is computed — nothing is rounded because nothing is estimated.","verdict_grammar":{"line":"TRUE COST — total: <all-in total in USDC micro-units, or MODEL-ONLY / MODEL-NOT-PUBLISHED> · fee status: <fee status> · model: <fee model id or none> — <check-end UTC>","vocabulary":"The line carries the arithmetic total where the published model yields one, the fee status, and the model id. There is no composite score, grade, or band anywhere in this op."},"free_precheck":"The free pre-check (POST /precheck) validates the submitted quote request under the published contract and returns assessability ONLY: the common signed fields, whether the set is assessable (or the free refusal naming the failure), the submission facts (facilitator, scheme, leg count, whether a published model row exists for the facilitator), and NO fee leg and NO total. Free allowance: 100 per day per caller wallet, minimum interval 5,000 ms, 402 on exhaustion.","custody":{"construction":"In-memory processing within a single request lifetime; the submitted request persists nowhere, on any path including errors.","ledger_closed_fields":["payer wallet","timestamp/day","price (USDC units) with the CAD fair-market-value block (rate, rate date, basis, cad_pending, refund)","payment tx id + Solana fee (lamports)","criteria version","verdict line","facilitator","scheme","fee status","house flag"],"ledger_note":"The ledger list above is closed: adding a field is a criteria/handling version change. The ledger NEVER carries any submitted price value beyond the service's own price field (price_usdc_units is this quote service's own $0.01 charge), and never any free-form submitted text.","errors":"Error handling is closed-form: static strings plus numeric facts only (lengths against caps, rule ids). No error path interpolates any part of a submitted request beyond the published refusal codes."},"forbidden":"Forbidden in every surface of this op (report, pre-check, errors, ledger, metrics): any composite score or grade; any fee number or total for the PayAI model or for a facilitator with no published model on record; any invented, estimated, or interpolated fee; any fee model not in the published table with its source and vintage printed; any fetched or chain-read data (this op fetches nothing and reads no chain).","boundary_statement":"Boundary vs C3 Facilitator Fit Check (same family, payer-preflight/v1): C3 reads a facilitator's public /supported and reports what the facilitator serves, as published. This op reads nothing live: it applies the facilitator's published fee model from the on-disk record to a submitted price + scheme and prints the arithmetic. Boundary vs C4 Funding & Gas Readiness (same family): C4 checks whether a wallet can pay a challenge; this op prices what paying costs. The fee itself is the facilitator's business model (FRICTION-MAP friction 36, information leg) — no service removes it; this service makes it visible before the call.","honesty_line":"Every quote carries the fee model's source and vintage date, printed in full. PayAI's daily-refreshed rate is reported as the model, not a live number. A facilitator with no published model on record returns MODEL-NOT-PUBLISHED — a fee is never invented, estimated, or interpolated. This op fetches nothing and reads no chain; its fee models come only from the on-disk records named in each model row.","retention":"Submitted quote requests are processed in memory only and are never stored — not in KV, not in logs, not in the payments ledger, not in metrics, and not in error records. The paid report carries the submitted price, facilitator, scheme and leg count and the computed legs, because that report is the delivery the buyer paid for. The payments ledger records only the closed field list published in the criteria. Because nothing is kept, a paid retry re-submits the request.","payment_includes":"$0.01 per quote. The payment includes: one true-cost quote for the price + facilitator + scheme you submit — the seller price leg, the facilitator fee leg computed under the facilitator's published fee model exactly as printed in the criteria (source and vintage date printed on every quote), and the per-leg count for batch/upto schemes — returned as one signed report with all legs printed. Where the facilitator's published model is a daily-refreshed rate (PayAI), the quote reports the model, not a live number, and computes no total. Where no published model is on record for the facilitator, the quote returns MODEL-NOT-PUBLISHED and computes no fee and no total. A free pre-check validates the submission's shape before any payment and returns no fee and no total. The submitted quote request is processed in memory only and is never stored; the payments ledger records only the payer, the time, the price, the facilitator, the scheme, the fee status, and the verdict line.","kill_line":"Kill line (M-30 / C5, under the operator's 2026-11-03 build-bank-hold doctrine): build, bank, and hold; judged at the fleet's periodic reviews. There is NO demand kill line for this item. Day-0 = first outside paid settle (accounting only; house proofs never count). Tripwires, all stop-and-review: (1) refunds >5% in any 30-day window; (2) free use >10x paid use; (3) a wrong quote — a fee or total not derivable from the published model row it prints (the error enters the corpus first as a regression case, corrected rules publish as a new criteria version, the corpus re-passes at 100% before serving resumes; issued reports are never amended); (4) any fee number or total ever printed for the PayAI model or for a MODEL-NOT-PUBLISHED facilitator; (5) any composite score on any surface.","never":"This op never fetches any URL; never reads the chain; never stores a submitted request; never computes a composite score; never invents, estimates, or interpolates a facilitator fee; never prints a live PayAI rate.","service":"true-cost","version":"1.0.0","endpoints":{"criteria":"GET /criteria (free)","precheck":"POST /precheck (free, input validation + assessability only: no fee, no total)","quote":"POST /quote (paid, $0.01 per quote: signed true-cost quote with all legs printed)","metrics":"GET /metrics","not_offered":"Any other POST path answers NOT COVERED — this worker serves op quote only."}}