Update a Bank Counterparty
Changes a US withdrawal destination. A field left out keeps its stored value, and sending "" does not clear one. reference, customer_id and coin cannot change. A body with no fields returns the counterparty unchanged.
The payment is checked only when the patch sends a payment field (instrument, wire_type, account_type, routing_number, account_number, swift or iban). The check is of the stored payment with those fields laid over it, under the same rules as a save. Changing the rail means sending every field the new rail needs that the stored one does not already have: an ACH turned into an international wire needs wire_type, swift, and an IBAN when it has no account number. A patch that only changes the name, the holder, the bank name or an address does not re-check the account, so a destination v2 saved with a routing number this API would refuse can still be renamed.
Changing the routing number, account number, SWIFT or IBAN of a destination the bank already knows drops that link, so the next withdrawal opens one for the new account. A destination whose status is needs_update becomes active, and status_reason is left out of the response, when the account it pays changes — including one the bank had not registered yet.
Sending address replaces the holder's address, and the object has to be complete. Sending any field of bank_address replaces the bank's address the same way. There is no idempotency header and no webhook.
An account-scoped key updates only its own account's counterparties; another account's reads as 404. A workspace-scoped key updates any US counterparty of the workspace.
Replaces PUT /api/v2/banking/counterparties/{id}.
Authorization:
Every request is signed with your API key: a short-lived JWT, signed with your private key, sent in one header on /v3/* and /api/v2/* alike.
Headers:
Authorization: APIKey {SIGNED_JWT}
How to build and sign the JWT: Authentication.
Endpoint
/v3/banking/counterparties/{counterparty_id}
Path parameters
| Parameter | Type | Description |
|---|---|---|
counterparty_id | string (bcp_…) | Required. The counterparty. |
Request Body Sample
{
"name": "Northwind Holdings LLC"
}
Request Body Schema
Every field is optional. The types and bounds are the ones on Save a Bank Counterparty.
| Field | Description |
|---|---|
name | The new name, 2 to 255 characters. |
holder_type | individual or business. |
bank_name | The bank, 2 to 255 characters. |
instrument, wire_type, account_type, routing_number, account_number, swift, iban | Laid over the stored payment, then checked. See above. |
address | Replaces the holder's address. Send the whole address. |
bank_address | Replaces the bank's address. Send the whole address. |
Response Sample
{
"id": "bcp_01k8z5q7r9s1t3v5w7x9y1z3a5",
"customer_id": "cst_01h455vb4pex5vsknk084sn02q",
"reference": "vendor-42",
"coin": "USD",
"name": "Northwind Holdings LLC",
"holder_type": "business",
"bank_name": "Chase",
"instrument": "ach",
"account_type": "checking",
"routing_number": "021000021",
"account_number": "000123456789",
"status": "active",
"address": {
"line1": "1 Market Street",
"line2": "Suite 400",
"city": "San Francisco",
"state": "CA",
"postal_code": "94105",
"country": "US"
},
"created_at": "2026-10-23T12:00:00Z",
"updated_at": "2026-10-23T18:12:00Z"
}
Response Schema
The counterparty, with the fields of a List Bank Counterparties row, without customer.
Errors
| Status | message | When |
|---|---|---|
400 | failed to parse request | The body is not valid JSON, counterparty_id is not a bcp_… id, or a sent enum is not one of its values. |
400 | invalid_holder_name | name is shorter than 2 characters once spaces are collapsed. |
400 | invalid_holder_type | holder_type is not individual or business. |
400 | invalid_bank_name | bank_name is shorter than 2 characters. |
400 | invalid_address | An address that was sent is incomplete or out of bounds. |
400 | invalid_instrument | instrument is not ach or wire. |
400 | invalid_wire_type | The payment, after the patch, is a wire without domestic or international. |
400 | invalid_account_type | The payment, after the patch, is an ACH without checking or savings. |
400 | invalid_routing_number | The payment, after the patch, fails the routing rule of its rail. |
400 | invalid_account_number | The payment, after the patch, fails the account-number rule of its rail. |
400 | invalid_swift | An international wire whose SWIFT is not 8 or 11 letters and digits. |
400 | invalid_iban | An IBAN that is not 15 to 34 letters and digits. |
401 | unauthorized | Missing or invalid signature. |
404 | bank_counterparty_not_found | No such counterparty, it belongs to another account, it was deleted, or the id is not a US counterparty. |
422 | Validation failed | A sent text field or number is longer than allowed; details names it. |
Coming from v2
v2 (PUT /api/v2/banking/counterparties/{id}) | v3 |
|---|---|
PUT | PATCH; a field left out keeps its stored value |
id (uuid) | counterparty_id (bcp_…) |
| the same camelCase body as create | the same snake_case body as create, every field optional |
Support and Resources
If you need assistance or have any questions, our support team is here to help. You can contact our support team at support@blockwyre.com.
Stay Updated
Stay up-to-date with the latest news, updates, and features from BlockWyre by following us on social media:
- Instagram: BlockWyre Instagram
- Twitter: BlockWyre Twitter
- Facebook: BlockWyre Facebook
- LinkedIn: BlockWyre LinkedIn
We are excited to have you on board and look forward to seeing how you leverage BlockWyre's powerful tools to enhance your financial operations. Happy integrating!