{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-platform/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"React Native SDK - Changelog","siteUrl":"https://docs.glomo.one","llmstxt":{"title":"Glomo developer documentation","description":"Cross-border payments APIs, organised by product. Each product section carries both the explanation of its objects and the job-shaped integration guides that set them up.","details":{"content":"How to use these docs:\n\n- Get started is the front door. It has one section per integration\n  (what you're building), each with the API calls in order and the guide that builds it, plus\n  how to get API keys.\n- The product sections - Payin, Payout, Multi-currency accounts,\n  Verification, Request for Information (RFI) - each hold two kinds of page.\n  Pages titled as a noun (\"Subscriptions\", \"Bank Transfer\") explain what\n  an object is. Pages titled as a job (\"Set up recurring subscriptions\",\n  \"Collect LRS remittances from India\") are complete integration flows\n  and live one level under the object they set up. Match a user's goal\n  against the job-shaped titles first.\n- Reports and Identity and Access Management are the two subjects with no\n  API counterpart. There are no endpoints for reports, users, roles or\n  invites; both pages document the merchant dashboard. A dashboard\n  procedure for something the API also does (a refund, a payout) is NOT\n  here - it stays in the product that owns it.\n- API reference is generated from OpenAPI and carries endpoint detail.\n- The OpenAPI description itself is published as a single self-contained\n  document at /openapi.yaml, and the same document as JSON at\n  /openapi.json. Every $ref is resolved into it, so one fetch is the\n  whole contract: 61 paths, 81 operations, 68 schemas - the same\n  endpoints the API reference pages render. Fetch that instead of\n  reading the 129 pages under /api-reference/.\n- Every page below, in full, is one document at /llms-full.txt. Fetch that\n  instead of the pages one by one. It leaves out the API reference;\n  /openapi.yaml is that.\n- Developer resources covers what every integration touches and no single\n  product owns: auth, errors, pagination, rate limits, webhooks,\n  versioning, supported countries, quotes, the MCP server for AI\n  agents, and the client SDKs.\n"},"sections":[{"title":"Get started","description":"The front door. The ordered API calls for each integration and the guide that delivers it, how to obtain API keys, and the platform glossary.","includeFiles":["**/get-started/**"]},{"title":"Payin","description":"Collecting money: customers, orders, checkout, payment links, payment methods (cards, bank transfer, pay via bank), refunds, disputes, purpose codes, fee models, custom fields, subscriptions, and resident India remittance under LRS. Includes the flows that set each up - bank transfers, subscriptions, LRS remittances, and server-to-server card payments.","includeFiles":["**/payin/**"]},{"title":"Payout","description":"Sending money: the payout life cycle, queued payouts, creating and cancelling a payout, rails, beneficiaries, purpose codes, and the action required state. Includes the flow that sends a payout over the API.","includeFiles":["**/payout/**"]},{"title":"Multi-currency accounts","description":"Holding money: balances, balance conversion, adding balance, and withdrawing balance.","includeFiles":["**/multi-currency-account/**"]},{"title":"Verification","description":"Proving who someone is and that an account is theirs: KYC, bank account validation, and third-party verification (TPV) with the flow that verifies a payer's bank account.","includeFiles":["**/verification/**"]},{"title":"Request for Information (RFI)","description":"Responding to a compliance request for information, per object - payment link, order, payment, payout - plus compliance reviews and RFIs raised on already-successful payments.","includeFiles":["**/request-for-information/**"]},{"title":"Nivo (Capital markets)","description":"Nivo, Glomo's capital markets suite (Nivo for AMCs, Nivo for Distributors, and overseas investing for brokers and wealth platforms). Mutual fund investments run as payment sessions: the fund, distributor, scheme, plan, ARN and folio roles; the distributor's relationship with a fund and what it fixes; and the flow that opens a session as a distributor.","includeFiles":["**/capital-markets/**"]},{"title":"Reports","description":"The downloadable and scheduled reports a merchant pulls from the dashboard for reconciliation, compliance and treasury: payment, subscription, settlement breakup, balance statement and KYC reports, plus scheduling one for recurring email delivery and customizing the fields and column order of a report. Dashboard only - there is no reports API.","includeFiles":["**/reports/**"]},{"title":"Identity and Access Management","description":"Administering who can use a merchant account: one set of credentials across multiple MIDs, switching between them without logging out, the Admin / Member / Sales Partner roles and what each may see and do, and inviting a new member. Dashboard only - there is no users, roles or invites API.","includeFiles":["**/access-management/**"]},{"title":"Settlement holidays","description":"The settlement holiday calendar for 2026 - the Indian and US bank and FX holidays on which payin, payout and settlement to the merchant's bank account may be delayed.","includeFiles":["**/settlement-holidays/**"]},{"title":"API reference","description":"Endpoint reference generated from the Glomo OpenAPI description.","includeFiles":["**/api-reference/**"]},{"title":"Developer resources","description":"What every integration touches and no single product owns: auth, errors, pagination, rate limits, webhooks, versioning, API validations, security, supported countries, quotes, connecting an AI agent to the Glomo MCP server, and the client SDKs - React Native, Flutter, Android and the Unified Web SDK, with per-version references and changelogs. Reports and Identity and Access Management used to be listed here and are now their own sections.","includeFiles":["**/platform/**"]}]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"react-native-sdk---changelog","__idx":0},"children":["React Native SDK - Changelog"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["All notable changes to the Glomo React Native SDK."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The format is based on ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://keepachangelog.com/en/1.0.0/"},"children":["Keep a Changelog"]},", and the SDK adheres to ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://semver.org/spec/v2.0.0.html"},"children":["Semantic Versioning"]},"."]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The canonical changelog ships with the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://www.npmjs.com/package/@glomopay/react-native-sdk"},"children":["npm package"]},". This page mirrors it for convenience."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"510---2026-10-29","__idx":1},"children":["[5.1.0] - 2026-10-29"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A feature release. No API changed and no existing code needs to move - ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["appColorScheme"]}," is optional and defaulted. If your app or your network restricts outbound hosts, see the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/platform/sdk/react-native-sdk/migration#v50-to-v51"},"children":["Migration Guide"]},"; nothing else needs anything."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"added","__idx":2},"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":["appColorScheme"]}," prop"]}," (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"auto\" | \"light\" | \"dark\""]},", default ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"auto\""]},") on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GlomoCheckout"]},", providing the Glomo checkout page the preferred colour scheme. It requests rather than forces: the page decides, against your merchant dashboard settings. Changing it during a live checkout is supported and does not reload the page, so a payment in flight survives it. Optional and defaulted, so existing integrations need no change. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/platform/sdk/react-native-sdk/v5#dark-mode"},"children":["Dark mode"]},", and ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/platform/sdk/dark-mode"},"children":["Dark mode across the SDKs"]}," for how the same property resolves on the other Glomo SDKs."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GlomoColorScheme"]}," type"]},", exported."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"changed","__idx":3},"children":["Changed"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Improved SDK diagnostics and observability revamp to better assist merchants.",{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["If you restrict outbound hosts, see the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/platform/sdk/react-native-sdk/migration#v50-to-v51"},"children":["Migration Guide"]},"."]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Android WebView algorithmic darkening is now explicitly off"]}," on every WebView the SDK renders, including bank and 3DS pages. Previously the platform could invert a page that handles its own colours. Nothing to configure."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"notes","__idx":4},"children":["Notes"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"auto\""]}," resolves to your ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["app's effective appearance"]}," (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Appearance.getColorScheme()"]},"), not the device setting underneath it - React Native does not expose the latter once an app overrides its own appearance. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/platform/sdk/react-native-sdk/v5#dark-mode"},"children":["Dark mode"]},", which also covers why the prop is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["appColorScheme"]}," while the URL parameter stays ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["colorScheme"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Pin ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["jail-monkey"]}," to the 2.x line."]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["jail-monkey@latest"]}," is 3.0.0, and on an app that has not enabled the New Architecture its native module does not compile at all: it passes a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ReactApplicationContext"]}," to a no-argument constructor and reads an undeclared ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["rootedCheck"]},", so the build stops at ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":[":jail-monkey:compileReleaseJavaWithJavac"]}," before any Glomo code is reached. No 3.x patch exists. The SDK's peer range has always been ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["^2.6.0"]}," and is unchanged; what changed is that the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/platform/sdk/react-native-sdk/v5#installation"},"children":["install commands"]}," now pin it rather than resolving ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["latest"]},". Nothing in the SDK moved - this is recorded here because a fresh ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["npm install jail-monkey"]}," is the likeliest way to walk into it."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Android hosts should declare ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["uiMode"]}," in their activity's ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["android:configChanges"]},"."]}," Without it, an OS dark-mode toggle destroys and recreates your activity mid-checkout and loses the payment in flight. This is pre-existing behaviour and not new in this release, but it matters more now that users have a reason to toggle. The SDK ships no native Android code and cannot detect or prevent it. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/platform/sdk/react-native-sdk/v5#required-on-android-uimode-in-androidconfigchanges"},"children":["Required on Android: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["uiMode"]}]},"."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Part of the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/platform/sdk/react-native-sdk/v5"},"children":["v5 documentation"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"500---2026-09-23","__idx":5},"children":["[5.0.0] - 2026-09-23"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"breaking-changes","__idx":6},"children":["Breaking Changes"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["jail-monkey"]}," is now a required peer dependency, and device compliance fails closed."]}," It was optional in v4 and the SDK warned and proceeded when it was missing. A device whose security cannot be verified is now refused on a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["live_"]}," key rather than assumed clean: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["start()"]}," returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["false"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onSdkError"]}," fires with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["type: \"device_forbidden\""]},". Mock and test keys are never blocked, so this does not show up in a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["test_"]}," key QA pass. ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["See the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/platform/sdk/react-native-sdk/migration"},"children":["Migration Guide"]}," first"]}," - this can take a working live integration off the air."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onUserRefusedCameraPermissions"]}," renamed to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onUserRefusedDevicePermissions"]},"."]}," The signature is unchanged, so the compiler points at every call site. The new name reflects what the callback covers - a device permission the bank's page asked for - rather than the camera specifically."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["paymentId"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["signature"]}," are optional on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GlomoCheckoutPayload"]},"."]}," The checkout page can report a terminal outcome before the backend has resolved those ids; v4 dropped such outcomes entirely rather than report an incomplete one. With ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["strict"]}," enabled this surfaces as a compile error wherever either value is forwarded to something expecting a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["string"]},", which is the intended guardrail."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onPaymentTerminate"]}," receives a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GlomoTerminationPayload"]},"."]}," Carries ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["source"]},", from the new ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TERMINATION_SOURCES"]}," enum. An existing ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["() => void"]}," handler stays assignable and compiles unchanged."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"added-1","__idx":7},"children":["Added"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Document downloads."]}," A checkout page can now ask the SDK to save a document to the device, which a page cannot do for itself inside a WebView. Available on every flow. Requires two optional peer dependencies - ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["react-native-blob-util"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["@react-native-documents/picker"]}," - and a rebuild of the app after installing them; without both the SDK does not advertise the capability and the page keeps its existing behaviour, so nothing breaks by leaving them out. A save that fails reports through ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onSdkError"]}," with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["field: \"file.save\""]}," and never affects the payment session. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/platform/sdk/react-native-sdk/v5#document-downloads"},"children":["Document Downloads"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TERMINATION_SOURCES"]}," enum and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GlomoTerminationPayload"]}," type"]},", both exported."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Emulators and simulators now pass device compliance on live keys. The SDK computes its own root verdict from ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["jail-monkey"]},"'s per-check breakdown instead of its aggregate, which reports every stock Android emulator image as rooted. Every strong root indicator is still enforced."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["product"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["surface"]}," query parameters on the checkout and education carousel URLs, so an SDK-originated order is distinguishable from a dashboard one."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"fixed","__idx":8},"children":["Fixed"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["A ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mock_"]}," public key ran in live mode."]}," It passed validation and then had ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mode=live"]}," built into its checkout URL."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Camera now works on LRS checkouts."]}," The LRS flow had no permission handling wired on either platform, so a bank page requesting camera access got no prompt on Android and no grant on iOS. It now behaves identically to the standard checkout."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onUserRefusedDevicePermissions"]}," is now forwarded to LRS."]}," The unified ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GlomoCheckout"]}," accepted the callback and advertised it in its types, but never passed it to the LRS flow - so on an LRS order it could never fire. Note it remains Android-only: on iOS the WebView raises its own prompt and never reports the answer back."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Terminal payment outcomes are no longer dropped silently."]}," A payload the SDK could not route left no trace in a release build - no callback, no telemetry, nothing for support to find. It now reports through ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onSdkError"]}," and telemetry."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The SDK's back chevron has a touch target that meets the 44dp / 44pt minimum, an accessibility label and a button role."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"internal","__idx":9},"children":["Internal"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["WebView configuration, permission handling and bridge message routing moved into a shared layer used by every checkout flow, so capabilities land on all flows at once rather than being wired per flow."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Improved SDK diagnostics."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Part of the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/platform/sdk/react-native-sdk/v5"},"children":["v5 documentation"]},". See the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/platform/sdk/react-native-sdk/migration"},"children":["Migration Guide"]}," for upgrade instructions."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"410---2026-07-14","__idx":10},"children":["[4.1.0] - 2026-07-14"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"internal-1","__idx":11},"children":["Internal"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["End-to-end test harness and CI for Android and iOS. No change to SDK behaviour or public API."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Part of the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/platform/sdk/react-native-sdk/v4"},"children":["v4 documentation (Archived)"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"400---2026-06-11","__idx":12},"children":["[4.0.0] - 2026-06-11"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"breaking-changes-1","__idx":13},"children":["Breaking Changes"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Consolidated async payment callbacks"]},": ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onBankTransferSubmitted"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onPayViaBankCompleted"]}," have been replaced by a single ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onUserJourneyCompleted"]}," callback. The new callback receives a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GlomoUserJourneyCompletedPayload"]}," with a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["journeyType"]}," field from the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ASYNC_PAYMENT_EVENTS"]}," enum."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Removed ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onPayViaBankBankConnectionSuccessful"]}]},": This callback has been removed."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Removed types"]},": ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GlomoBankTransferPayload"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GlomoPayViaBankConnectionPayload"]}," are no longer exported."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onSdkError"]}," is now required"]},": Previously optional, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onSdkError"]}," must now be provided. This ensures validation errors, device compliance failures, and configuration issues are handled properly."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"added-2","__idx":14},"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":["ASYNC_PAYMENT_EVENTS"]}," enum"]},": Enumeration of asynchronous payment event types (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["BANK_TRANSFER_SUBMITTED"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PAY_VIA_BANK_COMPLETED"]},")."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GlomoUserJourneyCompletedPayload"]}," type"]},": Flat payload interface with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["journeyType"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["orderId?"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["status?"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["senderAccountNumber?"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transactionReference?"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onUserJourneyCompleted"]}," callback"]},": Single callback for all asynchronous payment flow completions."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"unchanged","__idx":15},"children":["Unchanged"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CheckoutStatus"]}," values ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["bank_transfer_submitted"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["pay_via_bank_completed"]}," remain for granular ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["getStatus()"]}," state checks."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Part of the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/platform/sdk/react-native-sdk/v4"},"children":["v4 documentation (Archived)"]},". See the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/platform/sdk/react-native-sdk/migration"},"children":["Migration Guide"]}," for upgrade instructions."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"310---2026-06-08","__idx":16},"children":["[3.1.0] - 2026-06-08"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"added-3","__idx":17},"children":["Added"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Subscriptions checkout support"]}," - new ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["subscriptionId"]}," prop on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GlomoCheckout"]},". When provided, the SDK bypasses order type detection and renders the subscriptions checkout flow directly. No API call is made - the inner checkout component mounts immediately. The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["detecting_order_type"]}," status is not emitted for subscription flows."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Mutual exclusion validation"]}," - ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GlomoCheckout"]}," validates that exactly one of ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["orderId"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["subscriptionId"]}," is provided. If both or neither are set, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onSdkError"]}," fires with a clear message and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["start()"]}," returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["false"]},"."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"changed-1","__idx":18},"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":["orderId"]}," is now optional"]}," on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GlomoCheckoutProps"]}," - required only when ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["subscriptionId"]}," is absent."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"deprecated","__idx":19},"children":["Deprecated"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["useGlomoCheckout"]}," hook"]}," - use the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GlomoCheckout"]}," component with a ref instead. The hook does not provide reactive state - ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["getStatus()"]}," returns a point-in-time snapshot. Will be removed in a future major version."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Part of the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/platform/sdk/react-native-sdk/v3"},"children":["v3 documentation"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"301---2026-06-02","__idx":20},"children":["[3.0.1] - 2026-06-02"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"added-4","__idx":21},"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":["onPayViaBankBankConnectionSuccessful"]}," callback"]}," - fires when a bank connection is successfully established during the pay via bank flow. Provides ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GlomoPayViaBankConnectionPayload"]}," (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["bankIdentifier"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cooldownPeriodInMinutes"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["bankName"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["bankImageSrc"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["bankImageAlt"]},"). This is informational only and does not change the checkout status."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GlomoPayViaBankConnectionPayload"]}," type"]}," - new exported type for the bank connection callback payload."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"fixed-1","__idx":22},"children":["Fixed"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Repeat ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["start()"]}," calls with the same orderId no longer fail silently due to cached API responses."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Checkout dismissal now fully resets internal state, preventing stale UI on re-open."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Part of the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/platform/sdk/react-native-sdk/v3"},"children":["v3 documentation"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"300---2026-06-01","__idx":23},"children":["[3.0.0] - 2026-06-01"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"breaking-changes-2","__idx":24},"children":["Breaking Changes"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["New unified component"]},": ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GlomoLrsCheckout"]}," has been replaced by ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GlomoCheckout"]},". The new component automatically detects the order type (LRS or Standard) and renders the appropriate checkout flow."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["start()"]}," is now async"]},": Returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Promise<boolean>"]}," instead of ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["boolean"]},". Update call sites to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["await"]},":",{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"tsx","header":{"controls":{"copy":{}}},"source":"const started = await checkoutRef.current?.start();\n","lang":"tsx"},"children":[]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Renamed exports"]},":",{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"v2"},"children":["v2"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"v3"},"children":["v3"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GlomoLrsCheckout"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GlomoCheckout"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GlomoLrsCheckoutRef"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GlomoCheckoutRef"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GlomoLrsCheckoutProps"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GlomoCheckoutProps"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GlomoLrsCheckoutPayload"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GlomoCheckoutPayload"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GlomoLrsServer"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GlomoServer"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["LrsCheckoutStatus"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CheckoutStatus"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["useLrsCheckout"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["useGlomoCheckout"]}]}]}]}]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Removed exports"]},": v2 LRS-specific names are no longer available."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"added-5","__idx":25},"children":["Added"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Standard checkout support"]}," - cards, bank transfers, pay via bank, and camera-based bank authentication flows, all through the same ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GlomoCheckout"]}," component. No integration changes needed - the order type is detected automatically."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onBankTransferSubmitted"]}," callback"]}," - fires when the user submits bank transfer details in a standard checkout flow. Provides ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GlomoBankTransferPayload"]}," (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["orderId"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["senderAccountNumber"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transactionReference"]},")."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onPayViaBankCompleted"]}," callback"]}," - fires when the pay via bank journey completes. Provides ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{ status: string }"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onUserRefusedCameraPermissions"]}," callback"]}," - fires when the user denies camera access during bank authentication (Android only). The checkout is dismissed automatically."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["detecting_order_type"]}," checkout status"]}," - returned by ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["getStatus()"]}," while the SDK determines the order type."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["bank_transfer_submitted"]}," checkout status"]}," - indicates a bank transfer has been submitted and is awaiting confirmation."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["pay_via_bank_completed"]}," checkout status"]}," - indicates the pay via bank flow has completed."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GlomoBankTransferPayload"]}," type"]}," - new exported type for the bank transfer callback payload."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["useGlomoCheckout"]}," hook"]}," - for advanced integration patterns needing direct access to order type detection state."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"platform-configuration-new","__idx":26},"children":["Platform Configuration (New)"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Checkout flows with camera-based bank authentication require native permissions:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Android"]}," (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AndroidManifest.xml"]},"): ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["<uses-permission android:name=\"android.permission.CAMERA\" />"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["iOS"]}," (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Info.plist"]},"): ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["NSCameraUsageDescription"]}," key"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["These are only required for flows that use camera-based bank authentication."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["See the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/platform/sdk/react-native-sdk/migration"},"children":["Migration Guide"]}," for upgrade instructions from v1."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"202---2025-11-26","__idx":27},"children":["[2.0.2] - 2025-11-26"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Private v2 release candidate with experimental features. Not available for general use."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Backwards compatible with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v1.x"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"135---2026-04-10","__idx":28},"children":["[1.3.5] - 2026-04-10"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Last v1 release. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/platform/sdk/react-native-sdk/v1"},"children":["v1 documentation"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["LRS-only checkout via ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GlomoLrsCheckout"]}," component. Synchronous ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["start()"]}," method. Device security compliance via optional ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["jail-monkey"]}," integration."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"related","__idx":29},"children":["Related"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/platform/sdk/react-native-sdk/v5"},"children":["React Native SDK documentation"]}," - latest version (v5)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/platform/sdk/react-native-sdk/migration"},"children":["Migration Guide (v1 to v5)"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/platform/sdk/react-native-sdk/v4"},"children":["React Native SDK v4 (Archived)"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/platform/sdk/react-native-sdk/v3"},"children":["React Native SDK v3 (Archived)"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/platform/sdk/react-native-sdk/v1"},"children":["React Native SDK v1 (Archived)"]}]}]}]},"headings":[{"value":"React Native SDK - Changelog","id":"react-native-sdk---changelog","depth":1},{"value":"[5.1.0] - 2026-10-29","id":"510---2026-10-29","depth":2},{"value":"Added","id":"added","depth":3},{"value":"Changed","id":"changed","depth":3},{"value":"Notes","id":"notes","depth":3},{"value":"[5.0.0] - 2026-09-23","id":"500---2026-09-23","depth":2},{"value":"Breaking Changes","id":"breaking-changes","depth":3},{"value":"Added","id":"added-1","depth":3},{"value":"Fixed","id":"fixed","depth":3},{"value":"Internal","id":"internal","depth":3},{"value":"[4.1.0] - 2026-07-14","id":"410---2026-07-14","depth":2},{"value":"Internal","id":"internal-1","depth":3},{"value":"[4.0.0] - 2026-06-11","id":"400---2026-06-11","depth":2},{"value":"Breaking Changes","id":"breaking-changes-1","depth":3},{"value":"Added","id":"added-2","depth":3},{"value":"Unchanged","id":"unchanged","depth":3},{"value":"[3.1.0] - 2026-06-08","id":"310---2026-06-08","depth":2},{"value":"Added","id":"added-3","depth":3},{"value":"Changed","id":"changed-1","depth":3},{"value":"Deprecated","id":"deprecated","depth":3},{"value":"[3.0.1] - 2026-06-02","id":"301---2026-06-02","depth":2},{"value":"Added","id":"added-4","depth":3},{"value":"Fixed","id":"fixed-1","depth":3},{"value":"[3.0.0] - 2026-06-01","id":"300---2026-06-01","depth":2},{"value":"Breaking Changes","id":"breaking-changes-2","depth":3},{"value":"Added","id":"added-5","depth":3},{"value":"Platform Configuration (New)","id":"platform-configuration-new","depth":3},{"value":"[2.0.2] - 2025-11-26","id":"202---2025-11-26","depth":2},{"value":"[1.3.5] - 2026-04-10","id":"135---2026-04-10","depth":2},{"value":"Related","id":"related","depth":2}],"frontmatter":{"title":"React Native SDK Changelog","seo":{"title":"React Native SDK - Changelog"}},"lastModified":"2026-11-06T11:06:03.697Z","pagePropGetterError":{"message":"","name":""}},"slug":"/platform/sdk/react-native-sdk/changelog","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}