Hosted Checkout

Hosted Checkout provides a complete, secure interface for fiat-to-stablecoin payments.

Your users are redirected to Inflow's payment page where they can pay with their bank account via Open Banking, eliminating the need for custom payment UI development.

High Level Flow

The hosted checkout process follows these steps:

  1. Create Payment: You create a payment via API specifying amount, currency, and destination wallet
  2. Generate Checkout URL: Inflow returns a secure checkout URL for your user
  3. User Redirect: You redirect your user to the hosted checkout interface
  4. Bank Selection: User selects their bank from available Open Banking providers
  5. Authentication: User authenticates with their bank credentials securely
  6. Payment Authorization: User reviews and authorizes the payment
  7. Automatic Processing: Inflow collects funds, converts to stablecoins, and delivers to destination
  8. Completion: User is redirected back to your application with payment status

Create Hosted Checkout

Request

Endpoint: POST /onramp/{customerId}

curl -X POST https://api.inflowconnect.com/onramp/{customerId} \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "currency": "EUR",
    "amountInCents": 10000,
    "destinationAccountId": "acc_a1b2c3d4e5f6g7h8",
    "successUrl": "https://yourapp.com/success",
    "cancelUrl": "https://yourapp.com/cancel",
    "referenceId": "order_12345"
  }'

Required Parameters:

  • currency - Source fiat currency (currently EUR)
  • amountInCents - Payment amount in cents (minimum 150 for EUR)
  • destinationAccountId - Target wallet account ID

Optional Parameters:

  • successUrl - Redirect URL after successful payment
  • cancelUrl - Redirect URL if user cancels
  • referenceId - Your internal reference ID
  • metadata - Custom metadata object

Response

{
  "id": "onramp_x1y2z3a4b5c6d7e8",
  "customerId": "cus_a1b2c3d4e5f6g7h8",
  "status": "INITIATION",
  "source": {
    "amountInCents": 10000,
    "currency": "EUR"
  },
  "destination": {
    "accountId": "acc_a1b2c3d4e5f6g7h8",
    "walletAddress": "0x742d35Cc6634C0532925a3b8D4C9db96C4b4d8b6",
    "chain": "ethereum",
    "currency": "USDC"
  },
  "checkoutUrl": "https://checkout.inflowconnect.com/pay/onramp_x1y2z3a4b5c6d7e8",
  "expiresAt": "2024-01-16T10:30:00Z",
  "createdAt": "2024-01-15T10:30:00Z"
}

Key Response Fields:

  • id - Unique payment identifier
  • checkoutUrl - Secure URL for user to complete payment
  • status - Current payment status
  • expiresAt - Payment expiration timestamp (24 hours)

User Experience

Checkout Interface

When users access the checkoutUrl, they experience:

  1. Payment Summary - Clear display of amount, currency, and destination
  2. Bank Selection - List of available banks via Open Banking
  3. Secure Authentication - Direct connection to user's bank
  4. Payment Confirmation - Final review before authorization
  5. Real-time Updates - Progress indicators during processing
  6. Completion Page - Success/failure status with next steps

Supported Banks

Available through Open Banking integration:

  • Major European banks (SEPA Instant compatible)
  • Real-time payment processing
  • Automatic bank account verification
  • Enhanced security with bank-level authentication

Error Handling

Common Issues

ErrorCauseSolution
INVALID_DESTINATIONWallet account not registeredRegister destination account first
AMOUNT_TOO_LOWBelow €1.50 minimumIncrease payment amount
EXPIRED_PAYMENTPayment timeout (24h)Create new payment
BANK_DECLINEDUser's bank rejected transactionUser should contact their bank
INSUFFICIENT_FUNDSUser's account has insufficient balanceUser needs to fund bank account

Retry Logic

For failed payments:

  1. Check failure reason in payment status
  2. Allow user to retry with same or different bank
  3. Create new payment if previous one expired
  4. Provide clear error messages to users