Outgoing Transaction Flow
Your customer/platform sends funds to an external recipient.1
Create Quote
Lock in exchange rate and fees:Response:
- Quote ID
- Locked exchange rate
- Expiration time (typically ~5 minutes or greater, depending on corridor)
2
Execute Quote
Initiate the payment:Result:
- Transaction created with status
PENDING - Source account debited immediately
OUTGOING_PAYMENT.PENDINGwebhook sent
3
Processing
Grid handles:
- Currency conversion (if applicable)
- Routing to appropriate payment rail
- Settlement with destination bank/wallet
PROCESSING4
Completion or Failure
Success Path:
- Funds delivered to recipient
- Status:
COMPLETED settledAttimestamp populatedOUTGOING_PAYMENT.COMPLETEDwebhook sent
- Delivery failed (invalid account, etc.)
- Status:
FAILED failureReasonpopulatedOUTGOING_PAYMENT.FAILEDwebhook sent- Refund initiated automatically — track via the
refundobject andOUTGOING_PAYMENT.REFUND_*webhooks
Same-Currency Transfers
For same-currency transfers without quotes:Transfer-Out (Internal → External)
Transfer-In (External → Internal)
Outgoing Payment Status
A singlestatus field represents whether the transaction reached its destination:
State Diagram
Refund Object
When a payment fails or is cancelled, refunds are tracked in a dedicated object on the transaction, decoupled from the payment status:Webhooks
Outgoing payment webhooks use the formatOUTGOING_PAYMENT.<STATUS>. The webhook request body contains the full transaction resource.
Event Types
Example Payloads
- PENDING
- COMPLETED
- FAILED
- REFUND_COMPLETED
Handling Webhooks
Scenarios
- Happy Path
- Failure with Refund
- Failure with Failed Refund
- Bank Return
- Manual Cancellation
The standard successful payment flow:
OUTGOING_PAYMENT.PENDINGOUTGOING_PAYMENT.PROCESSINGOUTGOING_PAYMENT.COMPLETED
Listing Transactions
Query all transactions for a customer or date range:Failure Handling
Common Failure Reasons
When a transaction fails, a refund is initiated automatically. Track the refund via the
refund object on the transaction and OUTGOING_PAYMENT.REFUND_* webhook events. See Refund Object above.
Best Practices
Store transaction IDs for reconciliation
Store transaction IDs for reconciliation
Save transaction IDs to your database:
Handle idempotency
Handle idempotency
Use the
Idempotency-Key HTTP header for safe retries:Provide clear status messages to users
Provide clear status messages to users
Translate technical statuses to user-friendly messages: