ROOKDocs
Back to Use Cases
Web3 & Crypto Blueprint

Stablecoin-Backed Cards

Bridge on-chain liquidity to the Visa and Mastercard global payment networks. Allow users to back physical and virtual cards with USDC or USDT balances on Solana, Ethereum, Base, and Polygon, converting stablecoins to fiat Just-in-Time (JIT) at the exact millisecond of authorization.

System Architecture & Flow

JUST-IN-TIME (JIT) STABLECOIN-TO-FIAT SWIPE CONVERSION< 1800ms End-to-End
1
Card Swiped

Cardholder attempts $45.00 purchase at merchant point of sale.

2
JIT Auth Webhook

Rook requests immediate authorization approval from your wallet backend.

3
Lock Stablecoin

Your backend locks 45.00 USDC on-chain and approves webhook in < 800ms.

4
Fiat Settlement

Rook funds fiat settlement rail, confirming transaction approval to merchant.

1Register User Wallet & Issue Stablecoin Card

Link the cardholder's non-custodial wallet address or omnibus custodial vault, specifying supported settlement tokens (USDC, USDT) and network rails (Solana, Base).

POST /v1/cardsIssue Stablecoin Card
curl -X POST "https://api.sandbox.rookpayments.com/v1/cards" \
  -H "Authorization: Bearer rk_test_..." \
  -H "X-Program-ID: 7c9e6679-7425-40de-944b-e07fc1f90ae7" \
  -H "Content-Type: application/json" \
  -d '{
    "account_id": "acc_crypto_vault_01",
    "type": "virtual",
    "cardholder_name": "Satoshi Nakamoto",
    "funding_strategy": "just_in_time",
    "crypto_config": {
      "supported_assets": ["USDC", "USDT"],
      "network": "base_mainnet",
      "wallet_address": "0x71C...8976"
    }
  }'

2Handle Just-In-Time (JIT) Authorization Webhook

Verify the cardholder has sufficient available stablecoin balance, apply a cryptographic hold on their wallet, and respond with an authorization confirmation before timeout.

POST /webhook (Your Endpoint)JIT Auth Request
// Incoming webhook from Rook
{
  "event_id": "evt_jit_881920",
  "type": "card.jit_authorization.request",
  "data": {
    "card_id": "crd_stable_9921",
    "fiat_amount": 4500,
    "fiat_currency": "USD",
    "required_token_amount": "45000000",
    "token_symbol": "USDC",
    "token_decimals": 6
  }
}

// Your HTTP 200 Response within 1000ms:
{
  "approved": true,
  "hold_id": "hold_usdc_771829"
}

3Liquidate Locked Stablecoin to Fiat Settlement Pool

When the payment network clears the transaction, transfer the locked stablecoins to your program’s settlement treasury smart contract or liquidity partner.

POST /v1/crypto/settlementsRecord On-Chain Liquidation
curl -X POST "https://api.sandbox.rookpayments.com/v1/crypto/settlements" \
  -H "Authorization: Bearer rk_test_..." \
  -H "Content-Type: application/json" \
  -d '{
    "transaction_id": "txn_881920",
    "tx_hash": "0x4f82a9...3b12",
    "network": "base_mainnet",
    "amount_burned_or_transferred": "45000000",
    "status": "confirmed_on_chain"
  }'