📡 Subscribe to this changelog via RSS — 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.
- Added Get On-Chain Transfer for fetching a single on-chain transfer by its
id, incoming or outgoing. A transfer that is not yours returns404. Like Create On-Chain Transfer, it is experimental and must be enabled for your account. - On-chain transfers now include
transaction_hash, the hash of the USDC transfer on the blockchain. For an outgoing transfer it is null until the USDC has been sent. - On-chain transfers now include
direction(INCOMINGorOUTGOING) andcounterparty_wallet_address, the wallet an incoming transfer was sent from. It is null for older incoming transfers, where the sending wallet was not recorded.counterparty_idis now null for incoming transfers. ON_CHAINtransactions returned by Get Transaction, List Pocket Transactions and List Customer Transactions now includeon_chain_transfer_id, theidof the on-chain transfer they belong to. For an outgoing (DEBIT) transaction, pass it to Get On-Chain Transfer to read the transfer's currenttransaction_hash.
- The reference now lists the
401,403and404responses on every endpoint that can return them.401means the access token is missing, invalid or expired,403thatx-jiko-signaturedoes not match the request, and404that a resource in the path does not exist. The error schema now includesfields, which input validation errors already return. - Added Create Pocket (v3), whose body is selected by
type. AJIKO_STOREPocket takesdeposit_strategy_idand an optionalreinvestment_strategy_id, as before. AJIKO_PAYPocket takespocket_nameonly, since it is always invested in 4-week T-bills; a strategy field on it is rejected with422. Create Pocket (v2) is unchanged, except that its response for aJIKO_PAYPocket now reports the 4-week strategies the Pocket opens with rather than echoing the request.
- ACH originations the receiving bank returned now include
return_details: thereturn_codethe bank sent (for exampleR03), its standard Nachareturn_reason, andreturned_at, when Jiko processed the return. It is set on Get ACH Origination and List ACH Originations, and null on every origination that was not returned, including one rejected before sending or at approval. A returned origination'sstatusstaysREJECTED. Thetransfers.ach.out.rejectedwebhook carries the samereturn_detailswhen the origination was returned, including a return that arrives aftertransfers.ach.out.success. For any other rejection the webhook omits it, and List Events shows it as null. all_time_earningsin the Pocketportfoliois now marked deprecated in the schema of List Pockets, Get Pocket and the other Pocket responses. Use Get Earnings for a single Pocket, or Get Customer Earnings for all of a customer's Pockets in one call, instead. The field is still returned for now, and will be removed after 2026-12-04.- Get Customer Earnings is no longer experimental.
- ACH return transactions, the money that moves back when the receiving bank returns an ACH origination, now include
return_details: thereturn_codethe bank sent (for exampleR01) and its standard Nachareturn_reason. They also carryach_transfer_id, the ID of the returned origination, which Get ACH Origination fetches.return_detailsis null on every other ACH transaction. ACH returns created before this change carryreturn_detailsbut noach_transfer_id. This applies to the v1 and v2 transactions endpoints.
- Added a sandbox endpoint for testing incoming wires, Simulate Wire Receiving. It simulates another bank sending a wire to one of your portals, addressed with the portal's
routing_numberandaccount_number. Shortly after, the wire posts on its own: the balance rises and you receivetransfers.wire.in.success. A wire to a portal that is closed or does not allow wires does not post. Only available in sandbox.
- Subscriptions can now subscribe to
statements.available, sent when a customer's monthly statements for a period have been generated and can be downloaded. The payload carries thecustomer_idand the period inkey, for example2026-09. Fetch the statements with List Customer Statements. The event is delivered at least once per customer and period, so handle repeats idempotently. It is also returned by List Events, and you can simulate it in sandbox with Trigger Webhook.
- Outgoing wires created in sandbox with Create Wire are now reviewed and processed on their own, so you can test the full flow without waiting on Jiko. Shortly after you create one, it moves from
PENDINGtoSUCCESSand you receivetransfers.wire.out.success. Nothing is sent to the beneficiary's bank. Production wires are unchanged. - Incoming ACH events,
transfers.ach.in.successandtransfers.ach.in.rejected, now includeach_transfer_id, the ID of the ACH receiving the event is about. Fetch the receiving with Get ACH Receiving. Events sent before this change do not have it, including when returned by List Events.
- ACH transactions now include
ach_transfer_id, the ID of the ACH transfer behind the transaction: the ACH receiving for an incoming ACH transaction, or the ACH origination for an origination. It is null for ACH returns, and for incoming ACH transactions created before October 2026. - Deprecated
ach_idon ACH transactions. Useach_transfer_idinstead.ach_idkeeps its current values.
- Deprecated the
USDCvalue oftypeon the on-chain funding instruction returned by Get Funding Instructions. Its replacement isON_CHAIN, matching Create On-Chain Transfer; theaddressandchainfields are unchanged. The endpoint still returnsUSDCtoday and will switch toON_CHAINno earlier than 2026-11-20. Update your integration to accept both values now. - Added new endpoints for fetching ACH receivings, the ACH entries received into your customers' pockets:
- List ACH Receivings for fetching receivings, newest first, optionally filtered by
pocket_id,customer_id,portal_id,filter[status](PENDING,PROCESSEDorREJECTED) anddirection(CREDITorDEBIT). Filters combine. - Get ACH Receiving for fetching a single receiving, optionally scoped to a
customer_id. A receiving that is not yours, or not that customer's, returns404TransferNotFoundError.
- List ACH Receivings for fetching receivings, newest first, optionally filtered by
- Each receiving carries its amount, direction, pocket, portal, status and the originator's entry details: company name and identification, entry description, SEC code, trace number, effective entry and settlement dates, payment related information and individual identification number. A
REJECTEDreceiving carries arejection_reason, and can later becomePROCESSEDif it is reprocessed.
- Card transactions now include
merchant_code, the merchant category code (MCC) reported by the card network.merchant_typeremains the human-readable name of that code.
- Create Counterparty now returns a specific error type when it refuses a
crypto_wallet_addresscounterparty:- A
wallet_addressthat is not valid for thechainreturns422InvalidWalletAddressError. - A customer who is not eligible for crypto returns
422CustomerNotEligibleForCryptoError. Only business customers whose identification number has an issuing country are eligible. - A customer that cannot be found returns
404NotFoundErrorinstead of422InputValidationError. - A
counterparty_namelonger than 200 characters is rejected with422InputValidationError; previously it failed with a500.
- A
- Update Counterparty now returns
412CounterpartyUnlinkNotAllowedErrorwhenstatusis set toUNLINKEDon a counterparty that is notLINKED. Thedetailnames the counterparty's current status. Previously this412had no type or detail.
- Incoming ACH transactions now include
remittance_information.
- Added Create On-Chain Transfer to the API reference. It sends USDC from a pocket to a verified
crypto_wallet_addresscounterparty, and status updates are delivered astransfers.crypto.withdrawal.successandtransfers.crypto.withdrawal.rejectedevents. A request that repeats thetransfer_idof a withdrawal that was refused returnsstatusREJECTED. This endpoint is experimental and must be enabled for your account before use; contact your Jiko representative to request it. Requests made without it enabled are rejected with a403.
- 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 List Events.transfers.crypto.withdrawal.rejectedis now also sent when Jiko stops a withdrawal after processing began, not only when it is refused before the account is debited. Each crypto transfer ends with at most one success or rejected event. - Create Wire now rejects a
descriptionthat contains characters the Fedwire Funds Service does not accept. Only printable ASCII (letters, digits, space and standard punctuation) is allowed; an accented letter, a line break or a tab is rejected with a422InputValidationErrorwhosefieldsentry hasloc["body", "description"]. Previously such a description was accepted, and the wire could later be rejected.
- Create Counterparty now rejects
wireandinternational_wirecounterparties whose name, address,identifier,routing_numberorwire_instructionscontain characters the Fedwire Funds Service does not accept. Only printable ASCII (letters, digits, space and standard punctuation) is allowed; an accented letter, a line break or a tab is rejected with a422InputValidationErrorthat lists each offending field infields, for example["body", "address", "city"]. Previously such values were accepted, and a wire to the counterparty could later be rejected.display_nameis not restricted.
- Update Customer accepts a new
closure_reasonvalue,DECEASED, when closing a customer account.
- Added
POST /token/, an OAuth 2.0 token endpoint (RFC 7523 JWT bearer grant). Register a public key in the partner portal, sign a short-lived JWT assertion with the private key, and exchange it for a bearer token — no password is sent. This is now the recommended way to authenticate; see the updated Authentication guide.POST /api/v1/login/keeps working, and request signing withx-jiko-signatureis unchanged.
- Published our versioning and deprecation policy. In short: deprecations are announced in this changelog, deprecated endpoints remain callable for at least three months, and we contact every partner we can see calling an endpoint before it is removed.
- Endpoints deprecated more than six months ago are now hidden from the API reference. They remain fully callable — this is a documentation change only, so no integration breaks today. Hidden in this pass:
GET /api/v1/customers/{customer_id}/jiko-accounts/— use List Pockets for CustomerGET /api/v1/jiko-accounts/{account_id}/— use Get PocketGET /api/v1/customers/{customer_id}/transactions/— use List Customer TransactionsGET /api/v1/jiko-accounts/{account_id}/transactions/— use List Pocket TransactionsGET /api/v1/jiko-accounts/{account_id}/transactions/{transaction_id}/— use Get TransactionGET /api/v1/customers/{customer_id}/counterparties/— use List CounterpartiesGET /api/v1/customers/{customer_id}/counterparties/{counterparty_id}/— use Get CounterpartyGET /api/v1/jiko-accounts/{account_id}/statements/— use List Customer Statements
- Subscriptions can now subscribe to crypto transfer events:
transfers.crypto.deposit.success,transfers.crypto.withdrawal.successandtransfers.crypto.withdrawal.rejected. The payload carries thecrypto_transfer_idof the transfer and thejiko_account_idit settled against. These events are also returned by List Events.
- ACH originations can now be created with the
CCDStandard Entry Class code, for use when the counterparty is a business rather than a consumer.CCDmust be enabled for your account before use; contact your Jiko representative to request it. Requests using it without it being enabled are rejected with a403. Whensec_codeisCCD,company_entry_descriptionis required. - Added a required
wire_typefield toWIREtransaction activities on the transactions endpoints. It distinguishes an ordinary wire (PAYMENT) from the reversal of a wire booked (REVERSAL) and a wire returned by the counterparty bank (RETURN). - Added an optional
original_wire_idfield toWIREtransaction activities. It holds the ID of the wire that was returned, and is only populated forRETURNwires.
- Added a new endpoint to fetch earnings for all of a customer's pockets in a single call. The response contains one entry per pocket plus their exact field-wise aggregate. By default it covers every pocket that is not closed (at most 30 per call); the
pocket_id[]filter narrows the request, and is also the way to include a closed pocket explicitly. Like the single-pocket variant, it supports thewtd,mtd,ytdandall-timeperiods.
- Added an optional
display_namefield to counterparties. It can be set when creatingach,wire,international_wire, andon_uscounterparties, or when updating a counterparty'sdisplay_namevia the update counterparty endpoint, and is returned on all counterparty responses when listing. Use it to assign a custom name that distinguishes counterparties belonging to the same legal entity.
- Added new endpoints for fetching wires:
- List Wires for fetching wires, optionally filtered by
pocket_id(a single pocket) and/orcustomer_id(all of a customer's pockets). - Get Wire for fetching a single wire, optionally scoped to a
customer_id.
- List Wires for fetching wires, optionally filtered by
- The list endpoint supports filtering by
direction(INCOMINGorOUTGOING).
- Added new optional fields
pricing_timestampandappreciation_per_secondto the Portfolio response on the Pockets endpoints. These are populated for pockets backed by accounts with thereal_time_yieldattribute, and allow consumers to interpolatetotal_valueforward between server-side price updates astotal_value + appreciation_per_second × (now - pricing_timestamp).
- Added new endpoint for fetching all customer ACH originations Listing customer ach originations
- Added new endpoint for fetching all customer cards Listing customer cards
- Added pocket_id as part of the Card result, to determine what pocket the card is associated with.
- Added new endpoint for fetching all customer card orders Listing customer card orders
- Added new optional field
magstripe_statusto Set Card Status. Supported values areONandOFF(default). Thecard_statusmust be set toONLINEfor the magstripe_status update to take effect.
- Introduced V2 of the Portals API, now with support for on-chain crypto deposit addresses alongside the existing virtual bank account portals.
- Added List Portals API endpoint.
- Added List Customer Portals API endpoint.
- Added Get Portal API endpoint.
- Added Create Portal API endpoint.
- Added Update Portal API endpoint.
- Added Get Funding Instructions API endpoint, returning funding instructions for all payment rails supported by a portal.
- Added a new
CRYPTO_DEPOSIT_ADDRESS_PORTALportal type withchainandwallet_addressfields, available to query via thetype[]filter on the list endpoints.
- Added new optional field
transfer_typeto Internal Reallocation transfers. Supported values areBANK_TRANSFER(default) andSECURITY_TRANSFER.BANK_TRANSFERsells the CSIP from the origin pocket and buys new CSIP for the destination pocket (T+1 settlement).SECURITY_TRANSFERmoves QCIPs directly between pockets instantly.
- Added new field
identifier_typetoInternationalWireCounterpartyV2andCreateInternationalWireCounterpartyRequestmodels to allow for IBAN account numbers when creating and fetching International Wire Counterparties.
Subscriptions can now subscribe to incoming wire events:
transfers.wire.in.successandtransfers.wire.in.rejected. The payload carries thewire_idof the wire and thejiko_account_idit settled against, matching the shape of the existingtransfers.wire.out.*events. These events are also returned by List Events. No polling is required to observe an inbound wire.Added to this changelog on 2026-09-10; the events have been available since the date above.
- Added new optional field
identification_number_issuing_countryto Retail and Business applications, that refers to the country that issued the identification number. This field will be made mandatory in the future for identification numbers that aren't a US SSN or EIN.
- Added support for filtering by time_settled in Listing pocket transactions, Listing customer transactions and Listing partner transactions.
- Added support for including sweeps in Listing pocket transactions, Listing customer transactions and Listing partner transactions.
- Added a new way of getting a Single Pocket
- Added a new an endpoint to fetch the earnings for a single pocket
- Deprecated the
all_time_earningsfield of the Pockets/accounts endpoint response models. This field will be removed after 2026-08-01.
- Added a
wire_instructionsfield to theWireCounterpartyV2andInternationalWireCounterpartyV2models.
- Added a new
liquidation_value_t0field to thePocketmodel. - Added a new
liquidation_value_t1field to thePocketmodel.
- Added support for filtering by multiple types for Listing customer counterparties.
- Added support for creating an international wire counterparty Creating a counterparty.
- Added support for creating an unverified wire counterparty Creating a counterparty.
- Added new transactions endpoints. Endpoint to fetch transactions for a pocket, endpoint to fetch transactions for a customer and an endpoint to fetch transactions for a partner across all customers.
- Added List Customer Portals API endpoint.
- Added a new endpoint to Update a Counterparty
- Added a new
payment_railsfield to thePortalmodel.
- Added a new enum value
ALL_TIME_EARNINGSto theomitrequest field for List all pockets, Listing customer pockets and Getting a pocket. - The
all_time_earningsfield is now optional the forPortfoliomodel
- Added support for filtering by wire id and ON-US transfer id to the List Customer Transactions (V1), List Account Transactions (V1) API endpoints.
- Added support for specifying retry policies for webhook subscriptions in case Jiko encounters HTTP errors calling a subscription URL with a webhook. Subscriptions will by default not have a defined retry policy. See Create Subscription for more information.
- Added
counterpartyfield toon_us_transactiondetail model for List Customer Transactions (V1), List Account Transactions (V1) and Get Account Transaction (V1) endpoints.
- Added a new
feesfield to thePocketmodel.
- Added a new
attributesfield to thePocketmodel.
- Added support for filtering by status for Listing customer counterparties.
- Added support for On Us counterparties for Listing customer counterparties.
- Added new Peer To Peer option to Create On-Us Transfer API endpoint.
- Added new return type to on-us transfer representing Peer To Peer transfers
- Updated the
PATCHCustomer endpoint, for the ability to close an approved customer that has no funds in their accounts.
- Added new Business Document Types
ORG_CHARTandBUSINESS_DESCRIPTION, that may be requested for a Business Application in Manual review via a Document Request.
- Added
ach_id,ach_directionandportal_idfields to the ACH transaction details object of the List Customer Transactions (V1), List Account Transactions (V1) and Get Account Transaction (V1) endpoints. - Added support for filtering cards by card type to the List Account Cards endpoint
- Added support for filtering cards by time created to the List Account Cards endpoint
- Added new field 'creation_time' to List Account Cards endpoint response model
- Added Get Beneficial Owners API endpoint.
- Added support for creating pre approved ACH counterparty Creating a counterparty.
- Added a
PreVerifiedVerificationoption for Creating a counterparty.
- Added Update Customer Data API endpoint.
- Added new
async_modeoption when creating on-us transfers
- Added
tradable_idfield to List Customer Trades and List Customer Transactions (V1) API endpoint. - Added support for filtering by trade date to and from to List Customer Trades and List Customer Transactions (V1) API endpoints.
- Added support for filtering by types, timestamp_from and timestamp_to to the List Customer Transactions (V1), List Account Transactions (V1) API endpoints.
- Added a way for partners to close pockets via the API. You can now close a pocket by supplying a
{ "status": "CLOSED", "closure_reason": "<ClosureReasonType>" }object to the Update Pocket endpoint.
- Added a
descriptionfield to the Security model returned by the pockets endpoints. - Added support for filtering by status and direction to the List ACH Originations API endpoint
- Added support for filtering by portal id and card id to the List Customer Transactions (V1), List Account Transactions (V1) API endpoints.
- Added support for filtering by status and direction to the List ACH Originations API endpoint
- Added support for filtering by card status to the List Account Cards endpoint.
- Added support for full withdrawals when performing on-us transfers by using the new
amountfield. - Added support for listing fees deducted when performing on-us transfers.
- Added a new
yield_to_maturityanddiscount_yieldfields to thePocketConfigurationmodel.
- Added a new endpoint to List all pockets
- Added Get Health Check API endpoint.
- Business Application additions:
- Added Create Application API endpoint.
- Added Get Application API endpoint.
- Added Update Application API endpoint.
- Added Apply API endpoint.
- Related Party Application additions:
- Added List Related Party API endpoint.
- Added Create Related Party API endpoint.
- Added Delete Related Party API endpoint.
- Added Update Related Party API endpoint.
- Document Upload additions:
- Added List Document Requests API endpoint.
- Added Upload Document API endpoint.
- Wire additions:
- Added Create Wire API endpoint.
- Added a new optional field
micro_depositto V1ACHCounterpartymodel that includes an indication of number of verification attempts for ACH Counterparties verified via Micro Deposits - Added Close Portal API endpoint.
- Added Update Portal API endpoint.
- Added enum value
PENDINGto the Get Customer Dataaccount_statusfield, signalling that a customer has no open pocket.
- Added a new endpoint for Updating a Pocket
- Added a new endpoint for Listing customer pockets.
- Added a new endpoint for Getting a pocket.
- Added Get Account Portal API endpoint.
- Added a new endpoint for Creating a pocket.
- Added a new endpoint for Listing pocket configurations (Now called
List Trading Strategies). - The response from uploading documents now includes a
document_idfield for future reference.
- Added a new endpoint for Creating a counterparty.
- Added a new endpoint for Listing customer counterparties.
- Added a new endpoint for Getting a single counterparty.
- Added Create Portal API endpoint.
- Added a new
categorytype E-SIGN for the Electronic Communications Disclosure Statement and Consent which was previously in the GENERAL category.
- Added a new
WIRE_COUNTERPARTY_VERIFICATIONdocument type. - File size limits raised to 50 MB for files other than
ID_FRONT,ID_BACK,SELFIEandPASSPORTwhen uploading documents to a customer or application. - Updated documentation for both file upload endpoints.
- Adds a new
categoryfield for agreements returned by the List Agreements endpoint. Thiscategoryfield groups all agreements into 3 categories, BANK, BROKERAGE, or GENERAL.
- Added a new sandbox endpoint for simulating webhook calls, Trigger Webhook.
- Added a new
yield_to_maturityfield to theTrademodel.
- Added a new
namefield to thePortalmodel.
- Added a sandbox endpoint to fund accounts via ACH portals.
- Added a new disclosure type,
FORM_CRS, for Customer Relationship Summary Forms.
- Added
wire_fee_transactionandWIRE_FEEtransaction type to the List Customer Transactions (V1), List Account Transactions (V1) and Get Account Transaction (V1) endpoints.
- Added Create On-Us Transfer API endpoint.
- Added Get On-Us Transfer API endpoint.
- Added two optional filtering query parameters to the List Customer Statements endpoint:
- The
type[]query parameter makes it possible to filter by different types of statements, e.g.?type[]=BANK&type[]=BROKERAGE - The
keyquery parameter makes it possible to filter by either a specific month or a year, e.g.?key=2023-01or?key=2022
- The
- Marked the List Account Statements (V1) endpoint as deprecated. Please use the List Customer Statements in future integrations.
- Added a new transaction type and corresponding details object,
on_us_transactionto the response model in List Customer Transactions (V1).
- Added optional field
originally_onboarded_atto request body in Create Application
- New counterparty type
WIREwith awirefield, returned in Get Counterparty (V1) and List Counterparties (V1)
- Added List Customer Statements API endpoint.
- Added Get Customer Data API endpoint.
- Added List Customer Trades API endpoint.
- Added List Customer Transactions (V1) API endpoint.
- Added
namefield to the List Customer Accounts (V1) and Get Customer Account (V1) API endpoints
- Added Get Account Transaction (V1) API endpoint
- Added List ACH Originations API endpoint