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}
ComponentDescription
paymentIdUUID of the payment
expiresUnix timestamp when the link expires
signatureHMAC-SHA256 signature for tamper prevention
redirectUrlOptional 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

  1. Currency Selection — choose from merchant's configured cryptocurrencies
  2. Payment Instructions — QR code, address, and exact amount to send
  3. Payment Monitoring — real-time transaction detection and confirmation tracking
  4. 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

IssueCauseSolution
Checkout won't loadInvalid or expired signatureCreate a new payment
Currency not availableNot in merchant's whitelistUpdate application currency settings
Payment not detectedBlockchain congestionWait for network confirmations

Next Steps