Breaking
Business API: new response format
We’re simplifying Business API responses and error codes. The API reference shows the new format. Field and error code changes reach your integration on your cutoff date, which we’ll send you by email. A smaller set of changes applies to every integration straight away, and they’re listed below.Renamed error codesThe
type URL in these errors changes to match, and the feature_key for card KYC errors becomes card_kyc_enabled. Three internal card failure_code values (retry_declined, V1_NEGATIVE_FROZEN, and SUPERSEDED_BY_LINKED_TERMINATION_CREDIT) become OPERATION_FAILED.Renamed fieldOn virtual account transactions, ledger_transaction_id is replaced by transaction_id, which works with Get a transaction. The virtual_account.deposit.success webhook keeps all its current fields.Removed fieldsMetadata
metadata stays on transactions and virtual account transactions, but internal keys are removed from it, including ledger ID keys, account_id, company_id, hold_stage, source_wallet, and idempotency_key_basis. All other keys stay the same.Proxy a JSON-RPC call to a node errors will contain only code and message. Card termination_reason text that mentions a partner is replaced with a general message.Applies straight awayThese changes don’t wait for your cutoff date:metadatakeys starting withprovider, and internal staff and repair keys, are removed.transaction_idis added to virtual account transactions and thevirtual_account.deposit.successwebhook.- Several messages are clearer, including
failure_reasonon payout webhooks and card transactions. Raw internal text is replaced with a safe message. - Conversion
failure_reasononly appears on failed conversions. - Internal repair notes are removed from card transaction descriptions, and a description naming a partner is removed.
- The
PROVIDER_ERRORtitle becomesProcessing Error, andextensions.provideris removed.
Improved
Deprecated endpoints left the API reference
Deprecated endpoints are no longer in the API reference. They still work, and their old pages redirect to the replacement where there is one. If you still call one, move to its replacement. Create a lite card and Get a payout by reference have no replacement yet.New
Business API reference: full endpoint coverage
The Business API reference now covers all 129 endpoints in the published spec, up from 69. These are newly documented:The reference also lists 19 deprecated aliases, marked as deprecated on their pages, each pointing to the endpoint that replaces it. Three endpoints that were already documented are now deprecated:
Most endpoint pages have new titles. Their URLs haven’t changed.
New
Enterprise reference: full endpoint coverage
The Enterprise API reference now covers all 86 endpoints in the published spec, up from 42. These groups are newly documented:Existing groups also gained endpoints: wallet signing and sign logs, UTXOs and per-asset balances, transaction fee estimates, and webhook event types. Gas station pages moved to
/api-reference/platform/gasstations/, and the old URLs redirect.New
Choose the bank for virtual accounts
Create virtual account takes an optionalbank field: nomba (Nombank MFB) or globus (Globus Bank). Leave it out and the account opens at the default bank, currently Nomba. A customer can hold accounts at both banks, or several at one bank, as long as each request uses a new reference. bank_name returns the issuing bank, and is always Sandbox Bank in sandbox. Any other value fails with bank must be one of: nomba, globus.Breaking
Lite cards require Card KYC
Create lite card now requires approved Card KYC for the cardholder. Verify the customer with Card KYC first, then pass the returnedcustomer_id. Three new fields are also required: card_brand, swipe_count, and terminate_date. Requests without approved KYC or these fields are rejected.New
Card KYC
Cardholders are verified through the new Card KYC endpoint before a card can be issued. Submit the customer toPOST /api/cards/kyc first. Approval returns a customer_id, which you then pass to Create card. Card KYC is enabled per account.New
Virtual Accounts API
Virtual accounts are dedicated Nigerian bank account numbers issued against one of your customers. Deposits credit your NGN balance, which Get Balances already returns.Two requirements before you call create:
- The customer must already carry a BVN, meaning an
id_typeofbvn, plus date of birth and contact details. referenceacts as the idempotency key, so reuse it when you retry.
New
Webhook source IPs published
The webhook reference pages for addresses, virtual cards, payouts, withdrawals, and beneficiaries now list the addresses Bitnob sends webhooks from,18.171.51.218 and 13.134.154.133, with an nginx allow and deny example on each page.These addresses can change. Treat the allowlist as a network convenience rather than a security boundary, and verify the x-bitnob-signature header on every event.Breaking
Payout webhooks reference
The events emitted across the payout flow of quote, initialize, and finalize are now documented.Two things to note when you handle these events:
- Each event carries the payout record itself, so field names match the payouts API response, including
quote_id,settlement_amount,from_asset, and the nestedbeneficiaryobject. This replaces the legacypayout.transfer.*shape. data.statusis the event outcome in lower case, one ofinitiated,processing,success, orexpired. It is not the payout record’s upper case lifecycle status returned by Get Payout, so branch on theeventfield.
New
Interactive API playground
Supported API reference sections now include a Try it out panel that sends real, HMAC-signed requests and shows the live response.- As you fill in the path, query, and body fields, the panel builds a syntax-highlighted cURL command you can copy and run as is.
- For POST, PUT, and PATCH endpoints, a Raw body tab accepts your own JSON payload. The exact bytes you paste are signed and sent verbatim, and they persist across page refreshes.
- You enter your API credentials once. Timestamps, nonces, and signatures are generated on each run.
New
Page assistance menu
API reference pages now carry a Page Assistance menu with four actions.Every action operates on the whole page.
New
Stablecoin webhooks reference
New stablecoin webhook pages under the Addresses and Withdrawal sections document thedeposit.success, transfer.success, and transfer.failed events.Each page covers signature verification with HMAC SHA512 through the x-bitnob-signature header, notification retries, local testing, and the full payload field reference with sample payloads.Breaking
Card webhooks v2
Every outbound virtual card webhook moved to a new payload shape.Cross-border transactions emit two variants,
cross_border_pending for the company wallet fee debit and cross_border_settled for the card balance principal debit. Both are transactionType values, which stay snake_case. Contactless and refund events also fire with several transactionType values under one event string, so branch on event first and then on transactionType.Improved
Webhook payloads: top-level event_id
Webhook payloads for card top-up, card withdrawal, stablecoin transfer, and stablecoin deposit events now include a top-levelevent_id, which makes de-duplication and tracing easier. The transfer.success event also includes transaction_id in its data payload.New
Card Issuing API v2 beta
New card creation endpoints are available, with support for physical cards, custom BIN ranges, and 3D Secure.New
Virtual Cards API v2
The Virtual Cards API is now resource-oriented.New endpoints cover extended card details, spending limit controls, and customer cards lookup.
Breaking
Legacy Virtual Cards endpoints removed
Everything under/api/virtualcards is no longer supported. Card operations require an explicit cardId path parameter instead of implicit context, and the user-based model is replaced by a customer-centric model keyed on customerId.Update your integration to the new namespaces before upgrading.