SohoPay settles USDC on Base by batch. About every 60 seconds the flusher folds outstanding captures into one SohoSettlementV2.settleBatch transaction. The merchant is paid the net amount (amount - fee) to the registry payout address. The borrower’s debt increases by the billed amount. You never submit that transaction. You poll.

Poll

paymentId comes from the capture receipt and is valid immediately. Poll about every 2 seconds. The same status is available by batch job id at GET /api/v1/facilitator/settle/status/:jobId once a batch exists. Agents can poll get_settlement_status instead of the facilitator.

What each status means

CREATED and SUBMITTED are normal. An entry left pending in a failed batch can return to CREATED and be included in a later flush. Under l2_confirmations, expect CONFIRMED on the order of a few seconds after a successful receipt, with end-to-end time usually under 30 seconds once the batch is submitted. The flush interval sits in front of that. Do not treat “~1 second” as a guarantee. Available credit on the borrower updates when the entry is CONFIRMED, not when the voucher is signed.

Payout

The contract pays the ACTIVE merchant the net amount from protocol liquidity. Gas for that transaction is paid by the protocol. Your payout is net of the fee.

Next steps

Fees

How the deducted fee is calculated.

Settlement attestation

Who signs the batch.