{"openapi":"3.1.0","info":{"title":"Recta","version":"RECTA_COMMERCIAL_EVALUATION_CONTRACT_V22","summary":"Cheaper cross-chain routes for AI agents; 5 % of the verified saving, nothing if none.","description":"Recta is a preflight for AI agents that move stablecoins (and BTC) between blockchains. Before a transfer, the agent asks Recta; Recta reads every route it knows at the same chain state (Across, CCTP, Stargate, USDT0 and others) and returns the cheapest one it can prove, against the route the agent would have used anyway.\n\nCall Recta before your agent moves stablecoins or BTC from one blockchain to another (a bridge or cross-chain transfer): give it the route you would use anyway, and it answers, for free, whether a cheaper route exists at the same chain state and proves the saving. If there is none, nothing is charged.\n\nNetworks: arbitrum, arc, avalanche, base, bitcoin_l1, bnb_chain, ethereum, hyperevm, ink, linea, monad, optimism, polygon, robinhood_chain, solana_mainnet, tron_mainnet, unichain. Assets: BTC, USDC, USDC_BINANCE_PEG, USDG, USDT, USDT_BINANCE_PEG, USDT_OP_BRIDGED. The exact corridors are in the service descriptor.\n\nRecta charges exactly 5 % of the saving it verifies on chain after the agent executes its route. No saving, no charge. No prepayment and no credit: the agent signs, with each decision, a Permit2 authorization capped at `max_fee_authorization`, and Recta's collection pulls only the verified 5 % (never more than the cap) in USDC on Base; the payer's ledger shows whether each fee has been collected yet (`charged`). The evaluation itself is free. So the agent keeps at least 95 % of every saving Recta verifies, and pays nothing when there is none.\n\nEvery commercial request is signed by the EVM key of the agent's own sender address (EIP-191 personal_sign). No API key, account or secret is issued. The agent signs this text, one field per line:\n\n```\nRecta signed request v1\nmethod: POST\npath: /v1/golden-corridor/commercial-evaluations\nidempotency-key: <the Idempotency-Key header, or empty>\nbody-keccak256: <0x keccak256 of the exact body bytes, lowercase>\nissued-at: <unix seconds>\n```\n\nand sends `x-recta-signer` (its address), `x-recta-issued-at` and `x-recta-signature`. The signing instant may be at most 300 s from Recta's clock. For an evaluation, the request's `sender` must be the signer.\n\nA smart account (ERC-1271, or ERC-6492 before deployment) adds `x-recta-signer-chain: 8453` (for now a smart account signs only on Base: its `source_network` must be `base`, the network where its fee is also collected, because the same address on another chain may be another owner's account) and signs, through its owner, `Recta signed request v2`, `signer: <its address, lowercase>` and `chain-id: <that id>`, then the same five lines. Recta asks the account on Base whether the signature holds (503 `SENDER_SIGNATURE_UNVERIFIABLE`, retryable, if the chain does not answer). Its execution may go through an ERC-4337 bundle or a call to the account; the account itself must transfer exactly the committed amount. Its fee permit (the same EIP-712 Permit2 typed data) is checked by ERC-1271 on the collection network, as Permit2 will check it: the account must already be deployed there (an ERC-6492 wrapper cannot be settled).\n\nNo signing code needed: the npm package @recta/client builds, checks and signs the request for you, and @recta/mcp (`npx -y @recta/mcp`, key in RECTA_PRIVATE_KEY of a dedicated wallet, kept on your machine) is a local MCP server that does it as tools. Evaluations are free and need no funds.\n\nNo wallet yet? POST the same request body, unsigned, to /v1/golden-corridor/trial-evaluation (MCP: recta_trial_evaluation) to see whether a saving exists for your exact transfer and how much, before setting up signing. The trial names no route, stores nothing and is limited to 3 a day per address."},"servers":[{"url":"https://api.recta.build"}],"externalDocs":{"description":"Service descriptor with every JSON Schema","url":"https://api.recta.build/v1/golden-corridor/commercial-evaluations/schema"},"components":{"securitySchemes":{"rectaSigner":{"type":"apiKey","in":"header","name":"x-recta-signer","description":"The agent's EVM sender address (not a secret)."},"rectaIssuedAt":{"type":"apiKey","in":"header","name":"x-recta-issued-at","description":"Unix seconds of the signature."},"rectaSignature":{"type":"apiKey","in":"header","name":"x-recta-signature","description":"EIP-191 signature of the \"Recta signed request v1\" message (see info.description)."}},"schemas":{"CommercialEvaluationRequest":{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"urn:recta:commercial-evaluation:v12:request","title":"RECTA_COMMERCIAL_ECONOMIC_REQUEST_V1","description":"Structural form of the commercial economic request. Semantic rules (EIP-55 checksum of mixed-case addresses, priority fee ≤ max fee, value ranges, amount range and exact representability) are enforced by the service and refused with 422.","type":"object","additionalProperties":false,"required":["schema","source_network","source_asset","destination_network","destination_asset","amount","constraints","sender","recipient","baseline_provider","execution_authority"],"properties":{"schema":{"const":"RECTA_COMMERCIAL_ECONOMIC_REQUEST_V1"},"source_network":{"enum":["ethereum","arbitrum","base","optimism","linea","arc","unichain","ink","polygon","solana_mainnet","tron_mainnet","bitcoin_l1","bnb_chain","avalanche","hyperevm","monad"],"description":"With destination_network, one of the descriptor's corridors; any other pair is refused 422 CORRIDOR_NOT_SUPPORTED."},"source_asset":{"enum":["USDC","USDT","USDG","BTC","USDC_BINANCE_PEG","USDT_OP_BRIDGED","USDT_BINANCE_PEG"],"description":"The asset the corridor moves, named explicitly (never defaulted). With the networks, one of the descriptor's corridors. USDT is Tether's USDT on Ethereum and Tron and USDT0 on the other networks; USDT_OP_BRIDGED is Optimism's legacy OP-bridged USDT (0x94b0…8e58), valued as USDT; USDT_BINANCE_PEG is BNB Chain's Binance-Peg USDT (BEP-20, 0x55d3…7955, 18 decimals), valued as USDT; BTC is Bitcoin's (V11, swapped for Ethereum USDC); every figure stays in USDC atomic."},"destination_network":{"enum":["arbitrum","base","optimism","polygon","linea","arc","unichain","ink","ethereum","robinhood_chain","solana_mainnet","bnb_chain","avalanche","hyperevm","monad","tron_mainnet"]},"destination_asset":{"enum":["USDC","USDT","USDG","BTC","USDC_BINANCE_PEG","USDT_OP_BRIDGED","USDT_BINANCE_PEG"],"description":"The source asset: every corridor moves one asset end to end, but BTC, which is delivered as Ethereum USDC (V11), and Ethereum USDC towards BNB Chain, delivered as Binance-Peg USDC (`USDC_BINANCE_PEG`, 18 decimals, V14), USDT <-> Optimism's legacy OP-bridged USDT (`USDT_OP_BRIDGED`) and Ethereum USDT <-> BNB Chain's Binance-Peg USDT (`USDT_BINANCE_PEG`, 18 decimals), each one family valued at USDT's ρ."},"amount":{"type":"string","pattern":"^(?!0+(\\.0+)?$)(0|[1-9][0-9]*)(\\.[0-9]+)?$","description":"Source amount in whole units, canonical decimal, positive."},"constraints":{"type":"object","additionalProperties":false,"required":["guarantee_class","latency_class","destination_execution"],"properties":{"guarantee_class":{"enum":["COMMITTED_ENFORCED","ANY"]},"latency_class":{"enum":["SECONDS","MINUTES","FINALITY_BOUND","ANY"],"description":"The slowest delivery the agent accepts. It filters the candidates and also bounds the baseline (BIT-ECO-014): with SECONDS or MINUTES an Across baseline is bounded by its fast fill quoted at Q, and with SECONDS a CCTP fast baseline from a measured origin by the amount minus the fast fee published at Q, so a saving against them can be demonstrated. ANY and FINALITY_BOUND keep the conservative bound (a slow fill or the standard transfer may deliver the whole amount), under which these baselines rarely show a saving. Recommended: SECONDS when the agent needs the transfer within seconds."},"destination_execution":{"enum":["AGENT_CAN_EXECUTE","NONE"]}}},"sender":{"anyOf":[{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},{"type":"string","pattern":"^T[1-9A-HJ-NP-Za-km-z]{33}$"},{"type":"string","pattern":"^(bc1[qp][02-9ac-hj-np-z]{38,58}|1[1-9A-HJ-NP-Za-km-z]{25,34})$"}],"description":"The real account that signs and pays every source transaction (never a placeholder or the zero address): a 0x address, a base58 wallet from Solana, a base58check account from Tron, or a P2WPKH, P2TR or P2PKH address from Bitcoin whose confirmed outputs fund the deposit."},"recipient":{"anyOf":[{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"}],"description":"In the destination network's family: a 0x address, or a base58 public key towards Solana."},"baseline_provider":{"enum":["across","cctp_v2_standard","cctp_v2_fast","stargate_v2","relay","usdt0","usdg_oft","debridge_dln","lifi","thorchain","chainflip"],"description":"The agent's declared counterfactual slot. See the descriptor for the commercially admissible ones. With baseline_artifact (V12), the slot the agent's own transaction claims to be."},"baseline_artifact":{"type":"object","additionalProperties":false,"required":["to","calldata","value_wei","observed_at_unix"],"description":"V12, EVM source only: the source transaction the agent would sign instead of Recta's route, as its baseline. It must be the slot baseline_provider names (the descriptor's baseline.artifact.slots), from the sender, for exactly this transfer; Recta decodes and simulates it at the capture's source state, and refuses it (BASELINE_INADMISSIBLE, or a capture failure) when it is not. Its own committed floor never inflates the saving: the cost side is what the protocol quotes at Q for it.","properties":{"to":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"calldata":{"type":"string","pattern":"^0x([0-9a-f]{2})+$","minLength":10,"maxLength":49154,"description":"Lowercase hex of the transaction's input."},"value_wei":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","maxLength":78,"description":"The transaction's native value."},"observed_at_unix":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","maxLength":12,"description":"When the agent built it (unix seconds)."}}},"execution_authority":{"description":"EVM source: h, F and T. Solana source (V9): the compute-unit price cap of the agent's own burn (its compute-unit limit and signatures are fixed by Recta's burn). Tron source (V10): the agent's fee_limit ceiling in sun for each source transaction. Bitcoin source (V11): the deposit's fee rate and number of inputs ceilings.","oneOf":[{"type":"object","additionalProperties":false,"required":["headroom","source_max_fee_per_gas_wei","source_max_priority_fee_per_gas_wei"],"properties":{"headroom":{"type":"string","pattern":"^(0|[1-9][0-9]*)(\\.[0-9]{1,6})?$","maxLength":40,"description":"h: gas-limit headroom ratio, at most 6 decimals."},"source_max_fee_per_gas_wei":{"type":"string","pattern":"^[1-9][0-9]*$","maxLength":40,"description":"F: committed EIP-1559 maxFeePerGas (wei/gas)."},"source_max_priority_fee_per_gas_wei":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","maxLength":40,"description":"T: committed maxPriorityFeePerGas ceiling (wei/gas), T ≤ F."},"baseline_priority_fee_per_gas_wei":{"type":"string","pattern":"^[1-9][0-9]*$","maxLength":40,"description":"Optional, Ethereum source only: the priority fee (wei/gas, ≤ F) you would pay on your own. With it, Recta commits every source transaction at maxPriorityFeePerGas = min(T, 50000000 wei); when your declared baseline (across) is also the best route, the saving is the priority fee this saves, and its 5 % is the fee. Declaring more only raises your fee; omit it to keep T unchanged."}}},{"type":"object","additionalProperties":false,"required":["max_compute_unit_price_micro_lamports"],"properties":{"max_compute_unit_price_micro_lamports":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","maxLength":40,"description":"The burn's compute-unit price cap (micro-lamports per compute unit)."}}},{"type":"object","additionalProperties":false,"required":["max_fee_limit_sun"],"properties":{"max_fee_limit_sun":{"type":"string","pattern":"^[1-9][0-9]*$","maxLength":40,"description":"The most `fee_limit` (sun) any source transaction may set; the service checks it against Tron's own maximum."}}},{"type":"object","additionalProperties":false,"required":["max_fee_rate_sat_per_vb","max_inputs"],"properties":{"max_fee_rate_sat_per_vb":{"type":"string","pattern":"^[1-9][0-9]*$","maxLength":40,"description":"The most the deposit pays per virtual byte (whole sat/vB); every cost bound uses it, and it must reach the relay minimum at Q."},"max_inputs":{"type":"string","pattern":"^[1-9][0-9]*$","maxLength":40,"description":"The most of the sender's confirmed outputs the deposit spends; the service checks its range."}}}]},"destination_execution_authority":{"description":"Only with constraints.destination_execution AGENT_CAN_EXECUTE. The agent's own CCTP receive on the destination. EVM: executor (who sends and pays receiveMessage) and F_d (its maxFeePerGas); its cost is bounded by a declared gas cap times F_d. Solana: the fee payer and the compute-unit price cap; its cost is bounded in lamports (signature, priority fee, the used-nonce and USDC token account rents, always counted). Declaring it makes CCTP commercially admissible.","oneOf":[{"type":"object","additionalProperties":false,"required":["execution_mode","executor","max_fee_per_gas_wei"],"properties":{"execution_mode":{"enum":["SELF"]},"executor":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"max_fee_per_gas_wei":{"type":"string","pattern":"^[1-9][0-9]*$","maxLength":40},"headroom":{"type":"string","pattern":"^(0|[1-9][0-9]*)(\\.[0-9]{1,6})?$","maxLength":40,"description":"V9, from a Solana source only (and required there): h_d, the agent's own gas-limit headroom on the destination's receiveMessage."}}},{"type":"object","additionalProperties":false,"required":["execution_mode","fee_payer","max_compute_unit_price_micro_lamports"],"properties":{"execution_mode":{"enum":["SELF"]},"fee_payer":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"max_compute_unit_price_micro_lamports":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","maxLength":40}}}]}},"allOf":[{"if":{"required":["source_asset"],"properties":{"source_asset":{"const":"USDC"}}},"then":{"properties":{"destination_asset":{"enum":["USDC","USDC_BINANCE_PEG","USDT"]}}}},{"if":{"required":["source_asset"],"properties":{"source_asset":{"const":"USDT"}}},"then":{"properties":{"destination_asset":{"enum":["USDT","USDT_OP_BRIDGED","USDT_BINANCE_PEG"]}}}},{"if":{"required":["source_asset"],"properties":{"source_asset":{"const":"USDG"}}},"then":{"properties":{"destination_asset":{"enum":["USDG"]}}}},{"if":{"required":["source_asset"],"properties":{"source_asset":{"const":"BTC"}}},"then":{"properties":{"destination_asset":{"enum":["USDC"]}}}},{"if":{"required":["source_asset"],"properties":{"source_asset":{"const":"USDC_BINANCE_PEG"}}},"then":{"properties":{"destination_asset":{"enum":["USDC"]}}}},{"if":{"required":["source_asset"],"properties":{"source_asset":{"const":"USDT_OP_BRIDGED"}}},"then":{"properties":{"destination_asset":{"enum":["USDT"]}}}},{"if":{"required":["source_asset"],"properties":{"source_asset":{"const":"USDT_BINANCE_PEG"}}},"then":{"properties":{"destination_asset":{"enum":["USDT"]}}}},{"if":{"required":["baseline_provider"],"properties":{"baseline_provider":{"const":"usdt0"}}},"then":{"properties":{"source_asset":{"enum":["USDT"]}}}},{"if":{"required":["baseline_provider"],"properties":{"baseline_provider":{"const":"usdg_oft"}}},"then":{"properties":{"source_asset":{"enum":["USDG"]}}}},{"if":{"required":["baseline_provider"],"properties":{"baseline_provider":{"const":"lifi"}}},"then":{"properties":{"source_asset":{"enum":["USDC","USDT"]}}}},{"if":{"required":["source_network"],"properties":{"source_network":{"enum":["solana_mainnet"]}}},"then":{"properties":{"sender":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"execution_authority":{"required":["max_compute_unit_price_micro_lamports"]}}}},{"if":{"required":["source_network"],"properties":{"source_network":{"enum":["tron_mainnet"]}}},"then":{"properties":{"sender":{"type":"string","pattern":"^T[1-9A-HJ-NP-Za-km-z]{33}$"},"execution_authority":{"required":["max_fee_limit_sun"]}}}},{"if":{"required":["source_network"],"properties":{"source_network":{"enum":["bitcoin_l1"]}}},"then":{"properties":{"sender":{"type":"string","pattern":"^(bc1[qp][02-9ac-hj-np-z]{38,58}|1[1-9A-HJ-NP-Za-km-z]{25,34})$"},"execution_authority":{"required":["max_fee_rate_sat_per_vb"]},"baseline_provider":{"enum":["thorchain","chainflip"]}}},"else":{"properties":{"baseline_provider":{"enum":["across","cctp_v2_standard","cctp_v2_fast","stargate_v2","relay","usdt0","usdg_oft","debridge_dln","lifi"]}}}},{"if":{"required":["source_network"],"properties":{"source_network":{"enum":["solana_mainnet","tron_mainnet","bitcoin_l1"]}}},"then":{"not":{"required":["baseline_artifact"]}},"else":{"properties":{"sender":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"execution_authority":{"required":["headroom"]}}}}]}}},"paths":{"/v1/status":{"get":{"summary":"Service readiness.","responses":{"200":{"description":"Status","content":{"application/json":{}}}}}},"/v1/golden-corridor/fit":{"get":{"summary":"Unsigned, static: whether Recta covers a corridor, the providers it compares and the contracts the route may touch. Never a route, quote or saving.","parameters":[{"name":"source_network","in":"query","required":true,"schema":{"type":"string"}},{"name":"source_asset","in":"query","required":true,"schema":{"type":"string"}},{"name":"destination_network","in":"query","required":true,"schema":{"type":"string"}},{"name":"destination_asset","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Coverage","content":{"application/json":{}}},"400":{"description":"A parameter is missing or malformed.","content":{"application/json":{}}}}}},"/v1/golden-corridor/saving-odds":{"get":{"summary":"Unsigned, static: per route the agent could declare as baseline_provider, how many of Recta's recorded decisions found a saving on this corridor (counts and dates only). Never a route, winner, quote or amount; a past frequency, not a promise.","parameters":[{"name":"source_network","in":"query","required":true,"schema":{"type":"string"}},{"name":"source_asset","in":"query","required":true,"schema":{"type":"string"}},{"name":"destination_network","in":"query","required":true,"schema":{"type":"string"}},{"name":"destination_asset","in":"query","required":true,"schema":{"type":"string"}},{"name":"baseline_provider","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Saving odds","content":{"application/json":{}}},"400":{"description":"A parameter is missing or malformed.","content":{"application/json":{}}},"503":{"description":"The table of recorded decisions did not load.","content":{"application/json":{}}}}}},"/v1/golden-corridor/request-template":{"get":{"summary":"Unsigned, static: the whole commercial request body for a corridor, an amount and the route you would use, with the defaults @recta/mcp sends; the sender, the recipient and your own gas ceilings are placeholders listed in to_fill.","parameters":[{"name":"source_network","in":"query","required":true,"schema":{"type":"string"}},{"name":"source_asset","in":"query","required":true,"schema":{"type":"string"}},{"name":"destination_network","in":"query","required":true,"schema":{"type":"string"}},{"name":"destination_asset","in":"query","required":true,"schema":{"type":"string"}},{"name":"amount","in":"query","required":true,"schema":{"type":"string"}},{"name":"baseline_provider","in":"query","required":true,"schema":{"type":"string"}},{"name":"guarantee_class","in":"query","required":false,"schema":{"type":"string"}},{"name":"latency_class","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Request template","content":{"application/json":{}}},"400":{"description":"A parameter is missing or malformed.","content":{"application/json":{}}}}}},"/v1/golden-corridor/wallet-policy":{"get":{"summary":"Allowlist for an agent wallet's policy engine: networks, exact-amount approvals, contracts called and Recta's fee recipient.","responses":{"200":{"description":"Wallet policy","content":{"application/json":{}}}}}},"/v1/golden-corridor/wallet-policy/cdp":{"get":{"summary":"The same allowlist as a Coinbase CDP Policy Engine policy (account scope), never wider than the wallet policy.","responses":{"200":{"description":"CDP policy","content":{"application/json":{}}}}}},"/v1/golden-corridor/commercial-evaluations/schema":{"get":{"summary":"The commercial contract: corridors, providers, limits, schemas.","responses":{"200":{"description":"Descriptor","content":{"application/json":{}}}}}},"/v1/golden-corridor/savings-ledger":{"get":{"summary":"Savings Recta verified on external agents' executed transfers, newest first: both transaction hashes, the realized saving, Recta's 5 % fee and its basis (measured, or a declared own tip, totalled apart), checkable on chain. Public, no signature.","responses":{"200":{"description":"Savings ledger","content":{"application/json":{}}}}}},"/v1/golden-corridor/latency":{"get":{"summary":"How long a decision takes (median and p90 milliseconds inside Recta) and the share of evaluations that ended in a decision, last 7 days (null below 20). Public, no signature.","responses":{"200":{"description":"Latency","content":{"application/json":{}}}}}},"/v1/golden-corridor/commercial-evaluations":{"post":{"summary":"Before a cross-chain transfer: the cheapest provable route against the route the agent would use anyway (its baseline). Free. A saving later verified on your executed transfer is published in the public savings ledger with its transaction hashes.","security":[{"rectaSigner":[],"rectaIssuedAt":[],"rectaSignature":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommercialEvaluationRequest"}}}},"responses":{"200":{"description":"A durable decision or an abstention (see the descriptor).","content":{"application/json":{}}},"402":{"description":"An unpaid fee: the body carries the debt permit to sign.","content":{"application/json":{}}},"404":{"description":"Signed access is closed or the signature headers are missing."}}}},"/v1/golden-corridor/commercial-evaluations/{result_id}":{"get":{"summary":"Read a stored decision back.","security":[{"rectaSigner":[],"rectaIssuedAt":[],"rectaSignature":[]}],"parameters":[{"name":"result_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Decision","content":{"application/json":{}}}}}},"/v1/golden-corridor/commercial-evaluations/{result_id}/execution-artifact":{"get":{"summary":"The transactions to execute. With collection on, first an x402 v2 402 (PAYMENT-REQUIRED, scheme upto): repeat the GET with PAYMENT-SIGNATURE to authorize the fee and get the artifact.","security":[{"rectaSigner":[],"rectaIssuedAt":[],"rectaSignature":[]}],"parameters":[{"name":"result_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"PAYMENT-SIGNATURE","in":"header","required":false,"schema":{"type":"string"},"description":"x402 v2 PaymentPayload (base64 JSON) signing the 402's upto requirement."}],"responses":{"200":{"description":"Artifact","content":{"application/json":{}}},"402":{"description":"SIGNATURE_REQUIRED: x402 PAYMENT-REQUIRED header and body (Recta's fee terms and body.x402).","content":{"application/json":{}}}}}},"/v1/golden-corridor/commercial-evaluations/{result_id}/route-certificate":{"get":{"summary":"Free best-route certificate for a verified-zero decision (the declared route was already the best Recta could prove): EIP-712, signed by /v1/status commercial_evaluation.route_certificate_signer, verifiable offline.","security":[{"rectaSigner":[],"rectaIssuedAt":[],"rectaSignature":[]}],"parameters":[{"name":"result_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"ISSUED: certificate, typed_data, signature, signer","content":{"application/json":{}}},"409":{"description":"Not a verified-zero decision","content":{"application/json":{}}},"503":{"description":"Certificate key not configured yet","content":{"application/json":{}}}}}},"/v1/golden-corridor/commercial-evaluations/{result_id}/fee-authorization":{"post":{"summary":"Store the signed fee authorization (Recta's Permit2 terms, or an x402 upto PaymentPayload in the body or the PAYMENT-SIGNATURE header); returns the artifact.","security":[{"rectaSigner":[],"rectaIssuedAt":[],"rectaSignature":[]}],"parameters":[{"name":"result_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{}}},"responses":{"200":{"description":"Artifact","content":{"application/json":{}}}}}},"/v1/golden-corridor/commercial-evaluations/{result_id}/execution":{"post":{"summary":"Report the executed origin transaction; Recta verifies the realized saving.","security":[{"rectaSigner":[],"rectaIssuedAt":[],"rectaSignature":[]}],"parameters":[{"name":"result_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{}}},"responses":{"200":{"description":"Accrual","content":{"application/json":{}}},"202":{"description":"Not yet verifiable; retry.","content":{"application/json":{}}}}}},"/v1/golden-corridor/commercial-accruals/{payer}":{"get":{"summary":"The payer's fees and their collection.","security":[{"rectaSigner":[],"rectaIssuedAt":[],"rectaSignature":[]}],"parameters":[{"name":"payer","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Accruals","content":{"application/json":{}}}}}},"/v1/golden-corridor/fee-debts":{"post":{"summary":"Store the signed debt permit a 402 offered.","security":[{"rectaSigner":[],"rectaIssuedAt":[],"rectaSignature":[]}],"requestBody":{"required":true,"content":{"application/json":{}}},"responses":{"200":{"description":"Stored","content":{"application/json":{}}}}}}}}