stripe-treasury
SKILL.md
Stripe Treasury
Build embedded financial services with stored-value accounts, money movement, card issuing, and crypto capabilities.
Rule Priority Table
Capability Overview
Treasury Platform (requires Stripe Connect)
│
├─ Financial Accounts (stored-value wallets)
│ ├─ Receive funds (ACH, wire, internal)
│ ├─ Send funds (ACH, wire, internal)
│ └─ Hold balances in USD
│
├─ Issuing (cards funded from financial accounts)
│ ├─ Virtual cards (instant)
│ ├─ Physical cards (shipped)
│ └─ Spending controls & real-time authorization
│
├─ Crypto Onramp (fiat → crypto)
│ └─ Embedded widget for crypto purchase
│
└─ Compliance
├─ FDIC pass-through deposit insurance
├─ Required disclosures and terminology
└─ 5-year record retention
Prerequisites
Treasury requires Stripe Connect. Your platform must:
- Be an approved Treasury platform (apply via Stripe dashboard)
- Use Connect with connected accounts
- Financial accounts are created per connected account
Quick Start: Create Financial Account
// 1. Create connected account with treasury capability
const account = await stripe.accounts.create({
type: 'custom',
country: 'US',
capabilities: {
treasury: { requested: true },
card_issuing: { requested: true },
},
});
// 2. Create financial account with all needed features
const fa = await stripe.treasury.financialAccounts.create(
{
supported_currencies: ['usd'],
features: {
card_issuing: { requested: true },
deposit_insurance: { requested: true },
financial_addresses: { aba: { requested: true } },
inbound_transfers: { ach: { requested: true } },
intra_stripe_flows: { requested: true },
outbound_payments: {
ach: { requested: true },
us_domestic_wire: { requested: true },
},
outbound_transfers: {
ach: { requested: true },
us_domestic_wire: { requested: true },
},
},
},
{ stripeAccount: account.id }
);
Money Movement Quick Reference
| Direction | Method | Object | Speed | Use Case |
|---|---|---|---|---|
| Inbound | ACH pull | InboundTransfer |
2-3 days | Customer funds own account |
| Inbound | ACH push | ReceivedCredit |
When received | External party sends funds |
| Inbound | Wire push | ReceivedCredit |
Same day | External party sends funds |
| Inbound | Stripe balance | Payout | 2 hours | Payments revenue to FA |
| Outbound | ACH (third party) | OutboundPayment |
1-2 days | Pay vendors/customers |
| Outbound | Wire (third party) | OutboundPayment |
Same day | Urgent vendor payments |
| Outbound | ACH (self) | OutboundTransfer |
1-2 days | Withdraw to own bank |
| Outbound | Wire (self) | OutboundTransfer |
Same day | Urgent withdrawal |
Send Money (Outbound Payment)
const payment = await stripe.treasury.outboundPayments.create(
{
financial_account: 'fa_xxx',
amount: 50000,
currency: 'usd',
destination_payment_method: 'pm_xxx',
description: 'Invoice #1234 payment',
},
{ stripeAccount: 'acct_xxx' }
);
Card Issuing Quick Start
// Create cardholder
const cardholder = await stripe.issuing.cardholders.create(
{
name: 'Jenny Rosen',
email: 'jenny@example.com',
type: 'individual',
billing: {
address: { line1: '123 Main St', city: 'SF', state: 'CA', postal_code: '94111', country: 'US' },
},
},
{ stripeAccount: 'acct_xxx' }
);
// Create virtual card with spending controls
const card = await stripe.issuing.cards.create(
{
cardholder: cardholder.id,
currency: 'usd',
type: 'virtual',
spending_controls: {
spending_limits: [{ amount: 100000, interval: 'monthly' }],
},
},
{ stripeAccount: 'acct_xxx' }
);
Critical Webhooks
| Event | Action |
|---|---|
treasury.financial_account.features_status_updated |
Check feature activation |
treasury.inbound_transfer.succeeded |
Credit user balance in your app |
treasury.outbound_payment.posted |
Mark payment as sent |
treasury.outbound_payment.returned |
Handle return, restore funds |
treasury.received_credit.created |
Handle incoming funds |
treasury.received_debit.created |
Alert user of external debits |
issuing_authorization.request |
Real-time approve/decline (2s timeout) |
issuing_authorization.created |
Monitor webhook health |
issuing_card.created |
Provision card in your UI |
Compliance Quick Reference
| DO | DO NOT |
|---|---|
| "Financial account" | "Bank account" |
| "Eligible for FDIC pass-through insurance" | "FDIC insured" |
| Disclose bank partner name | Hide bank partner name |
| Present ToS agreements separately | Bundle all agreements |
| Retain records for 5 years | Delete records early |
| Submit marketing for pre-approval | Publish unapproved materials |
References
- references/financial-accounts.md - Account lifecycle, features, balances, closing accounts
- references/money-movement.md - ACH, wire, internal transfers, test helpers, timing reference
- references/financial-addresses.md - ABA routing, receiving funds, address lifecycle, bank details UI
- references/issuing.md - Card creation, spending controls, real-time authorization, disputes, digital wallets
- references/crypto-onramp.md - Fiat-to-crypto widget, session management, React component
- references/compliance.md - KYC, FDIC insurance, marketing rules, record keeping, legal agreements
- references/transactions.md - Transaction and TransactionEntry objects, reconciliation, balance reporting
Weekly Installs
3
Repository
zef-computers/driversFirst Seen
Feb 24, 2026
Security Audits
Installed on
gemini-cli3
codex3
cursor3
opencode3
qoder2
codebuddy2