Checkout Flow
The checkout link is a secure, hosted payment page where customers complete their cryptocurrency payments. Each link is unique, signed, and has configurable expiration times.
Checkout URL Structure
https://yourdomain.com/checkout/{paymentId}?expires={timestamp}&signature={hmac}&redirectUrl={encoded_url}
| Component | Description |
|---|---|
paymentId | UUID of the payment |
expires | Unix timestamp when the link expires |
signature | HMAC-SHA256 signature for tamper prevention |
redirectUrl | Optional URL to redirect customer after payment |
Security
Each checkout URL includes a cryptographic signature:
signature = HMAC-SHA256(
key: APP_KEY,
message: "{paymentId}|{expires}"
)
- The signature is validated on each request
- Expired links are rejected
- Tampering with any URL component invalidates the signature
Checkout links expire based on the expiresAt parameter passed during payment creation. If not specified, the default is 1 year from creation.
Checkout Flow
stateDiagram-v2
[*] --> Loading: Customer opens checkout URL
Loading --> CurrencySelection: Payment loaded (OPEN)
CurrencySelection --> PaymentInstructions: Currency selected
PaymentInstructions --> FOUND: Funds detected on blockchain
FOUND --> RECEIVED: Confirmations met
RECEIVED --> CONFIRMED: Payment confirmed
CONFIRMED --> [*]: Redirect to merchant
Customer Experience
- Currency Selection — choose from merchant's configured cryptocurrencies
- Payment Instructions — QR code, address, and exact amount to send
- Payment Monitoring — real-time transaction detection and confirmation tracking
- Completion — redirect to merchant's success URL
Embedding
You can embed the checkout page in an iframe:
<iframe
src="https://yourdomain.com/checkout/550e8400-...?expires=...&signature=..."
width="100%"
height="600"
frameborder="0"
allow="clipboard-write"
></iframe>
Troubleshooting
| Issue | Cause | Solution |
|---|---|---|
| Checkout won't load | Invalid or expired signature | Create a new payment |
| Currency not available | Not in merchant's whitelist | Update application currency settings |
| Payment not detected | Blockchain congestion | Wait for network confirmations |