# Customer API Changelog

[📡 Subscribe to this changelog via RSS](/products/customer-api/changelog-feed.xml) — copy the feed URL into your reader, or run `/feed subscribe` with it in Slack. Opening it in a browser just shows the raw feed.

## October 2026

### 2026-10-09

- [Create Counterparty](/products/customer-api/reference/counterparties/create-counterparty-v2) now returns a specific error type when it refuses a `crypto_wallet_address` counterparty, with or without counterparty approvals:
  - A `wallet_address` that is not valid for the `chain` returns `422` `InvalidWalletAddressError`.
  - A customer who is not eligible for crypto returns `422` `CustomerNotEligibleForCryptoError`. Only business customers whose identification number has an issuing country are eligible.
  - A customer that cannot be found returns `404` `NotFoundError`.
  - A `counterparty_name` longer than 200 characters is rejected with `422` `InputValidationError`.
- With approvals enabled, a counterparty that already exists now returns `409` `CounterpartyAlreadyExistsError` instead of `DuplicateRequestError`, the same as with approvals off.
- With approvals off, [Update Counterparty](/products/customer-api/reference/counterparties/update-counterparty-v2) returns `412` `CounterpartyUnlinkNotAllowedError` when unlinking a counterparty that is not `LINKED`. The `detail` names the counterparty's current status.


### 2026-10-06

- [Subscriptions](/products/customer-api/reference/subscriptions) can now subscribe to `transfers.crypto.deposit.rejected`, sent once when Jiko will not credit a crypto deposit to the receiving Jiko Account, with the same payload as the other crypto transfer events. It is also returned by [Get Events](/products/customer-api/reference/events/get_events_api_v1_events__get). `transfers.crypto.withdrawal.rejected` is now also sent when Jiko stops a withdrawal after processing began, not only when it is refused before the account is debited, and the withdrawal's transfer request moves to rejected on either kind of rejection. Each crypto transfer ends with at most one success or rejected event.
- Creating a `WIRE` transfer request now rejects a `description` that contains characters the Fedwire Funds Service does not accept. Only printable ASCII (letters, digits, space and standard punctuation) is allowed; anything else is rejected with a `422` whose `fields` entry has `loc` `["body", "transfer", "WIRE", "description"]`, when the request is submitted and before it is reviewed.


### 2026-10-05

- Renamed the crypto withdrawal transfer type on [Create Transfer Request](/products/customer-api/reference/transfer-requests/create_transfer_request_api_v1_transfer_requests__post) from `USDC` to `ON_CHAIN`. The type now names the rail, matching `ON_CHAIN` on [List Transactions](/products/customer-api/reference/transactions/list-transactions-v2). Transfer requests returned by the API carry the same `type`.
- [Create Counterparty](/products/customer-api/reference/counterparties/create-counterparty-v2) now rejects `wire` and `international_wire` counterparties whose name, address, `identifier`, `routing_number` or `wire_instructions` contain characters the Fedwire Funds Service does not accept. Only printable ASCII (letters, digits, space and standard punctuation) is allowed; anything else is rejected with a `422` that lists each offending field in `fields`, before any approval request is created. `display_name` is not restricted.


## September 2026

### 2026-09-02

- [Subscriptions](/products/customer-api/reference/subscriptions) can now subscribe to crypto transfer events: `transfers.crypto.deposit.success`, `transfers.crypto.withdrawal.success` and `transfers.crypto.withdrawal.rejected`. The payload carries the `crypto_transfer_id` of the transfer and the `jiko_account_id` it settled against. These events are also returned by [Get Events](/products/customer-api/reference/events/get_events_api_v1_events__get).


## August 2026

### 2026-08-27

- Added a [Webhooks](/products/customer-api/reference/webhooks) section documenting the payload of every Event that can be delivered to a [Subscription](/products/customer-api/reference/subscriptions) URL, with one entry per event type.
- [Subscriptions](/products/customer-api/reference/subscriptions) can now subscribe to counterparty status events: `counterparty.status.linked`, `counterparty.status.failed` and `counterparty.status.unlinked`. The payload carries the `counterparty_id` of the [Counterparty](/products/customer-api/reference/counterparties) whose status changed. These events are also returned by [Get Events](/products/customer-api/reference/events/get_events_api_v1_events__get).


### 2026-08-13

- Added the [Get Customer Earnings](/products/customer-api/reference/pockets/get-customer-earnings-v2) endpoint: current-period earnings for all of the customer's pockets (or a `pocket_id[]` subset) in a single call, returning one entry per pocket plus their exact aggregate. Supports the `ytd`, `mtd`, `wtd` and `all-time` periods; custom date ranges remain on the single-pocket earnings endpoint.


## July 2026

### 2026-07-23

- Added an optional `display_name` field to counterparties. It can be set when [creating](/products/customer-api/reference/counterparties/create-counterparty-v2) `ach`, `wire`, `international_wire`, and `on_us` counterparties, or when updating a counterparty's `display_name` via the [update counterparty](/products/customer-api/reference/counterparties/update-counterparty-v2) endpoint, and is returned on all counterparty responses when [listing](/products/customer-api/reference/counterparties/list-counterparties-v2). Use it to assign a custom name that distinguishes counterparties belonging to the same legal entity.


## June 2026

### 2026-06-09

- Added new endpoints for fetching wires:
  - [List Wires](/products/customer-api/reference/wires/list-wires-v1) for fetching wires, optionally filtered by `pocket_id` (a single pocket) and/or `customer_id` (all of a customer's pockets).
  - [Get Wire](/products/customer-api/reference/wires/get-wire-v1) for fetching a single wire, optionally scoped to a `customer_id`.
- The list endpoint supports filtering by `direction` (`INCOMING` or `OUTGOING`).


### 2026-06-02

- Exposed [Portals V2 endpoints](/products/customer-api/reference/portals)


## May 2026

### 2026-05-28

- Added new endpoint for updating portals [Update Portal](/products/customer-api/reference/portals/update-pocket-portal) to be able to update the portal's name or set status to `CLOSED`. Closing a portal is irreversible; the only accepted value for `status` is `CLOSED`.


### 2026-05-14

- Added filter options to [List Transactions](/products/customer-api/reference/transactions/list-transactions-v2) to be able to filter by card and portal ids.


## March 2026

### 2026-03-31

- Added new field `identifier_type` to `InternationalWireCounterpartyV2` and `CreateInternationalWireCounterpartyRequest` models to allow for IBAN account numbers when [creating](/products/customer-api/reference/counterparties/create-counterparty-v2) and [fetching](/products/customer-api/reference/counterparties/list-counterparties-v2) International Wire Counterparties.


## January 2026

### 2026-01-20

- Made Customer API public to integrators.