Overview
Payment requests allow users to request payments from others. A pay request includes:- Recipient name (resolved to meta-address)
- Amount and currency
- Optional memo
- QR code and payment URI
- Expiry time
All pay request endpoints are public and do not require authentication.
Endpoints
Create Payment Request
Create a new payment request with QR code.Request Body
Recipient’s registered name (3-20 characters)
Payment amount (arbitrary precision string)
Currency code (1-10 characters, e.g., “SUI”, “USDC”)
Optional memo/description (max 500 characters)
Expiry duration in seconds (max 86400 = 24 hours)
Response
UUID for this payment request
Recipient name
Payment amount
Currency code
Memo (if provided)
ISO 8601 expiry timestamp
Request status (
pending)QR code image as data URL (base64-encoded PNG)
Payment URI for sharing
Example Request
Example Response
Error Responses
Get Payment Request
Resolve a payment request by ID.Path Parameters
Payment request ID (UUID)
Response
Payment request UUID
Recipient name
Payment amount
Currency code
Memo (if provided)
ISO 8601 expiry timestamp
Status:
pending, paid, expired, or cancelledRecipient meta-address (public keys only, NO Sui address)
Example Request
Example Response
Error Responses
Implementation Details
Create Flow
When creating a payment request (seeroutes/pay-requests.ts:15-76):
- Validate Input: Check recipient name, amount, currency
- Verify Recipient: Ensure recipient name is registered (check DB cache or on-chain)
- Generate Request ID: Create UUID
- Calculate Expiry: Add
expiresInSecondsto current time - Build URI: Create payment URI for QR code
- Generate QR Code: Create base64 data URL
- Store Request: Save to database with status
pending - Return Response: Return request details with QR code
Resolve Flow
When resolving a payment request (seeroutes/pay-requests.ts:80-143):
- Lookup Request: Query database by request ID
- Check Expiry: If expired, update status and return error
- Check Status: Return error if not pending
- Resolve Recipient: Fetch recipient meta-address (public keys only)
- Return Request: Return request details with recipient public keys
Payment URI Format
Payment URIs encode all request parameters:- Scan QR code to extract URI
- Parse URI parameters
- Fetch full request details via API (optional)
- Generate stealth address from recipient meta-address
- Build and submit payment transaction
Status Lifecycle
Status Values:pending: Awaiting paymentpaid: Payment confirmedexpired: Expiry time passedcancelled: Request cancelled
The API does not currently track payment confirmations. Status remains
pending unless manually updated.Privacy Considerations
The payment request:- Includes recipient name (public)
- Resolves to public keys only (no Sui address)
- Does not reveal payer identity
- Does not link request to on-chain transactions
- Generate stealth addresses locally
- Send to stealth address (not recipient’s main address)
- Remain anonymous to backend and merchant
Use Cases
Person-to-Person Payment
Point-of-Sale
Related Endpoints
- Names - Resolve names to meta-addresses
- Transactions - Send stealth payments
- Announcements - Track incoming payments
