Improved

Stablecoin API v1.0.6 โ€” Release Notes

๐Ÿš€ Stablecoin API Update v1.0.6 is now live! ๐ŸŽ‰

This release adds six preview off-ramp currencies in Production โ€” ๐Ÿ‡น๐Ÿ‡ฟ TZS, ๐ŸŒ XOF (West Africa), ๐ŸŒ XAF (Central Africa) and ๐Ÿ‡ณ๐Ÿ‡ต NPR, alongside the ๐Ÿ‡ฟ๐Ÿ‡ฒ ZMW and ๐Ÿ‡บ๐Ÿ‡ฌ UGX schemas โ€” and clarifies the USD international wire field rules.

โœจ What's New

  • ๐Ÿ‡น๐Ÿ‡ฟ TZS (Tanzanian Shilling) โ€” preview, mobile money & bank account rails
  • ๐ŸŒ XOF (West African CFA Franc) โ€” preview, mobile money in ๐Ÿ‡ง๐Ÿ‡ฏ BJ, ๐Ÿ‡ง๐Ÿ‡ซ BF, ๐Ÿ‡จ๐Ÿ‡ฎ CI, ๐Ÿ‡ธ๐Ÿ‡ณ SN; bank transfers in CI & SN
  • ๐ŸŒ XAF (Central African CFA Franc) โ€” preview, mobile money in ๐Ÿ‡จ๐Ÿ‡ฒ CM, ๐Ÿ‡ฌ๐Ÿ‡ฆ GA, ๐Ÿ‡จ๐Ÿ‡ฌ CG; bank transfers in CM only
  • ๐Ÿ‡ณ๐Ÿ‡ต NPR (Nepalese Rupee) โ€” preview, fixed-field bank account
  • ๐Ÿ‡ฟ๐Ÿ‡ฒ๐Ÿ‡บ๐Ÿ‡ฌ ZMW & UGX request/response schemas now documented (still preview)
  • ๐Ÿ‡บ๐Ÿ‡ธ USD international wire โ€” account_number / iban mutual exclusivity now documented
  • ๐Ÿ” transfer_method now returned on USD remote bank account responses
  • ๐Ÿ”— completion_redirect_url on the Plaid bank link request

โš ๏ธ New Currencies Are Preview โ€” Available in Production

TZS, XOF, XAF, NPR, ZMW and UGX are live in both Sandbox and Production. The request and response schemas documented below are stable, so you can integrate against them now.

These are preview corridors, which means they are enabled per merchant rather than on by default. Please talk to your Bakkt contact to have them switched on for your account, and to agree limits before you send production traffic.

All currency schemas below are available on both the user and corporate remote bank account endpoints:

POST /stablecoin/user/bank-account/remote
POST /stablecoin/corporate/{corporate_uuid}/bank-account/remote

๐Ÿ‡น๐Ÿ‡ฟ Tanzanian Shilling (TZS) โ€” Preview

TZS off-ramps use the same mobile-wallet / bank-account rail model as KES, GHS, ZMW and UGX, on both the user and corporate endpoints.

Railis_mobile_walletRequired fields
Mobile wallettrue (default)currency + recipient_phone_number
Bank accountfalsecurrency + is_mobile_wallet + account_number + swift_code

The mobile money phone number is given in country calling code format without the leading plus.

Example โ€” mobile wallet

{
  "account_details": {
    "currency": "TZS",
    "is_mobile_wallet": true,
    "recipient_phone_number": "255754123456"
  }
}

Example โ€” bank account

{
  "account_details": {
    "currency": "TZS",
    "is_mobile_wallet": false,
    "account_number": "0150123456700",
    "swift_code": "CORUTZTZXXX"
  }
}

Supported mobile money operators include Vodacom M-Pesa, Airtel and Tigo. Retrieve the live list with GET /stablecoin/banks?currency=TZS.

๐ŸŒ West African CFA Franc (XOF) โ€” Preview

XOF is shared by the eight WAEMU countries, so coverage differs by country rather than by currency. The recipient's country is derived from the account details โ€” you do not pass it separately.

CountryCodeMobile moneyBank account
BeninBJโœ…
Burkina FasoBFโœ…
Cรดte d'IvoireCIโœ…โœ…
SenegalSNโœ…โœ…

Guinea-Bissau, Mali, Niger and Togo use XOF but are not currently supported.

Rails

Railis_mobile_walletRequired fields
Mobile wallettrue (default)currency + recipient_phone_number
Bank accountfalsecurrency + is_mobile_wallet + account_number
  • Mobile wallet โ€” the country comes from the dialling code of recipient_phone_number, which must be in international format with a leading plus and resolve to BJ (+229), BF (+226), CI (+225) or SN (+221).
  • Bank account โ€” the country comes from account_number, which is either a 24-character WAEMU RIB or the equivalent 28-character IBAN, and must resolve to CI or SN. swift_code and bank_name are optional and only used to help resolve the bank when the account number is ambiguous.

โš ๏ธ XOF has no minor unit, so payout amounts must be whole numbers.

Example โ€” mobile wallet

{
  "account_details": {
    "currency": "XOF",
    "is_mobile_wallet": true,
    "recipient_phone_number": "+221771234567"
  }
}

Example โ€” bank account

{
  "account_details": {
    "currency": "XOF",
    "is_mobile_wallet": false,
    "account_number": "CI93CI0080111301134291200589",
    "swift_code": "ECOCCIAB",
    "bank_name": "Ecobank"
  }
}

Supported mobile money operators include MTN, Moov, Orange and Wave. Retrieve the live list with GET /stablecoin/banks?currency=XOF.

๐ŸŒ Central African CFA Franc (XAF) โ€” Preview

XAF is also shared by several countries, but unlike XOF the recipient's country is required and cannot be inferred from the currency.

CountryCodeMobile moneyBank account
CameroonCMโœ…โœ…
GabonGAโœ…
Republic of the CongoCGโœ…

Rails

Railis_mobile_walletRequired fields
Mobile wallettrue (default)currency + country + recipient_phone_number
Bank accountfalsecurrency + country + is_mobile_wallet + account_number + bank_code
  • Mobile wallet โ€” available in CM, GA and CG. Supply recipient_phone_number including the country dialling code.
  • Bank account โ€” available in Cameroon only, so country must be CM. Account numbers are the 23-digit Cameroon RIB (5-digit bank code, 5-digit branch code, 11-digit account number and a 2-digit key). swift_code is optional, since many Central African banks do not publish one.

Example โ€” mobile wallet

{
  "account_details": {
    "currency": "XAF",
    "country": "CM",
    "is_mobile_wallet": true,
    "recipient_phone_number": "237651234567"
  }
}

Example โ€” bank account

{
  "account_details": {
    "currency": "XAF",
    "country": "CM",
    "is_mobile_wallet": false,
    "account_number": "10005000112345678901234",
    "bank_code": "85526075",
    "swift_code": "ECOCCMCX"
  }
}

Supported mobile money operators include MTN, Orange, Moov and Airtel. Retrieve the live list with GET /stablecoin/banks?currency=XAF.

๐Ÿ‡ฟ๐Ÿ‡ฒ๐Ÿ‡บ๐Ÿ‡ฌ ZMW & UGX Schemas Now Documented โ€” Still Preview

ZMW and UGX were announced as preview currencies in v1.0.5 and remain preview, available in Production to merchants who have been enabled for them โ€” as described in v1.0.5. Their full request and response schemas are now published in the API reference, alongside:

  • account_details variants for both the mobile wallet and bank account rails
  • Inclusion in the exchange rate, fee estimate and fee override currency enums
  • GET /stablecoin/banks?currency=ZMW / ?currency=UGX for the supported bank and mobile money operator list
  • RTGS documented as the supported payment_method for ZMW and UGX on GET /fees and GET /onramp/indicative
CurrencyMobile money operators
ZMWMTN, Airtel, Zamtel
UGXMTN, Airtel, Tigo

๐Ÿ‡ณ๐Ÿ‡ต Nepalese Rupee (NPR) โ€” Preview

NPR is available as a preview off-ramp currency and uses the fixed-field bank account shape.

Required fields

currency, account_number, swift_code, bank_name, recipient_relationship, remittance_purpose

Example

{
  "account_details": {
    "currency": "NPR",
    "account_number": "0123456789012",
    "swift_code": "NBOCNPKA",
    "bank_name": "NEPAL BANK LIMITED",
    "recipient_relationship": "Self",
    "remittance_purpose": "Gift"
  }
}

๐Ÿ‡บ๐Ÿ‡ธ USD International Wire โ€” Mutual Exclusivity Clarified

The INT_WIRE rules are now stated explicitly: provide swift_code plus exactly one of account_number or iban โ€” the two are mutually exclusive โ€” and routing_number must not be provided.

To reflect this, account_number has been dropped from the schema-level required list on the USD โ€” International Wire (Account Number) variant, since requiring it there conflicted with the IBAN alternative.

Schema-level required fields
Beforecurrency + transfer_method + swift_code + account_number
Aftercurrency + transfer_method + swift_code

โš ๏ธ This is a documentation correction, not a relaxation โ€” you must still supply one of account_number or iban. Existing payloads continue to work unchanged.

๐Ÿ” Remote Bank Account Response Changes

transfer_method returned for USD accounts

USD remote bank account responses now include transfer_method, echoing the payment rail the account was registered with (ACH, WIRE, INT_WIRE or INSTANT_PAYMENT). It is null for accounts created before the rail was persisted.

Removed response fields

Two deprecated fields that were never populated have been removed from remote bank account responses:

FieldWhere
beneficiary_bank_addressTop level of the remote bank account response
customer_detailsThe INR, MXN, ARS, BRL, COP, JPY, CAD and "other remittance currencies" account_details variants

This is a documentation correction โ€” the API never returned values for these fields, so there is no behaviour change. The unused recipient_bank_address โ†’ beneficiary_bank_address request field mapping has been removed alongside it.

๐Ÿข Corporate Bakkt Account Closure โ€” Now in the API Reference

The corporate Bakkt bank account closure endpoint announced in v1.0.5 is now documented in the API reference:

POST /stablecoin/corporate/{corporate_uuid}/bank-account/bakkt/{account_uuid}/close

๐Ÿ”— Plaid Bank Link โ€” completion_redirect_url

PUT /stablecoin/user/linked-bank-account/link now accepts an optional completion_redirect_url. When provided, this HTTPS URL is where the user is redirected after completing Plaid Hosted Link, replacing the merchant Plaid redirect URL or the default for that session.

{
  "currency": "USD",
  "completion_redirect_url": "https://your-app.example.com/bank-link/complete"
}

๐Ÿ“– Documentation Fixes

  • ๐Ÿ‡ณ๐Ÿ‡ฌ The NGN bank_code example has been corrected from NBP to a valid 3-digit code (058).
  • ๐Ÿฆ Common mobile money operators are now listed per currency in the supported assets guide, with a pointer to GET /stablecoin/banks?currency=โ€ฆ for the live, authoritative list.

๐Ÿ™Œ Let us know if you need help enabling the new preview corridors or integrating these updates!