Transaction States
Transactions progress through several states from creation to completion:Status Descriptions
| Status | Description | Next State | Actions Available |
|---|---|---|---|
| PENDING | Transaction created, awaiting processing | PROCESSING, FAILED | Monitor status |
| PROCESSING | Payment being routed and settled | COMPLETED, FAILED | Monitor status |
| COMPLETED | Successfully delivered to recipient | Terminal | None (final state) |
| FAILED | Transaction failed, funds refunded if applicable | Terminal | Create new transaction |
| REJECTED | Rejected by recipient or compliance | Terminal | None (final state) |
| REFUNDED | Completed transaction later refunded | Terminal | None (final state) |
| EXPIRED | Quote or payment expired before execution | Terminal | Create new quote |
Outgoing Transaction Flow
Your customer/platform sends funds to an external recipient.Step-by-Step
1
Create Quote
Lock in exchange rate and fees:Response:
- Quote ID
- Locked exchange rate
- Expiration time (1-5 minutes)
2
Execute Quote
Initiate the payment:Result:
- Transaction created with status
PENDING - Source account debited immediately
OUTGOING_PAYMENTwebhook sent
3
Processing
Grid handles:
- Currency conversion (if applicable)
- Routing to appropriate payment rail
- Settlement with destination bank/wallet
PROCESSINGWebhook: OUTGOING_PAYMENT with updated status4
Completion or Failure
Success Path:
- Funds delivered to recipient
- Status:
COMPLETED settledAttimestamp populated- Final
OUTGOING_PAYMENTwebhook sent
- Delivery failed (invalid account, etc.)
- Status:
FAILED failureReasonpopulated- Funds automatically refunded to source account
- Final
OUTGOING_PAYMENTwebhook sent
Webhook Payloads
On Creation (PENDING):Same-Currency Transfers
For same-currency transfers without quotes:Transfer-Out (Internal → External)
Transfer-In (External → Internal)
Monitoring Transactions
Via Webhooks (Recommended)
Subscribe to transaction webhooks for real-time updates:Via Polling (Backup)
Query transaction status periodically:Listing Transactions
Query all transactions for a customer or date range:Failure Handling
Common Failure Reasons
| Failure Reason | Description | Recovery |
|---|---|---|
QUOTE_EXPIRED | Quote expired before execution | Create new quote |
QUOTE_EXECUTION_FAILED | Error executing the quote | Create new quote |
INSUFFICIENT_BALANCE | Source account lacks funds | Fund account, retry |
TIMEOUT | Transaction timed out | Retry or contact support |
Best Practices
Always use webhooks for status updates
Always use webhooks for status updates
Don’t rely solely on polling:
Store transaction IDs for reconciliation
Store transaction IDs for reconciliation
Save transaction IDs to your database:
Handle idempotency
Handle idempotency
Use idempotency keys for safe retries:
Provide clear status messages to users
Provide clear status messages to users
Translate technical statuses to user-friendly messages: