{"templateId":"markdown","versions":[{"version":"v0-beta","label":"Beta (v0)","link":"/products/native-api/docs/changelog","default":true,"active":true,"folderId":"e4cb5a06"}],"sharedDataIds":{"sidebar":"sidebar-products/native-api/@v0-beta/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Changelog","description":"Official Banxa API documentation – on-ramp and off-ramp transfers with identity verification and compliance.","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"changelog","__idx":0},"children":["Changelog"]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"2026-06-02","__idx":1},"children":["2026-06-02"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"added","__idx":2},"children":["Added"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Embedded Payment Button now available"]}," — Apple Pay and Google Pay can now be embedded in web apps (Vanilla JS, React, Vue) via ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["@banxa-official/embedded-checkout-web-component"]}," (v0.1.0). Pass a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["checkoutUrl"]}," from ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /{partner}/v2/buy"]}," as the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["source"]}," attribute on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["<banxa-checkout>"]}," and the component renders the button and presents the native payment sheet. Provisioning required — contact your Banxa integration contact to enable the button-only setting on your environment before use. → ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/native-api/docs/guides/apple-pay"},"children":["Apple Pay"]}," · ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/native-api/docs/guides/google-pay"},"children":["Google Pay"]}]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"2026-05-11","__idx":3},"children":["2026-05-11"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"added-1","__idx":4},"children":["Added"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["React Native SDK now available"]}," — The Banxa React Native SDK (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["@banxa-official/react-native-sdk"]},") is now available. Use it alongside the Native API to present native payment sheets for cards, Apple Pay, and Google Pay — payment methods that require PCI-compliant tokenisation via Primer and cannot be handled through the API alone. Bank transfers continue to run directly through the Native API without the SDK. → ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/native-api/docs/sdk/sdk-reference"},"children":["SDK Reference"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Sumsub Copy Applicant support"]}," — A second Sumsub integration approach is now available alongside Reusable KYC. Copy Applicant retrieves name, DOB, selfie, document, address, and TIN directly from your Sumsub account, satisfying a broader set of eligibility requirements without additional PATCH calls. Copy Applicant is a separate Sumsub product and must be configured by Banxa — contact Banxa to have it enabled on your account. → ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/native-api/docs/how-it-works/kyc-token-sharing"},"children":["KYC Token Sharing"]}]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"2026-05-04","__idx":5},"children":["2026-05-04"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"added-2","__idx":6},"children":["Added"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["KYC status webhooks"]}," — Banxa now sends a webhook when a customer's identity verification status changes. The payload includes ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["kyc.status"]}," with values ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PENDING"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["UNDER_REVIEW"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ACTION_REQUIRED"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["VERIFIED"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["REJECTED"]},". Use this to track verification progress without polling ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /eapi/v0/identities/{identityReference}"]}," — particularly useful after KYC token sharing, which is processed asynchronously. KYC webhooks are opt-in — contact Banxa to have them enabled on your account. → ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/native-api/docs/transaction-lifecycle/webhooks"},"children":["Webhooks"]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"changed","__idx":7},"children":["Changed"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mobileNumber"]}," now optional on KYC token share"]}," — Previously required on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /eapi/v0/identities/share/token"]},". Note: Interac (Canada) requires a mobile number to process payments — for headless ramp flows using Interac, omitting ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mobileNumber"]}," will cause the ramp to fail."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"2026-04-09","__idx":8},"children":["2026-04-09"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"added-3","__idx":9},"children":["Added"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Rate locking added"]}," — ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /eapi/v0/quote"]}," returns a confirmed rate and a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["quoteId"]}," that can be passed to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /eapi/v0/ramps"]}," to guarantee the price at ramp creation."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"2026-04-08","__idx":10},"children":["2026-04-08"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"added-4","__idx":11},"children":["Added"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["kyc.status"]}," added to GET identity response"]}," — ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /eapi/v0/identities/{identityReference}"]}," now includes ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["kyc.status"]},", the verification outcome of the customer's submitted identity documents (selfie + document). ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["VERIFIED"]}," indicates that document and liveness checks passed; other values indicate verification is in progress or requires action. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/native-api/docs/how-it-works/identity-kyc"},"children":["Identity & KYC"]}," for the full status reference."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["EXTRA_VERIFICATION"]}," added to customer webhooks"]}," — Customer webhook payloads now include ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["EXTRA_VERIFICATION"]}," as a KYC status event, triggered when a customer requires enhanced due diligence review. Contact Banxa to have this webhook enabled on your account."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"changed-1","__idx":12},"children":["Changed"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /eapi/v0/identities/transactions/limits"]}," response updated"]}," — The response now includes ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["remainder"]}," across each window, showing the customer's remaining transaction capacity (daily, weekly, monthly, and annual)."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CUSTOMER_BLACKLISTED"]}," renamed to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ACCOUNT_BLOCKED"]}]}," — Ramp and customer webhook payloads that previously returned ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CUSTOMER_BLACKLISTED"]}," now return ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ACCOUNT_BLOCKED"]},". Update any status-handling logic that references the old value."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["KYC eligibility requirements now individually itemised"]}," — The eligibility response previously returned a single ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PERSONAL_DETAILS"]}," requirement when any personal data was missing. It now returns individual requirements — ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["NAME"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["DOB"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ADDRESS"]}," — so you can prompt for exactly what is outstanding rather than re-collecting data your customer has already provided."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"2026-04-07","__idx":13},"children":["2026-04-07"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"added-5","__idx":14},"children":["Added"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Headless OTP added"]}," — Partner backends can now send and verify one-time passcodes server-to-server without exposing the verification step to the client. Contact your Banxa integration manager to enable. → ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/native-api/docs/how-it-works/otp-verification"},"children":["OTP Email Verification"]}]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"2026-03-24","__idx":15},"children":["2026-03-24"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"added-6","__idx":16},"children":["Added"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Basic identity creation"]}," — Create a customer identity with personal details to enable lower-tier KYC transactions. → ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/native-api/docs/how-it-works/identity-kyc"},"children":["Identity & KYC"]}]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"2026-03-23","__idx":17},"children":["2026-03-23"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"added-7","__idx":18},"children":["Added"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Transaction limits"]}," — Retrieve applicable limits for a given identity and transaction context. Returns provider limits and customer tier limits across daily, weekly, monthly, and annual windows."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"2026-03-16","__idx":19},"children":["2026-03-16"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"changed-2","__idx":20},"children":["Changed"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["ACH terms of service acceptance now required"]}," — ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /eapi/v0/ramps"]}," for ACH bank transfer methods now requires explicit terms of service acceptance in the request payload. See the API Reference for the required field."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"2026-03-12","__idx":21},"children":["2026-03-12"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"added-8","__idx":22},"children":["Added"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Ramp history added"]}," — ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /eapi/v0/ramps"]}," returns paginated ramp history for a given ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["identityReference"]},". Supports filtering by status and transaction type."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"changed-3","__idx":23},"children":["Changed"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Market rates added to price and quote responses"]}," — ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /eapi/v0/price"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /eapi/v0/quote"]}," responses now include a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["marketRate"]}," object with crypto-to-fiat and forex reference rates at the time of the quote."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"2026-03-04","__idx":24},"children":["2026-03-04"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"changed-4","__idx":25},"children":["Changed"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /eapi/v0/identities/{identityReference}"]}," response updated"]}," — The response now includes ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["account.blocked"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["account.createdAt"]},", making it possible to check account status and creation timestamp in a single call."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"2026-02-04","__idx":26},"children":["2026-02-04"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"added-9","__idx":27},"children":["Added"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Transaction eligibility"]}," — Evaluate whether a transaction can proceed for a given identity, payment method, fiat/crypto pair, and amount. Returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["paymentReady: true/false"]}," and any outstanding ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["requirements[]"]},". → ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/native-api/docs/how-it-works/interpreting-eligibility"},"children":["Interpreting Eligibility"]}]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"2025-11-20","__idx":28},"children":["2025-11-20"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"changed-5","__idx":29},"children":["Changed"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Ramp creation now supports ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cryptoAmount"]}]}," — You can now specify the exact amount of crypto to be received (on-ramp) or sent (off-ramp), in addition to the existing ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["fiatAmount"]},". This enables crypto-fixed transactions — for example, \"receive exactly 200 USDT\" — where the fiat cost is calculated from the crypto side rather than fixed upfront. Previously, only fiat-fixed ramps were supported. Provide either ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["fiatAmount"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cryptoAmount"]}," (not both), using the same parameter and value from the corresponding price request. → ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/native-api/docs/how-it-works/flexible-amounts"},"children":["Pricing & Amount Inputs"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Webhook payload updated"]}," — Ramp webhook payloads now include ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["processingFee"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["networkFee"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transaction_hash"]}," fields in the final status notification."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"2025-10-31","__idx":30},"children":["2025-10-31"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"added-10","__idx":31},"children":["Added"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["ACH off-ramp bank account details added to payment instructions"]}," — ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sourceDepositInstructions"]}," for ACH off-ramp now includes ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["achRoutingNumber"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["achAccountNumber"]}," for the destination bank account."]}]}]},"headings":[{"value":"Changelog","id":"changelog","depth":1},{"value":"2026-06-02","id":"2026-06-02","depth":2},{"value":"Added","id":"added","depth":4},{"value":"2026-05-11","id":"2026-05-11","depth":2},{"value":"Added","id":"added-1","depth":4},{"value":"2026-05-04","id":"2026-05-04","depth":2},{"value":"Added","id":"added-2","depth":4},{"value":"Changed","id":"changed","depth":4},{"value":"2026-04-09","id":"2026-04-09","depth":2},{"value":"Added","id":"added-3","depth":4},{"value":"2026-04-08","id":"2026-04-08","depth":2},{"value":"Added","id":"added-4","depth":4},{"value":"Changed","id":"changed-1","depth":4},{"value":"2026-04-07","id":"2026-04-07","depth":2},{"value":"Added","id":"added-5","depth":4},{"value":"2026-03-24","id":"2026-03-24","depth":2},{"value":"Added","id":"added-6","depth":4},{"value":"2026-03-23","id":"2026-03-23","depth":2},{"value":"Added","id":"added-7","depth":4},{"value":"2026-03-16","id":"2026-03-16","depth":2},{"value":"Changed","id":"changed-2","depth":4},{"value":"2026-03-12","id":"2026-03-12","depth":2},{"value":"Added","id":"added-8","depth":4},{"value":"Changed","id":"changed-3","depth":4},{"value":"2026-03-04","id":"2026-03-04","depth":2},{"value":"Changed","id":"changed-4","depth":4},{"value":"2026-02-04","id":"2026-02-04","depth":2},{"value":"Added","id":"added-9","depth":4},{"value":"2025-11-20","id":"2025-11-20","depth":2},{"value":"Changed","id":"changed-5","depth":4},{"value":"2025-10-31","id":"2025-10-31","depth":2},{"value":"Added","id":"added-10","depth":4}],"frontmatter":{"title":"Changelog","description":"Release notes for the Banxa Native API.","seo":{"title":"Changelog"}},"lastModified":"2026-06-02T05:41:42.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/products/native-api/docs/changelog","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}