Skip to main content

Overview

Expensify supports various payment methods for sending and receiving money, including direct bank transfers, debit cards, and the Expensify Wallet. This guide covers the core payment operations.

Payment Flow

The payment system in Expensify follows a robust pattern with optimistic updates, ensuring a smooth user experience even during network delays.

Optimistic Updates Pattern

All payment operations use Onyx optimistic updates:
  1. Optimistic Data - Updates UI immediately
  2. Success Data - Confirms the operation succeeded
  3. Failure Data - Reverts changes if the operation fails

Payment Methods

Available Payment Types

Expensify supports multiple payment methods:

Payment Method Selection

Choosing the appropriate payment method based on context:

Sending Payments

Payment Confirmation

Before sending a payment, users can select their preferred payment method through a confirmation flow.

Paying Money Requests

Handle payment of expense reports and money requests.

Invoice Payments

Handle invoice-specific payment parameters.

Receiving Payments

Setting Up for Receiving Payments

To receive payments, users must:
  1. Complete KYC verification
  2. Connect a bank account
  3. Activate the Expensify Wallet

Payment Receipt Confirmation

When a payment is received, the system automatically updates the relevant records:

Payment Status

Report Status After Payment

After a payment is processed, reports transition through different states:

Checking Payment Availability

Payment Verification

Magic Code Validation

Some payment operations require validation codes for security:

Payment Errors

Error Handling

Robust error handling ensures users are informed of payment failures:

Common Error Scenarios

  • Insufficient funds - Not enough balance in wallet or account
  • Invalid payment method - Payment method expired or invalid
  • Network errors - Temporary connectivity issues
  • Validation errors - Incorrect validation codes
  • Policy restrictions - Payment disabled by policy settings

Payment History

Track payment history through transaction records:

Best Practices

  • Always use optimistic updates for instant UI feedback
  • Implement proper error handling and rollback logic
  • Validate payment methods before processing
  • Log payment operations for audit trails
  • Use validation codes for sensitive operations
  • Never store card details in client-side storage
  • Implement rate limiting for payment attempts
  • Monitor for suspicious payment patterns
  • Show clear payment confirmation screens
  • Display payment status updates in real-time
  • Provide helpful error messages
  • Allow easy payment method switching

Reimbursements

Learn about expense reimbursement workflows

Invoices

Managing invoice payments

Bank Accounts

Connecting accounts for payments

Wallet

Managing your Expensify Wallet