---
title: "Save a bank destination"
method: POST
path: "/api/v2/wallet/withdrawal-recipients"
tags: ["Withdrawals"]
---

# Save a bank destination

`POST /api/v2/wallet/withdrawal-recipients`

Saves a bank account the user can withdraw to. `ach` needs `routing_number`, `account_number`, and `account_type`; `international_wire` needs `iban` and `swift_code`. Some countries need extra fields via `country_specific` (for example `ifsc`, `clabe`, `bsb`); the validation error names any missing key. A user can hold up to 25 active destinations.

## Request body

- object
  - `user_id` string, required — The connected user's id.
  - `type` 'ach' | 'international_wire', required
  - `beneficiary_name` string, required — The account holder's legal name.
  - `country_code` string, required — ISO 3166-1 alpha-2 country of the bank account.
  - `nickname` string
  - `email` string, email
  - `routing_number` string — ACH: 9-digit ABA routing number.
  - `account_number` string — ACH: the account number.
  - `account_type` 'checking' | 'savings' — ACH only.
  - `iban` string — International wire: the IBAN (spaces ok, normalized on save).
  - `swift_code` string — International wire: the SWIFT/BIC.
  - `bank_name` string
  - `address_line1` string
  - `address_line2` string
  - `city` string
  - `region` string
  - `postal_code` string
  - `country_specific` object — Country-specific banking fields, e.g. `{"ifsc": "..."}` for India or `{"clabe": "..."}` for Mexico.

## Response `200`

The saved destination, masked.

- WithdrawalRecipient — A saved bank destination. Account and IBAN numbers are always masked to their last four digits in responses.
  - `object` 'withdrawal_recipient'
  - `user_id` string — The connected user this destination belongs to.
  - `id` string — Recipient id (`wrec_...`). Pass it as `recipient_id` when creating a withdrawal.
  - `type` 'ach' | 'international_wire'
  - `nickname` string, nullable
  - `beneficiary_name` string
  - `country_code` string — ISO 3166-1 alpha-2 country of the bank account.
  - `currency` string, nullable
  - `bank_name` string, nullable
  - `account_number_last4` string, nullable — Masked, ACH only. Example: `••••6789`.
  - `routing_number` string, nullable — ACH only.
  - `account_type` 'checking' | 'savings', nullable
  - `iban_last4` string, nullable — Masked, international wire only.
  - `swift_code` string, nullable — International wire only.
  - `created_at` string, date-time

## Other responses

- `400` — Malformed request body.
- `403` — `withdrawals_disabled` — your organization has switched user withdrawals off.
- `404` — `connection_not_found` — that user is not connected under your client.
- `422` — `recipient_fields_invalid` — a field failed validation (the message names it), or the 25-destination cap was reached.

---

[API](https://skmtc.dev/agentcard/apis/agentcard-api.md) · [All operations](https://skmtc.dev/agentcard/apis/agentcard-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/agentcard/agentcard-api/revisions/638d12c8303f/schema)
