Create customer withdrawal bank
Adds a new bank account for withdrawals. The customer must be KYC verified. **Recipient Types** - `CUSTOMER` - The customer themselves. Auto-approved if the beneficiary name matches the customer's verified name (KYC name for individuals, organization name for corporates). Returns 400 on name mismatch. - `OTHER_INDIVIDUAL` - A third-party individual. Requires manual approval. - `OTHER_BUSINESS` - A third-party business. Requires manual approval. If `recipientType` is not specified, it defaults to `CUSTOMER`. **Address** For `CUSTOMER` recipients, `addressLine1` and `city` are optional. If omitted, the address is auto-resolved from the customer's KYC data (individuals) or stored business address (corporates). You can check the available address via `GET /customers/{customerId}/kyc/address`. For `OTHER_INDIVIDUAL` and `OTHER_BUSINESS`, address fields are required. **Validation** - IBAN and BIC formats are validated automatically - For CUSTOMER: beneficiary name is checked against the customer's verified identity (individual) or organization name (corporate)
Adds a new bank account for withdrawals. The customer must be KYC verified.
Recipient Types
CUSTOMER- The customer themselves. Auto-approved if the beneficiary name matches the customer's verified name (KYC name for individuals, organization name for corporates). Returns 400 on name mismatch.OTHER_INDIVIDUAL- A third-party individual. Requires manual approval.OTHER_BUSINESS- A third-party business. Requires manual approval.
If recipientType is not specified, it defaults to CUSTOMER.
Address
For CUSTOMER recipients, addressLine1 and city are optional. If omitted, the address is auto-resolved from the customer's KYC data (individuals) or stored business address (corporates). You can check the available address via GET /customers/{customerId}/kyc/address. For OTHER_INDIVIDUAL and OTHER_BUSINESS, address fields are required.
Validation
- IBAN and BIC formats are validated automatically
- For CUSTOMER: beneficiary name is checked against the customer's verified identity (individual) or organization name (corporate)
Authorization
bearerAuth Organization API key obtained from PropelAuth
In: header
Path Parameters
Unique identifier of the customer
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X POST 'https://compose.finance/api/v2/customers/{customerId}/withdrawal/banks' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{ "beneficiaryName": "JOHN DOE", "iban": "DE89370400440532013000", "bic": "COBADEFFXXX", "addressLine1": "123 Main Street", "city": "Berlin" }'{
"id": "bank_123abc",
"customerId": "550e8400-e29b-41d4-a716-446655440001",
"beneficiaryName": "JOHN DOE",
"iban": "DE89370400440532013000",
"bic": "COBADEFFXXX",
"addressLine1": "123 Main Street",
"city": "Berlin",
"country": "DE",
"currency": "EUR",
"recipientType": "OTHER_INDIVIDUAL",
"recipientEmail": "[email protected]",
"notificationEnabled": false,
"status": "ACTIVE",
"createdAt": "2024-01-15T10:30:00.000Z",
"wallets": [
{
"id": "wallet_123abc",
"address": "0x1234567890abcdef1234567890abcdef12345678",
"currency": "usdc",
"chain": "base",
"enabled": true,
"createdAt": "2024-01-15T10:30:05.000Z",
"updatedAt": "2024-01-15T10:30:05.000Z",
"instructions": "Send USDC to this address to automatically receive funds in your bank account. Minimum: 5 USDC."
}
]
}{
"error": "Invalid IBAN format"
}{
"error": "Unauthorized - Invalid or missing API key or session"
}{
"error": "Customers feature is not enabled for your organization"
}{
"error": "Customer not found"
}Create customer withdrawal POST
Creates a withdrawal to the customer's registered bank account. **Prerequisites** API withdrawals must be enabled for your organization. If not enabled, this endpoint returns `403 Forbidden`. Contact support to enable API withdrawals. **Execution Modes** 1. **Automatic Execution** (`PROCESSING`) — Withdrawal executes immediately when: - Sufficient available allowance - Sufficient USDC balance in wallet 2. **Manual Approval** (`PROPOSED`) — Transaction created for dashboard approval when: - Withdrawal exceeds available allowance - Insufficient USDC balance in wallet (user can deposit funds before signing) - Automatic execution fails (transaction converted to manual approval) **Amount Specification** Specify the withdrawal amount using one of: - `sourceAmount`: Amount in USDC to withdraw - `targetAmount`: Amount to receive in the bank's currency The target currency is automatically determined by the withdrawal bank's configured currency. **Idempotency** Use the `idempotencyKey` to safely retry requests. Duplicate requests with the same key return the original transaction without creating a new one.
List customer withdrawal banks GET
Returns all withdrawal banks configured for the customer. Only ACTIVE banks can be used for withdrawals.