What You’ll Learn
This guide provides complete coverage of the payout workflow:- Creating payouts with proper authentication and device tracking
- Understanding the payout status lifecycle and the critical
pending
threshold - Managing payouts through updates, holds, and cancellations before network submission
- Handling payout-specific failures like recipient refusals and frozen accounts
- Working with multiple payment rails (ACH, Same Day ACH, RTP, FedNow)
- Testing payout scenarios using sandbox outcomes
Payouts require a
paykey
- a token representing a verified bank account. Learn about connecting bank accounts in the Bridge guide.The Payout Object
A payout represents a credit transaction with comprehensive status tracking and metadata:Core Fields
Field | Type | Description |
---|---|---|
id | string | Unique payout identifier |
paykey | string | Token for recipient’s bank account |
amount | integer | Amount in cents (25000 = $250.00) |
currency | string | Currency code (USD only) |
description | string | Statement descriptor |
payment_date | string | Processing date (YYYY-MM-DD) |
status | string | Current payment status |
status_details | object | Detailed status information |
external_id | string | Your unique reference |
processed_at | string | When sent to payment network |
trace_number | string | ACH network tracking number |
funding_ids | array | Related funding events |
Creating a Payout
All payouts require these fields. For a complete list of fields, visit the Payouts API reference.Required Parameters
Payment key for the recipient’s verified bank account. Obtained via Bridge flow.
Amount to send in cents. Must be positive. Example:
25000
for $250.00ISO 4217 currency code. Currently only
"USD"
is supported.Description appearing on bank statements. Maximum 80 characters. Be clear and recognizable.
Date to process payment (YYYY-MM-DD). Can be today or future-dated up to 90 days.
Device information for compliance tracking.
Your unique identifier for this payout. Must be unique across all payouts. Used for idempotency.
Optional Parameters
Processing configuration options.
Custom key-value pairs. Maximum 20 keys, 40 characters per key/value.
Payment Status Lifecycle
Payouts progress through the same statuses as charges:Status | Description | Can Modify? |
---|---|---|
created | Initial state, awaiting verification | ✅ Yes |
scheduled | Verified and queued for processing | ✅ Yes |
pending | Sent to payment network | ❌ No |
paid | Successfully completed | ❌ No |
failed | Declined before completion | ❌ Terminal |
reversed | Returned after completion | ❌ Terminal |
cancelled | Stopped before network submission | ❌ Terminal |
on_hold | Paused for review | ⚠️ Depends |
Critical: Once a payout reaches
pending
status, it has been submitted to the payment network and CANNOT be stopped, held, or cancelled.Important Distinction: Unlike charges which pull funds, payouts require Straddle to withdraw funds from your account BEFORE sending them to recipients. This affects funding event timing.
Status Details
Every status change includes detailed information:Payout-Specific Failure Reasons
Reason | Description | Source |
---|---|---|
payout_refused | Recipient declined the credit | bank_decline |
invalid_routing | Routing number doesn’t accept credits | bank_decline |
frozen_bank_account | Recipient account frozen | bank_decline |
risk_review | AML/compliance review required | watchtower |
amount_too_large | Exceeds payout limits | system |
Common Operations
Retrieve a Payout
Update a Payout
Update payouts increated
or scheduled
status:
Cancel a Payout
Cancel payouts before they reachpending
status:
Place on Hold
Pause a payout for review (only increated
or scheduled
status):
Release a Hold
Release user-initiated holds only:Compliance holds (
watchtower
source) cannot be released via API. They require manual review in the dashboard.Payment Rails
Straddle automatically selects the optimal payment rail based on amount, timing, and availability:Rail | Speed | Availability | Typical Use |
---|---|---|---|
ACH | 1 business days | Business days | Standard payouts |
Same Day ACH | Same business day | Business days | Standard payouts |
RTP | Seconds | 24/7/365 | Instant payouts |
FedNow | Seconds | 24/7/365 | Instant payouts |
Straddle automatically optimizes rail selection. You don’t need to specify which rail to use - we’ll choose the fastest, most cost-effective option available.
Handling Failures
When payouts fail, checkstatus_details
for specific information:
Testing in Sandbox
Usesandbox_outcome
in the config to simulate scenarios:
"paid"
- Successful payout"failed_closed_bank_account"
- Account closed"on_hold_daily_limit"
- Compliance hold"failed_payout_refused"
- Recipient refusal
Webhooks
Set up webhooks to receive real-time payout updates:Best Practices
Use Idempotency
Always include a unique
external_id
to prevent duplicate payoutsVerify Recipients
Confirm recipient details before large payouts
Monitor Limits
Track daily/monthly payout volumes against limits
Handle Returns
Implement workflows for rare payout returns