Request a Payment
Create a payment request anyone can pay with one click - shared as a link or QR code.
Creating a request
- Open Request in the app
- Choose an amount, or tick "Let the payer choose" for tip-jar style requests
- Add a note ("What's it for?") - shown to the payer and recorded on-chain
- Pick an expiry: 24 hours, 7 days, 30 days, or never
- 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.