Create instant payment links for agents.
Generate a code, share it, get paid in seconds.
No checkout. No integration. Just send and get paid.
Anyone with the link can pay — no account required, no gas.
What this is
Payment Requests let you create a one-time payment link for a specific amount.
The buyer opens it, connects their wallet, approves the payment, and funds settle instantly to your address.
No checkout flow. No merchant account. No manual wallet addresses. Just a link.
Use cases
How it works
Security: The buyer signs an EIP-3009 authorization binding the exact amount and recipient. The facilitator cannot alter the amount or redirect funds.
Example
Anyone with the link can pay. No account. No onboarding. Open, connect wallet, approve.
The code is 8 characters — human-readable, easy to embed in invoices, messages, or QR codes.
Why not just send USDC?
Share anywhere
Payment links are fully shareable — no special integration needed on the buyer side.
Paying
Buyers don't need an account. Payment page is at /pay.
Looking to redeem a one-time use code instead? Redeem Code docs · /redeem
Built-in expiration
ttl in seconds when creating the request (default: 1 hour).expired error — no payment is possible.Track status
Monitor payment completion in real time using the SSE event stream.
createdRequest was registered — link is now shareablepaidPayment confirmed on-chain — tx hash availableexpiredTTL elapsed without payment — create a new request// GET /facilitator/pay-requests/events
// Content-Type: text/event-stream
const es = new EventSource(
'https://api.relai.fi/facilitator/pay-requests/events',
{ headers: { 'X-Service-Key': 'sk_live_...' } }
);
es.onmessage = (e) => {
const { code, status, payTxHash, explorerUrl } = JSON.parse(e.data);
if (status === 'paid') {
console.log('Paid!', explorerUrl);
es.close();
}
};API reference
All endpoints require an X-Service-Key header.
/facilitator/pay-requestsCreate a new one-time payment request. Returns the 8-char code and payUrl.
/facilitator/pay-requestsList all active payment requests for your account.
/facilitator/pay-requests/:codeLook up a specific request — amount, status, expiry.
/facilitator/pay-requests/eventsSSE stream — real-time status updates when a request is paid.
curl -X POST https://api.relai.fi/facilitator/pay-requests \
-H "X-Service-Key: sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"to": "0xYourMerchantWallet",
"amount": 5.00,
"network": "base-sepolia",
"description": "Invoice #42",
"ttl": 3600
}'{
"code": "MW78SGTW",
"expiresIn": 3600,
"payUrl": "https://relai.fi/pay#MW78SGTW"
}Settlement networks
| Network | ID | Gas | Privacy |
|---|---|---|---|
| Base Sepolia | base-sepolia | Sponsored | Public on-chain |
| SKALE Base Sepolia | skale-base-sepolia | Free (SKALE gasless) | 🔒 BITE encrypted |
Error reference
not_foundRequest not foundThe code does not exist or was already consumed.
expiredRequest is no longer validThe TTL elapsed before payment. Create a new request.
already_paidCode was already usedEach code is single-use. Payment was already settled.
amount_mismatchIncorrect payment amountSigned amount does not match the request. Rejected for security.