Skip to main content

Refunds

Any payment you've received can be returned in full - instantly, on-chain, tied to the original payment.

Rules

RuleEnforced by
Only the recipient can refundNotRecipient
Full amount onlycontract design
Once per paymentAlreadyRefunded
Goes back to the original sendercontract design

In the app

  1. Open Refunds - you'll see every payment you've received
  2. Click Refund next to the payment
  3. Sign - if you haven't approved the gateway to move your USDC before, you'll get a one-time approval prompt first

The original payment is marked refunded everywhere: your activity, the sender's activity, and any merchant verification query.

On-chain reference

function refund(bytes32 paymentId) external;

// Check refund status
function refunded(bytes32 paymentId) external view returns (bool);

Emits PaymentRefunded(paymentId, amount).

Why full-amount only?

Refund semantics stay unambiguous: a payment is either settled or returned. For partial reimbursements, just send the amount back with a memo referencing the original payment.