Bank Accounts & Custody
Core Endpoints
Bank Account Operations (Custody)
Create and manage Bakkt bank accounts where fiat is held:
Create Account
POST /user/bank-account/bakkt
Create a Bakkt bank account in EUR, GBP, or USD. Returns Virtual IBAN/account details.
List Accounts
GET /user/bank-account/bakkt
View all Bakkt accounts for a user with balances and details.
Get Details
GET /user/bank-account/bakkt/{uuid}
Get specific account with IBAN, BIC, account number, routing number.
Get Balance
GET /user/bank-account/bakkt/{uuid}/balance
View current balance and available funds for an account.
Info: Account Statements: For PDF statements and conversion history, see the Stablecoin API.
Supported Currencies & Regions
Account Creation Currencies
| Currency | Virtual IBAN | Account Type | Use Cases |
|---|---|---|---|
| EUR | ✅ Yes | SEPA | Europe-wide deposits and payouts |
| GBP | ✅ Yes | FPS | UK fast payments |
| USD | ✅ Yes (Corporate) | ACH | US domestic payments |
| NGN | ✅ Yes | Local | Nigeria operations |
Payout Currencies (via Beneficiaries)
Supported Currencies:
- EUR (SEPA - same day to 1 business day)
- GBP (FPS - same day)
- USD (ACH - 2-3 business days)
- NGN (Nigeria) - 1 business day
Note: International Payouts: For sending to other currencies (PKR, INR, TRY, etc.), use the Stablecoin API third-party off-ramp feature.
Money IN (Deposits)
Bank Transfer
User deposits to their Bakkt account:
// 1. Create Bakkt bank account
const account = await bakkt.createBankAccount(sessionId, {
currency: 'EUR'
});
// 2. Display account details to user
console.log('Deposit to this account:');
console.log('IBAN:', account.iban);
console.log('BIC:', account.bic);
console.log('Account Name:', 'Bakkt - User Name');
// 3. User transfers from their bank
// (External - user does this in their banking app)
// 4. Fiat appears in Bakkt account (custody)
// Monitor via webhook: OUTSIDE_TRANSFER_RECEIVEDACH Pull (Plaid)
Instant account linking and ACH debit:
Info: ACH Pull is only available for USD accounts.
// 1. Initiate Plaid Link
const payment = await bakkt.createOpenBankingPayment(sessionId, {
amount: 1000,
currency: 'USD'
});
// 2. User completes Plaid flow
// (Links their bank account securely)
// 3. ACH debit initiated
// Funds arrive in Bakkt account in 2-3 business daysInfo: For detailed ACH Pull via Plaid integration, see the Payments & Transfers guide.
Bakkt Bank Account Details
When you create a Bakkt bank account, users get real banking details:
EUR (SEPA)
Virtual IBAN in Malta or Europe
{
"uuid": "account-uuid",
"currency": "EUR",
"iban": "MT84BAKK00000012345678901",
"bic": "BAKKMTMT",
"bank_country": "MT",
"status": "ACTIVE"
}Users can receive SEPA transfers from any European bank.
GBP (UK)
UK Account Number + Sort Code
{
"uuid": "account-uuid",
"currency": "GBP",
"account_number": "12345678",
"sort_code": "040004",
"bank_country": "GB",
"status": "ACTIVE"
}Users can receive FPS (Faster Payments) transfers.
USD (US)
Account Number + ABA Routing
{
"uuid": "account-uuid",
"currency": "USD",
"account_number": "123456789",
"routing_number": "026009593",
"bank_country": "US",
"status": "ACTIVE"
}Receive ACH and wire transfers.
NGN (Nigeria)
Nigerian Account Details
{
"uuid": "account-uuid",
"currency": "NGN",
"account_number": "1234567890",
"bank_code": "058",
"bank_country": "NG",
"status": "ACTIVE"
}Receive local Nigerian bank transfers.
Complete Example: Operating Account
Set up a complete fiat operating account for a user:
// === SETUP (One-time) ===
// 1. Create user (Onboarding API)
const user = await bakkt.onboarding.createUser({
first_name: 'Alice',
last_name: 'Smith',
email: '[email protected]',
country: 'US',
target_address: '0x...'
});
const session = await bakkt.onboarding.authenticate(user.user_uuid);
// 2. Create Bakkt USD account (Accounts API)
const account = await bakkt.payments.createBankAccount(session.session_id, {
currency: 'USD'
});
console.log('User account created:');
console.log('Account:', account.account_number);
console.log('Routing:', account.routing_number);
// === MONEY IN ===
// Option A: User deposits from their bank
// (They transfer to account.account_number)
// Option B: ACH pull via Plaid (USD accounts only)
const achPull = await bakkt.payments.initiateACHPull(session.session_id, {
amount: 5000,
linked_account: 'plaid-account-id'
});
// === MONEY OUT ===
// 3. Add beneficiary for payouts
const beneficiary = await bakkt.payments.createBeneficiary(session.session_id, {
first_name: 'John',
last_name: 'Doe',
beneficiary_country: 'US',
account_details: {
currency: 'USD',
account_number: '987654321',
bank_code: '026009593'
}
});
// 4. User sends payment to beneficiary
// (Via your UI - debits Bakkt account, credits beneficiary)
Corporate Accounts
All endpoints have corporate variants:
/corporate/{corporate_uuid}/bank-account/bakkt/*
/corporate/{corporate_uuid}/token-preferences
Use Cases:
- Company treasury accounts
- Employee payout accounts
- Multi-currency operations
- Corporate expense management
Next Steps
Payments & Transfers
Learn about beneficiaries, money movement, and ACH operations
Advanced Features
Exchange rates, webhooks, compliance, and testing
API Reference
Explore all endpoints with interactive examples
Stablecoin API
Convert between fiat and stablecoins
Updated about 2 months ago
