x402 is the HTTP payment handshake. The merchant’s resource server answers an unpaid request with 402 Payment Required and a payment requirement. The client retries with a payment header. For SohoPay that header is PAYMENT-SIGNATURE, and the payload is a Protocol V2 credit voucher. This page is the shape of that handshake. The agent procedure is Payment flow. The merchant procedure is Merchant integration.

What is inside the payment

On allow, prepare_x402_payment returns VOUCHER_ISSUED and an unsigned AgentPaymentVoucher. The agent signs it with its Ed25519 workload key. The envelope the merchant receives uses x402 version 2 and scheme: "credit". The payload carries the voucher and that signature. The voucher is not an on-chain transaction. SohoSettlementV2 never checks the agent’s signature. It checks one batch attestation over every entry in settleBatch. The facilitator already checked the voucher before capture.

What the merchant advertises

The 402 requirement names the network and the asset. On staging that is eip155:84532 and the mock USDC from Environment setup. GET /api/v1/facilitator/supported publishes the same scheme, version, and asset for discovery.

What is retired

Protocol V1 sent a custodial PaymentIntent and settled with settleWithAttestation per payment. Staging does not deploy that contract. Capture rejects a V1 intent with X402_AGENT_VOUCHER_REQUIRED. Do not build a client that asks SohoPay to sign the payment.

Next steps

Payment flow

Prepare, sign, and retry.

EIP-712

The borrower signatures around the voucher.