Skip to main content

Request a Payment

Create a payment request anyone can pay with one click - shared as a link or QR code.

Creating a request

  1. Open Request in the app
  2. Choose an amount, or tick "Let the payer choose" for tip-jar style requests
  3. Add a note ("What's it for?") - shown to the payer and recorded on-chain
  4. Pick an expiry: 24 hours, 7 days, 30 days, or never
  5. Create - you'll get a /pay/… link and a QR code

Paying a request

The payer opens the link, connects a wallet, and pays:

  • Fixed-amount requests - the contract enforces the exact amount; anything else reverts with AmountMismatch
  • Open requests - the payer types the amount
  • Expired requests - the contract rejects payment after expiry

A request can be fulfilled exactly once. Once paid, the request stores the resulting paymentId - one click from invoice to receipt.

Cancelling

Only the requester can cancel, and only while unfulfilled. Cancelled requests can't be paid.

On-chain reference

function createRequest(
uint256 amount, // 0 = payer chooses
uint256 expiresIn, // seconds; 0 = never expires
string calldata memo
) external returns (bytes32 requestId);

function fulfillRequest(
bytes32 requestId,
uint256 amount,
string calldata memo
) external returns (bytes32 paymentId);

function cancelRequest(bytes32 requestId) external;
For invoices

Put your invoice number in the memo and a 7-day expiry on the request. When it's paid, the RequestFulfilled event links your invoice to the settled payment automatically.