<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Weavr Changelog</title>
        <link>https://docs.weavr.io/changelog/</link>
        <description>Documentation | Weavr Blog</description>
        <lastBuildDate>Fri, 15 May 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <copyright>Copyright © 2026 Weavr Ltd.</copyright>
        <item>
            <title><![CDATA[iOS Components v3.5.1]]></title>
            <link>https://docs.weavr.io/changelog/ios-components-v-3-5-1/</link>
            <guid>https://docs.weavr.io/changelog/ios-components-v-3-5-1/</guid>
            <pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Fixes]]></description>
            <content:encoded><![CDATA[<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="fixes">Fixes<a href="https://docs.weavr.io/changelog/ios-components-v-3-5-1/#fixes" class="hash-link" aria-label="Direct link to Fixes" title="Direct link to Fixes" translate="no">​</a></h3>
<ul>
<li class="">Fixes the capitalization of "Nein" in the enrollment flow for consistency with the rest of the UI.</li>
</ul>]]></content:encoded>
            <category>iOS</category>
            <category>Components SDK</category>
        </item>
        <item>
            <title><![CDATA[React Native Components v5.4.0]]></title>
            <link>https://docs.weavr.io/changelog/rn-components-rn-v-5-4-0/</link>
            <guid>https://docs.weavr.io/changelog/rn-components-rn-v-5-4-0/</guid>
            <pubDate>Thu, 14 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Adds German localization. See the localization guide for more information.]]></description>
            <content:encoded><![CDATA[<p>Adds German localization. See the <a class="" href="https://docs.weavr.io/sdks/react-native/localization/">localization guide</a> for more information.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="added-adoption-is-optional">Added (adoption is optional)<a href="https://docs.weavr.io/changelog/rn-components-rn-v-5-4-0/#added-adoption-is-optional" class="hash-link" aria-label="Direct link to Added (adoption is optional)" title="Direct link to Added (adoption is optional)" translate="no">​</a></h3>
<ul>
<li class="">Added German localization to the SDK by adopting iOS v3.5.0 and Android v3.10.4.</li>
</ul>]]></content:encoded>
            <category>React Native</category>
            <category>Components SDK</category>
        </item>
        <item>
            <title><![CDATA[Weavr platform updates]]></title>
            <link>https://docs.weavr.io/changelog/2026/05/13/multi/release-110/</link>
            <guid>https://docs.weavr.io/changelog/2026/05/13/multi/release-110/</guid>
            <pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Set a user’s mobile during the invite process]]></description>
            <content:encoded><![CDATA[<p><em>Set a user’s mobile during the invite process</em></p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="set-a-users-mobile-during-the-invite-process">Set a user’s mobile during the invite process<a href="https://docs.weavr.io/changelog/2026/05/13/multi/release-110/#set-a-users-mobile-during-the-invite-process" class="hash-link" aria-label="Direct link to Set a user’s mobile during the invite process" title="Direct link to Set a user’s mobile during the invite process" translate="no">​</a></h2>
<p>We have introduced an alternative way to set a user’s mobile number when onboarding a user through the invite process.</p>
<p>At the point of creating an additional user for your embedded finance <span class="glossaryTermWrapper_xqTQ"><a href="https://docs.weavr.io/glossary#programme" class="glossaryTerm_wdF6" aria-describedby="tooltip-programme">programme</a><span id="tooltip-programme" class="tooltip_DUhm tooltipTop_L1lz tooltipFloating_oqgg" role="tooltip"><strong>Programme</strong> <!-- -->A programme represents your application within Weavr. Everything you create - Identities, Instruments, Transactions - sits beneath a Programme. When you register as an Embedder, you receive a Programme in the Sandbox and, once approved, one in Production.</span></span>, a mobile number for that user may not be known. It is already possible to create a user without a mobile; but previously, for users being onboarded via the user-invitation flow, it was possible to update the user’s mobile number (via <a href="https://api.weavr.io/products/multi/openapi/authorised-users/userupdate" target="_blank" rel="noopener noreferrer">PATCH/users</a>) after the login from the user invite. However, following the <a class="" href="https://docs.weavr.io/changelog/2026/03/24/multi/release-106/#linked-card-users-breaking-change">"Linked card user"</a> change, it is mandatory for a user-session to be stepped-up in order to call <a href="https://api.weavr.io/products/multi/openapi/authorised-users/userupdate" target="_blank" rel="noopener noreferrer">PATCH/users</a>. If a mobile number has not been set then this would not be possible.</p>
<p>To accommodate flows where the user provides their phone number as part of a user-onboarding flow, mobile can now be provided when consuming a user invite, which does not require a stepped up token.</p>
<p>Effected endpoints:</p>
<a href="https://api.weavr.io/products/multi/openapi/authorised-users/userinviteconsume" target="_blank" rel="noopener noreferrer">POST/users/{user_id}/invite/consume</a>
<br>
<br>
<p>An optional <code>mobile</code> field has been added, which will set the user’s phone number, that can be enrolled for OTPs as part of your remaining user-onboarding flow.</p>]]></content:encoded>
            <category>Weavr API</category>
            <category>Users</category>
        </item>
        <item>
            <title><![CDATA[Android Secure Components v3.10.4]]></title>
            <link>https://docs.weavr.io/changelog/android-secure-components-v-3-10-4/</link>
            <guid>https://docs.weavr.io/changelog/android-secure-components-v-3-10-4/</guid>
            <pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Patch release adding German localization support to the SDK UI.]]></description>
            <content:encoded><![CDATA[<p>Patch release adding German localization support to the SDK UI.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="added">Added<a href="https://docs.weavr.io/changelog/android-secure-components-v-3-10-4/#added" class="hash-link" aria-label="Direct link to Added" title="Direct link to Added" translate="no">​</a></h3>
<ul>
<li class=""><strong>German (de) localization</strong> — all SDK UI strings are now available in German across every flow.</li>
</ul>]]></content:encoded>
            <category>Android</category>
            <category>Secure Components</category>
            <category>sdk</category>
        </item>
        <item>
            <title><![CDATA[iOS Components v3.5.0]]></title>
            <link>https://docs.weavr.io/changelog/ios-components-v-3-5-0/</link>
            <guid>https://docs.weavr.io/changelog/ios-components-v-3-5-0/</guid>
            <pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Adds German localization]]></description>
            <content:encoded><![CDATA[<p>Adds German localization</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="added-adoption-is-optional">Added (adoption is optional)<a href="https://docs.weavr.io/changelog/ios-components-v-3-5-0/#added-adoption-is-optional" class="hash-link" aria-label="Direct link to Added (adoption is optional)" title="Direct link to Added (adoption is optional)" translate="no">​</a></h3>
<ul>
<li class="">Added German localization to the SDK.</li>
</ul>]]></content:encoded>
            <category>iOS</category>
            <category>Components SDK</category>
        </item>
        <item>
            <title><![CDATA[Android Secure Components v3.10.3]]></title>
            <link>https://docs.weavr.io/changelog/android-secure-components-v-3-10-3/</link>
            <guid>https://docs.weavr.io/changelog/android-secure-components-v-3-10-3/</guid>
            <pubDate>Wed, 06 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Patch release fixing a build-time class collision that prevented embedders from using certain third-party libraries.]]></description>
            <content:encoded><![CDATA[<p>Patch release fixing a build-time class collision that prevented <span class="glossaryTermWrapper_xqTQ"><a href="https://docs.weavr.io/glossary#embedder" class="glossaryTerm_wdF6" aria-describedby="tooltip-embedder">embedders</a><span id="tooltip-embedder" class="tooltip_DUhm tooltipTop_L1lz tooltipFloating_oqgg" role="tooltip"><strong>Embedder</strong> <!-- -->A company or developer that integrates Weavr's embedded finance services into their own application to provide financial services to their end customers.</span></span> from using certain third-party libraries.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="fixed">Fixed<a href="https://docs.weavr.io/changelog/android-secure-components-v-3-10-3/#fixed" class="hash-link" aria-label="Direct link to Fixed" title="Direct link to Fixed" translate="no">​</a></h3>
<ul>
<li class=""><strong>Build-time class collision</strong> - fixed a duplicate class error at dex-merge that occurred when the app also depended on a third-party library using aggressive code obfuscation.</li>
</ul>]]></content:encoded>
            <category>Android</category>
            <category>Secure Components</category>
        </item>
        <item>
            <title><![CDATA[Weavr platform updates]]></title>
            <link>https://docs.weavr.io/changelog/2026/04/30/multi/release-107/</link>
            <guid>https://docs.weavr.io/changelog/2026/04/30/multi/release-107/</guid>
            <pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Low balance webhook, Data Insights enhancements, and breaking-change reminders]]></description>
            <content:encoded><![CDATA[<p><em>Low balance webhook, Data Insights enhancements, and breaking-change reminders</em></p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="low-balance-webhook-notification">Low balance webhook notification<a href="https://docs.weavr.io/changelog/2026/04/30/multi/release-107/#low-balance-webhook-notification" class="hash-link" aria-label="Direct link to Low balance webhook notification" title="Direct link to Low balance webhook notification" translate="no">​</a></h2>
<p>We can now send a webhook notification when the balance of an account drops below a configured threshold. This lets you react proactively-for example by automatically initiating a top-up-before transactions start failing due to insufficient funds.</p>
<p>A single webhook fires when the balance crosses the threshold; further transactions while still below the threshold do not trigger additional webhooks. The notification becomes eligible to fire again only after the balance has recovered to or beyond the threshold.</p>
<p>Thresholds are configured per currency, so you can set independent values for EUR, GBP, and any other currencies your <span class="glossaryTermWrapper_xqTQ"><a href="https://docs.weavr.io/glossary#programme" class="glossaryTerm_wdF6" aria-describedby="tooltip-programme">programme</a><span id="tooltip-programme" class="tooltip_DUhm tooltipTop_L1lz tooltipFloating_oqgg" role="tooltip"><strong>Programme</strong> <!-- -->A programme represents your application within Weavr. Everything you create - Identities, Instruments, Transactions - sits beneath a Programme. When you register as an Embedder, you receive a Programme in the Sandbox and, once approved, one in Production.</span></span> supports. The feature is available on request-contact our support team with the currency and threshold amount you need.</p>
<p>For full details, see the <a class="" href="https://docs.weavr.io/instruments/accounts/webhook-events/#low-balance-webhooks">low-balance webhook documentation</a> and the <a href="https://api.weavr.io/products/webhooks/openapi/managed-accounts/managed_accounts_low_balance_watch" target="_blank" rel="noopener noreferrer" class="">webhook payload reference</a>.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="fund-movements-dashboard-on-data-insights">Fund movements dashboard on Data Insights<a href="https://docs.weavr.io/changelog/2026/04/30/multi/release-107/#fund-movements-dashboard-on-data-insights" class="hash-link" aria-label="Direct link to Fund movements dashboard on Data Insights" title="Direct link to Fund movements dashboard on Data Insights" translate="no">​</a></h2>
<p>A new <strong>Fund movements</strong> dashboard is available in <a class="" href="https://docs.weavr.io/portal/insights/">Data Insights</a>. It presents a clear view of your <span class="glossaryTermWrapper_xqTQ"><a href="https://docs.weavr.io/glossary#programme" class="glossaryTerm_wdF6" aria-describedby="tooltip-programme">programme</a><span id="tooltip-programme" class="tooltip_DUhm tooltipTop_L1lz tooltipFloating_oqgg" role="tooltip"><strong>Programme</strong> <!-- -->A programme represents your application within Weavr. Everything you create - Identities, Instruments, Transactions - sits beneath a Programme. When you register as an Embedder, you receive a Programme in the Sandbox and, once approved, one in Production.</span></span>'s financial activity for a given period, broken down into:</p>
<ul>
<li class=""><strong>Inflows</strong>-funds received successfully into <span class="glossaryTermWrapper_xqTQ"><a href="https://docs.weavr.io/glossary#instrument" class="glossaryTerm_wdF6" aria-describedby="tooltip-instrument">instruments</a><span id="tooltip-instrument" class="tooltip_DUhm tooltipTop_L1lz tooltipFloating_oqgg" role="tooltip"><strong>Instrument</strong> <!-- -->A financial product owned by an Identity. There are two types: Managed Accounts (stored-value accounts that hold balances and can receive wire transfers) and Managed Cards (prepaid cards - virtual or physical - used for purchases).</span></span></li>
<li class=""><strong>Outflows</strong>-funds successfully leaving <span class="glossaryTermWrapper_xqTQ"><a href="https://docs.weavr.io/glossary#instrument" class="glossaryTerm_wdF6" aria-describedby="tooltip-instrument">instruments</a><span id="tooltip-instrument" class="tooltip_DUhm tooltipTop_L1lz tooltipFloating_oqgg" role="tooltip"><strong>Instrument</strong> <!-- -->A financial product owned by an Identity. There are two types: Managed Accounts (stored-value accounts that hold balances and can receive wire transfers) and Managed Cards (prepaid cards - virtual or physical - used for purchases).</span></span></li>
<li class=""><strong>End-of-month balance</strong>-to support period-end reporting</li>
</ul>
<p>Data can be filtered by identity and time range, so you can focus on the view most relevant to your needs.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="user-roles-visible-in-the-corporates-dashboard">User roles visible in the Corporates dashboard<a href="https://docs.weavr.io/changelog/2026/04/30/multi/release-107/#user-roles-visible-in-the-corporates-dashboard" class="hash-link" aria-label="Direct link to User roles visible in the Corporates dashboard" title="Direct link to User roles visible in the Corporates dashboard" translate="no">​</a></h2>
<p>Following the release of <a class="" href="https://docs.weavr.io/identities/authorised-users/roles/">user roles</a> in March, the <a class="" href="https://docs.weavr.io/portal/insights/">Data Insights</a> <strong><span class="glossaryTermWrapper_xqTQ"><a href="https://docs.weavr.io/glossary#corporates" class="glossaryTerm_wdF6" aria-describedby="tooltip-corporates">Corporates</a><span id="tooltip-corporates" class="tooltip_DUhm tooltipTop_L1lz tooltipFloating_oqgg" role="tooltip"><strong>Corporates</strong> <!-- -->Business entities that can be onboarded as identities on Weavr. Corporate identities represent companies and require Know Your Business (KYB) verification. They can have multiple authorised users and issue cards to card assignees.</span></span></strong> dashboard now surfaces role assignments. Roles appear as a comma-separated list per user in the <strong>Corporate Users</strong> table, giving you a consolidated view of access levels across your user base.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="enhanced-card-level-filtering-in-data-insights">Enhanced card-level filtering in Data Insights<a href="https://docs.weavr.io/changelog/2026/04/30/multi/release-107/#enhanced-card-level-filtering-in-data-insights" class="hash-link" aria-label="Direct link to Enhanced card-level filtering in Data Insights" title="Direct link to Enhanced card-level filtering in Data Insights" translate="no">​</a></h2>
<p>To improve card-level visibility and simplify how activity is traced back to individual cards, we have added new filters and columns across several <a class="" href="https://docs.weavr.io/portal/insights/">Data Insights</a> dashboards:</p>
<ul>
<li class=""><strong><code>Card Friendly Name</code></strong> and <strong><code>Managed Card ID</code></strong> are now available as filters in the <strong>Authorisations</strong>, <strong>Settlements</strong>, <strong><span class="glossaryTermWrapper_xqTQ"><a href="https://docs.weavr.io/glossary#managed-card" class="glossaryTerm_wdF6" aria-describedby="tooltip-managed-card">Managed Cards</a><span id="tooltip-managed-card" class="tooltip_DUhm tooltipTop_L1lz tooltipFloating_oqgg" role="tooltip"><strong>Managed Card</strong> <!-- -->A payment card (virtual or physical) that can be created and managed through the Weavr platform. Cards can operate in prepaid mode (with their own balance) or debit mode (linked to a managed account). All cards must be assigned to a card assignee who is an Authorised User.</span></span></strong>, and <strong><span class="glossaryTermWrapper_xqTQ"><a href="https://docs.weavr.io/glossary#physical-card" class="glossaryTerm_wdF6" aria-describedby="tooltip-physical-card">Physical Cards</a><span id="tooltip-physical-card" class="tooltip_DUhm tooltipTop_L1lz tooltipFloating_oqgg" role="tooltip"><strong>Physical Card</strong> <!-- -->A payment card that is printed or embedded in wearables and sent to customers directly. Physical cards are created by first creating a virtual card and then upgrading it to a physical card. They are sent in an inactive state and must be activated by the card assignee before first use.</span></span></strong> dashboards.</li>
<li class=""><strong><code>Card Friendly Name</code></strong> is now also a column in the Details table of all dashboards.</li>
</ul>
<p>This makes the dashboards better suited to day-to-day operational queries and investigations.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="mobile-sdk-improvements">Mobile SDK improvements<a href="https://docs.weavr.io/changelog/2026/04/30/multi/release-107/#mobile-sdk-improvements" class="hash-link" aria-label="Direct link to Mobile SDK improvements" title="Direct link to Mobile SDK improvements" translate="no">​</a></h2>
<p>This release ships alongside several mobile SDK updates:</p>
<ul>
<li class=""><strong>Biometric enrollment improvements</strong>-more granular failure responses, an inactivity timeout during enrollment, and clearer error messages when a session is interrupted. See: <a class="" href="https://docs.weavr.io/changelog/rn-components-rn-v-5-3-0/">React Native v5.3.0</a>, <a class="" href="https://docs.weavr.io/changelog/ios-components-v-3-4-0/">iOS v3.4.0</a>, and <a class="" href="https://docs.weavr.io/changelog/android-secure-components-v-3-9-0/">Android v3.9.0</a>.</li>
<li class=""><strong>Step-up authentication reliability</strong>-clearer failure messages when SDK configuration or Play Integrity checks are still being prepared. See: <a class="" href="https://docs.weavr.io/changelog/rn-components-rn-v-5-3-1/">React Native v5.3.1</a>, <a class="" href="https://docs.weavr.io/changelog/android-secure-components-v-3-10-0/">Android v3.10.0</a>.</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="upcoming-breaking-changes">Upcoming breaking changes<a href="https://docs.weavr.io/changelog/2026/04/30/multi/release-107/#upcoming-breaking-changes" class="hash-link" aria-label="Direct link to Upcoming breaking changes" title="Direct link to Upcoming breaking changes" translate="no">​</a></h2>
<p>Two breaking changes announced in our March 2026 release require integration work before the production deadline of <strong>October 31, 2026</strong>:</p>
<ul>
<li class=""><strong><span class="glossaryTermWrapper_xqTQ"><a href="https://docs.weavr.io/glossary#verification-of-payee" class="glossaryTerm_wdF6" aria-describedby="tooltip-verification-of-payee">Verification of Payee</a><span id="tooltip-verification-of-payee" class="tooltip_DUhm tooltipTop_L1lz tooltipFloating_oqgg" role="tooltip"><strong>Verification of Payee</strong> <!-- -->The EU equivalent of Confirmation of Payee (CoP). A service that validates the name of a payment beneficiary against the IBAN registered with their bank or Payment Service Provider (PSP) before a SEPA payment is executed.</span></span></strong> for EUR Outgoing <span class="glossaryTermWrapper_xqTQ"><a href="https://docs.weavr.io/glossary#wire-transfer" class="glossaryTerm_wdF6" aria-describedby="tooltip-wire-transfer">Wire Transfers</a><span id="tooltip-wire-transfer" class="tooltip_DUhm tooltipTop_L1lz tooltipFloating_oqgg" role="tooltip"><strong>Wire Transfer</strong> <!-- -->A transaction that moves funds between accounts. An incoming wire transfer moves funds from a third-party bank account to a Weavr managed account, while an outgoing wire transfer moves funds from a Weavr managed account to a third-party bank account. Wire transfers require the managed account to have an assigned IBAN (for EUR) or sort code and account number (for GBP).</span></span>-mandated by the EU Instant Payments Regulation (IPR). Applies to <span class="glossaryTermWrapper_xqTQ"><a href="https://docs.weavr.io/glossary#programme" class="glossaryTerm_wdF6" aria-describedby="tooltip-programme">programmes</a><span id="tooltip-programme" class="tooltip_DUhm tooltipTop_L1lz tooltipFloating_oqgg" role="tooltip"><strong>Programme</strong> <!-- -->A programme represents your application within Weavr. Everything you create - Identities, Instruments, Transactions - sits beneath a Programme. When you register as an Embedder, you receive a Programme in the Sandbox and, once approved, one in Production.</span></span> with <span class="glossaryTermWrapper_xqTQ"><a href="https://docs.weavr.io/glossary#owt" class="glossaryTerm_wdF6" aria-describedby="tooltip-owt">OWTs</a><span id="tooltip-owt" class="tooltip_DUhm tooltipTop_L1lz tooltipFloating_oqgg" role="tooltip"><strong>OWT</strong> <!-- -->Outgoing Wire Transfer - a transaction that moves funds from a Weavr managed account to a bank account held at a third-party financial institution. OWTs require the managed account to have an assigned IBAN and the user to complete Strong Customer Authentication.</span></span> in EUR. See the <a class="" href="https://docs.weavr.io/transactions/owt/vop/overview/">VoP overview</a> and the <a class="" href="https://docs.weavr.io/transactions/owt/vop/vop-owt-create-execute/">create and execute guide</a>.</li>
<li class=""><strong>Linked <span class="glossaryTermWrapper_xqTQ"><a href="https://docs.weavr.io/glossary#card-user" class="glossaryTerm_wdF6" aria-describedby="tooltip-card-user">Card Users</a><span id="tooltip-card-user" class="tooltip_DUhm tooltipTop_L1lz tooltipFloating_oqgg" role="tooltip"><strong>Card User</strong> <!-- -->The person that a card is assigned to and who will use the card for purchases. Weavr does not support anonymous cards, and therefore all cards must be linked to a card user before a card can be used. For consumers, the card owner and the card user is typically the same person. For corporates, the card users are employees or individuals authorised to spend the corporate's funds.</span></span></strong>-every active <span class="glossaryTermWrapper_xqTQ"><a href="https://docs.weavr.io/glossary#managed-card" class="glossaryTerm_wdF6" aria-describedby="tooltip-managed-card">managed card</a><span id="tooltip-managed-card" class="tooltip_DUhm tooltipTop_L1lz tooltipFloating_oqgg" role="tooltip"><strong>Managed Card</strong> <!-- -->A payment card (virtual or physical) that can be created and managed through the Weavr platform. Cards can operate in prepaid mode (with their own balance) or debit mode (linked to a managed account). All cards must be assigned to a card assignee who is an Authorised User.</span></span> must be linked to a user with complete mandatory data and <span class="glossaryTermWrapper_xqTQ"><a href="https://docs.weavr.io/glossary#3ds" class="glossaryTerm_wdF6" aria-describedby="tooltip-3ds">3DS</a><span id="tooltip-3ds" class="tooltip_DUhm tooltipTop_L1lz tooltipFloating_oqgg" role="tooltip"><strong>3DS</strong> <!-- -->3-D Secure - an additional security layer for online credit and debit card transactions. It adds an authentication step where the cardholder verifies their identity with the card issuer during the purchase, reducing fraud and providing liability protection for merchants.</span></span> enrollment. Applies to <span class="glossaryTermWrapper_xqTQ"><a href="https://docs.weavr.io/glossary#programme" class="glossaryTerm_wdF6" aria-describedby="tooltip-programme">programmes</a><span id="tooltip-programme" class="tooltip_DUhm tooltipTop_L1lz tooltipFloating_oqgg" role="tooltip"><strong>Programme</strong> <!-- -->A programme represents your application within Weavr. Everything you create - Identities, Instruments, Transactions - sits beneath a Programme. When you register as an Embedder, you receive a Programme in the Sandbox and, once approved, one in Production.</span></span> that issue cards. See the <a class="" href="https://docs.weavr.io/instruments/cards/types/virtual-cards/">virtual cards documentation</a>, <a class="" href="https://docs.weavr.io/identities/authorised-users/onboard/">authorised user onboarding</a>, and <a class="" href="https://docs.weavr.io/instruments/cards/configuration/3ds/">3DS configuration</a>.</li>
</ul>
<p>To enable either feature on your sandbox account, contact our support team.</p>]]></content:encoded>
            <category>Weavr API</category>
            <category>Webhooks</category>
            <category>Data Insights</category>
            <category>Cards &amp; Payments</category>
            <category>Users</category>
        </item>
        <item>
            <title><![CDATA[Android Secure Components v3.10.2]]></title>
            <link>https://docs.weavr.io/changelog/android-secure-components-v-3-10-2/</link>
            <guid>https://docs.weavr.io/changelog/android-secure-components-v-3-10-2/</guid>
            <pubDate>Fri, 24 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Patch release improving the reliability of SDK initialisation when initializePSA and UXComponents.initialize are called in close succession.]]></description>
            <content:encoded><![CDATA[<p>Patch release improving the reliability of SDK initialisation when <code>initializePSA</code> and <code>UXComponents.initialize</code> are called in close succession.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="fixed">Fixed<a href="https://docs.weavr.io/changelog/android-secure-components-v-3-10-2/#fixed" class="hash-link" aria-label="Direct link to Fixed" title="Direct link to Fixed" translate="no">​</a></h3>
<ul>
<li class="">Fixed biometric enrollment race condition on initialisation.</li>
</ul>]]></content:encoded>
            <category>Android</category>
            <category>Secure Components</category>
        </item>
        <item>
            <title><![CDATA[React Native Components v5.3.2]]></title>
            <link>https://docs.weavr.io/changelog/rn-components-rn-v-5-3-2/</link>
            <guid>https://docs.weavr.io/changelog/rn-components-rn-v-5-3-2/</guid>
            <pubDate>Fri, 24 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Update to Android components 3.10.2, improving the reliability of SDK initialisation when initializePSA and UXComponents.initialize are called in close succession.]]></description>
            <content:encoded><![CDATA[<p>Update to Android components <a class="" href="https://docs.weavr.io/changelog/android-secure-components-v-3-10-2/">3.10.2</a>, improving the reliability of SDK initialisation when <code>initializePSA</code> and <code>UXComponents.initialize</code> are called in close succession.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="fixed">Fixed<a href="https://docs.weavr.io/changelog/rn-components-rn-v-5-3-2/#fixed" class="hash-link" aria-label="Direct link to Fixed" title="Direct link to Fixed" translate="no">​</a></h3>
<ul>
<li class="">Fixed biometric enrollment race condition on initialisation (resolved in Android SDK <a class="" href="https://docs.weavr.io/changelog/android-secure-components-v-3-10-2/">3.10.2</a>)</li>
</ul>]]></content:encoded>
            <category>React Native</category>
            <category>Components SDK</category>
        </item>
        <item>
            <title><![CDATA[Android Secure Components v3.10.1]]></title>
            <link>https://docs.weavr.io/changelog/android-secure-components-v-3-10-1/</link>
            <guid>https://docs.weavr.io/changelog/android-secure-components-v-3-10-1/</guid>
            <pubDate>Thu, 23 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Patch release improving the reliability of SDK initialisation when initializePSA and UXComponents.initialize are called in close succession.]]></description>
            <content:encoded><![CDATA[<p>Patch release improving the reliability of SDK initialisation when <code>initializePSA</code> and <code>UXComponents.initialize</code> are called in close succession.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="fixed">Fixed<a href="https://docs.weavr.io/changelog/android-secure-components-v-3-10-1/#fixed" class="hash-link" aria-label="Direct link to Fixed" title="Direct link to Fixed" translate="no">​</a></h3>
<ul>
<li class="">Fixed biometric enrollment race condition on initialisation.</li>
</ul>]]></content:encoded>
            <category>Android</category>
            <category>Secure Components</category>
        </item>
        <item>
            <title><![CDATA[React Native Components v5.3.1]]></title>
            <link>https://docs.weavr.io/changelog/rn-components-rn-v-5-3-1/</link>
            <guid>https://docs.weavr.io/changelog/rn-components-rn-v-5-3-1/</guid>
            <pubDate>Tue, 14 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Update to Android components 3.10.0, featuring improved reliability for PSA (push step-up authentication) flows and clearer failure messages.]]></description>
            <content:encoded><![CDATA[<p>Update to Android components <a class="" href="https://docs.weavr.io/changelog/android-secure-components-v-3-10-0/">3.10.0</a>, featuring improved reliability for <span class="glossaryTermWrapper_xqTQ"><a href="https://docs.weavr.io/glossary#psa" class="glossaryTerm_wdF6" aria-describedby="tooltip-psa">PSA</a><span id="tooltip-psa" class="tooltip_DUhm tooltipTop_L1lz tooltipFloating_oqgg" role="tooltip"><strong>PSA</strong> <!-- -->Push Step-up Authentication - the mechanism in our mobile SDKs that delivers a step-up challenge to an enrolled device as a push notification and verifies it with the user's device biometrics. PSA covers device enrollment, biometric login, and biometric verification of SCA challenges for sensitive operations such as outgoing wire transfers or accessing card details. Exposed as `UXComponents.psa` on iOS and Android and via `initializePSA` on React Native.</span></span> (push step-up authentication) flows and clearer failure messages.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="changed">Changed<a href="https://docs.weavr.io/changelog/rn-components-rn-v-5-3-1/#changed" class="hash-link" aria-label="Direct link to Changed" title="Direct link to Changed" translate="no">​</a></h3>
<ul>
<li class="">Bumped Android components dependency to <a class="" href="https://docs.weavr.io/changelog/android-secure-components-v-3-10-0/">3.10.0</a></li>
<li class="">When a security-sensitive user journey (e.g., enrollment, biometric login, or step-up approval) fails because configuration or Play Integrity could not be ready in time, <code>WeavrError.message</code> may now include a more specific reason (such as timeout or token failure) instead of a generic network error</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="fixed">Fixed<a href="https://docs.weavr.io/changelog/rn-components-rn-v-5-3-1/#fixed" class="hash-link" aria-label="Direct link to Fixed" title="Direct link to Fixed" translate="no">​</a></h3>
<ul>
<li class="">Fixed cases where enrollment, biometric login, or step-up approval could start before Play Integrity was fully ready, which could lead to missing integrity data or a poor user experience (resolved in Android SDK 3.10.0)</li>
</ul>]]></content:encoded>
            <category>React Native</category>
            <category>Components SDK</category>
        </item>
        <item>
            <title><![CDATA[Android Secure Components v3.10.0]]></title>
            <link>https://docs.weavr.io/changelog/android-secure-components-v-3-10-0/</link>
            <guid>https://docs.weavr.io/changelog/android-secure-components-v-3-10-0/</guid>
            <pubDate>Mon, 13 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Improved reliability for PSA (push step-up authentication) user journeys when SDK configuration and Play Integrity checks are still being prepared, and clearer failure messages when those steps do not complete in time.]]></description>
            <content:encoded><![CDATA[<p>Improved reliability for <span class="glossaryTermWrapper_xqTQ"><a href="https://docs.weavr.io/glossary#psa" class="glossaryTerm_wdF6" aria-describedby="tooltip-psa">PSA</a><span id="tooltip-psa" class="tooltip_DUhm tooltipTop_L1lz tooltipFloating_oqgg" role="tooltip"><strong>PSA</strong> <!-- -->Push Step-up Authentication - the mechanism in our mobile SDKs that delivers a step-up challenge to an enrolled device as a push notification and verifies it with the user's device biometrics. PSA covers device enrollment, biometric login, and biometric verification of SCA challenges for sensitive operations such as outgoing wire transfers or accessing card details. Exposed as `UXComponents.psa` on iOS and Android and via `initializePSA` on React Native.</span></span> (push step-up authentication) user journeys when SDK configuration and Play Integrity checks are still being prepared, and clearer failure messages when those steps do not complete in time.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="changed">Changed<a href="https://docs.weavr.io/changelog/android-secure-components-v-3-10-0/#changed" class="hash-link" aria-label="Direct link to Changed" title="Direct link to Changed" translate="no">​</a></h3>
<ul>
<li class=""><strong>Error messages on failure</strong>-when a security-sensitive user journey (for example, enrollment, biometric login, or step-up approval) fails because configuration or Play Integrity could not be ready in time, listeners and callbacks may receive a more specific <code>ErrorResponse.message</code> (including a short reason such as timeout or token failure) instead of a generic network error.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="fixed">Fixed<a href="https://docs.weavr.io/changelog/android-secure-components-v-3-10-0/#fixed" class="hash-link" aria-label="Direct link to Fixed" title="Direct link to Fixed" translate="no">​</a></h3>
<ul>
<li class=""><strong>Timing around config and <span class="glossaryTermWrapper_xqTQ"><a href="https://docs.weavr.io/glossary#psa" class="glossaryTerm_wdF6" aria-describedby="tooltip-psa">PSA</a><span id="tooltip-psa" class="tooltip_DUhm tooltipTop_L1lz tooltipFloating_oqgg" role="tooltip"><strong>PSA</strong> <!-- -->Push Step-up Authentication - the mechanism in our mobile SDKs that delivers a step-up challenge to an enrolled device as a push notification and verifies it with the user's device biometrics. PSA covers device enrollment, biometric login, and biometric verification of SCA challenges for sensitive operations such as outgoing wire transfers or accessing card details. Exposed as `UXComponents.psa` on iOS and Android and via `initializePSA` on React Native.</span></span> flows</strong>-fixed cases where enrollment, biometric login, or step-up approval could start before Play Integrity was fully ready, which could lead to missing integrity data or a poor user experience.</li>
</ul>]]></content:encoded>
            <category>Android</category>
            <category>Secure Components</category>
        </item>
        <item>
            <title><![CDATA[React Native Components v3.0.2]]></title>
            <link>https://docs.weavr.io/changelog/rn-components-v-3-0-2/</link>
            <guid>https://docs.weavr.io/changelog/rn-components-v-3-0-2/</guid>
            <pubDate>Thu, 09 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Updates iOS native SDK to v3.4.0.]]></description>
            <content:encoded><![CDATA[<p>Updates iOS native SDK to <a class="" href="https://docs.weavr.io/changelog/ios-components-v-3-4-0/">v3.4.0</a>.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="changed">Changed<a href="https://docs.weavr.io/changelog/rn-components-v-3-0-2/#changed" class="hash-link" aria-label="Direct link to Changed" title="Direct link to Changed" translate="no">​</a></h3>
<ul>
<li class="">Updated iOS SDK version to <a class="" href="https://docs.weavr.io/changelog/ios-components-v-3-4-0/">v3.4.0</a></li>
</ul>]]></content:encoded>
            <category>React Native</category>
            <category>Components SDK</category>
        </item>
        <item>
            <title><![CDATA[React Native Components v4.1.0]]></title>
            <link>https://docs.weavr.io/changelog/mobile-sdk/components/react-native/v4-1-0/</link>
            <guid>https://docs.weavr.io/changelog/mobile-sdk/components/react-native/v4-1-0/</guid>
            <pubDate>Thu, 09 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Updates to iOS v3.4.0 and Android v3.9.0.]]></description>
            <content:encoded><![CDATA[<p>Updates to iOS <a class="" href="https://docs.weavr.io/changelog/ios-components-v-3-4-0/">v3.4.0</a> and Android <a class="" href="https://docs.weavr.io/changelog/android-secure-components-v-3-9-0/">v3.9.0</a>.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="changed">Changed<a href="https://docs.weavr.io/changelog/mobile-sdk/components/react-native/v4-1-0/#changed" class="hash-link" aria-label="Direct link to Changed" title="Direct link to Changed" translate="no">​</a></h3>
<ul>
<li class="">Updated iOS SDK version to <a class="" href="https://docs.weavr.io/changelog/ios-components-v-3-4-0/">v3.4.0</a></li>
<li class="">Updated Android SDK version to <a class="" href="https://docs.weavr.io/changelog/android-secure-components-v-3-9-0/">v3.9.0</a></li>
</ul>]]></content:encoded>
            <category>React Native</category>
            <category>Components SDK</category>
        </item>
        <item>
            <title><![CDATA[React Native Components v5.3.0]]></title>
            <link>https://docs.weavr.io/changelog/rn-components-rn-v-5-3-0/</link>
            <guid>https://docs.weavr.io/changelog/rn-components-rn-v-5-3-0/</guid>
            <pubDate>Thu, 09 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Improves the public interface of the biometrics enrollment flow, and minor fixes.]]></description>
            <content:encoded><![CDATA[<p>Improves the public interface of the biometrics enrollment flow, and minor fixes.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="added">Added<a href="https://docs.weavr.io/changelog/rn-components-rn-v-5-3-0/#added" class="hash-link" aria-label="Direct link to Added" title="Direct link to Added" translate="no">​</a></h3>
<ul>
<li class=""><code>BiometricsEnrollmentResult</code> to define the potential outcomes of the enrollment process.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="changed">Changed<a href="https://docs.weavr.io/changelog/rn-components-rn-v-5-3-0/#changed" class="hash-link" aria-label="Direct link to Changed" title="Direct link to Changed" translate="no">​</a></h3>
<ul>
<li class="">Updated iOS SDK version to 3.4.0</li>
<li class="">Updated Android SDK version to 3.9.0</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="deprecated">Deprecated<a href="https://docs.weavr.io/changelog/rn-components-rn-v-5-3-0/#deprecated" class="hash-link" aria-label="Direct link to Deprecated" title="Direct link to Deprecated" translate="no">​</a></h3>
<ul>
<li class="">Deprecated <code>startEnrollment(firebaseToken: string, authToken: string): Promise&lt;Result&lt;string, WeavrError&gt;&gt;;</code> in favor of <code>startEnrollment(): Promise&lt;BiometricsEnrollmentResult&gt;;</code></li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="migration-guide">Migration guide<a href="https://docs.weavr.io/changelog/rn-components-rn-v-5-3-0/#migration-guide" class="hash-link" aria-label="Direct link to Migration guide" title="Direct link to Migration guide" translate="no">​</a></h2>
<p>Update any calls to <code>startEnrollment(firebaseToken: string, authToken: string)</code> to <code>startEnrollment()</code>, making sure you take the following actions:</p>
<ul>
<li class="">Ensure you have provided a fresh token to <code>setUserToken()</code></li>
<li class="">Ensure you have provided a fresh Firebase Cloud Messaging (FCM) token via <code>updateFCMToken()</code></li>
<li class="">Update your call to <code>startEnrollment</code> to a snippet similar to:</li>
</ul>
<div class="language-tsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-tsx codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">let</span><span class="token plain"> result </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">startEnrollment</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">switch</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">result</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">case</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">case</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"completed"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token console class-name" style="color:rgb(255, 203, 107)">console</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">log</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">"Enrollment completed"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">break</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">case</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"initialisationError"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token console class-name" style="color:rgb(255, 203, 107)">console</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">log</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">"SDK not initialised:"</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">+</span><span class="token plain"> result</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">error</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">break</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">case</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"cryptographyError"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token console class-name" style="color:rgb(255, 203, 107)">console</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">log</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">"Cryptography error:"</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">+</span><span class="token plain"> result</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">error</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">break</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">case</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"noBiometricsAvailable"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">switch</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">result</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">biometricAvailability</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token keyword" style="font-style:italic">case</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"noneEnrolled"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token console class-name" style="color:rgb(255, 203, 107)">console</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">log</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">"Device supports biometrics but none are enrolled"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token keyword" style="font-style:italic">break</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token keyword" style="font-style:italic">case</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"hwUnavailable"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token console class-name" style="color:rgb(255, 203, 107)">console</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">log</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">"Biometrics hardware is temporarily unavailable"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token keyword" style="font-style:italic">break</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">      </span><span class="token keyword" style="font-style:italic">case</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"noHardware"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token console class-name" style="color:rgb(255, 203, 107)">console</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">log</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">"Device has no biometrics hardware"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token keyword" style="font-style:italic">break</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">break</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">case</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"challengeFailed"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token console class-name" style="color:rgb(255, 203, 107)">console</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">log</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">"Challenge failed:"</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">+</span><span class="token plain"> result</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">cause</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">break</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">case</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"failedBiometricsChallenge"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token console class-name" style="color:rgb(255, 203, 107)">console</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">log</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">"User failed biometrics challenge"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">break</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">case</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"unauthorized"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token console class-name" style="color:rgb(255, 203, 107)">console</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">log</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">"Unauthorized. Please sign in again."</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">break</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">case</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"userDoesNotConsent"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token console class-name" style="color:rgb(255, 203, 107)">console</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">log</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">"User did not consent to enrollment"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">break</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">case</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"failedToLoadBrand"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token console class-name" style="color:rgb(255, 203, 107)">console</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">log</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">"Failed to load biometrics configuration"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">break</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">case</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"noPhoneNumberAvailable"</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token console class-name" style="color:rgb(255, 203, 107)">console</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">log</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">"No phone number available"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">break</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div>]]></content:encoded>
            <category>React Native</category>
            <category>Components SDK</category>
        </item>
        <item>
            <title><![CDATA[Android Secure Components v3.9.0]]></title>
            <link>https://docs.weavr.io/changelog/android-secure-components-v-3-9-0/</link>
            <guid>https://docs.weavr.io/changelog/android-secure-components-v-3-9-0/</guid>
            <pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Improves the public interface of the biometrics enrollment flow and minor fixes.]]></description>
            <content:encoded><![CDATA[<p>Improves the public interface of the biometrics enrollment flow and minor fixes.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="added">Added<a href="https://docs.weavr.io/changelog/android-secure-components-v-3-9-0/#added" class="hash-link" aria-label="Direct link to Added" title="Direct link to Added" translate="no">​</a></h3>
<ul>
<li class="">Added <code>startEnrollment(activity, certificates, completion)</code> to improve the result reporting of enrollment flow via <code>WeavrEnrollmentResult</code>.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="changed">Changed<a href="https://docs.weavr.io/changelog/android-secure-components-v-3-9-0/#changed" class="hash-link" aria-label="Direct link to Changed" title="Direct link to Changed" translate="no">​</a></h3>
<ul>
<li class="">Improved SDK initialization performance-internal security token generation is now deferred until first use, reducing startup latency.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="fixed">Fixed<a href="https://docs.weavr.io/changelog/android-secure-components-v-3-9-0/#fixed" class="hash-link" aria-label="Direct link to Fixed" title="Direct link to Fixed" translate="no">​</a></h3>
<ul>
<li class="">Fixed 401 responses during enrollment not dismissing the flow correctly.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="deprecated">Deprecated<a href="https://docs.weavr.io/changelog/android-secure-components-v-3-9-0/#deprecated" class="hash-link" aria-label="Direct link to Deprecated" title="Direct link to Deprecated" translate="no">​</a></h3>
<ul>
<li class="">Deprecated <code>startPSAEnrollment(activity, firebaseToken, authToken, certificates, listener)</code> in favor of <code>startEnrollment(activity, certificates, completion)</code>.</li>
</ul>
<hr>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="migration-guide">Migration guide<a href="https://docs.weavr.io/changelog/android-secure-components-v-3-9-0/#migration-guide" class="hash-link" aria-label="Direct link to Migration guide" title="Direct link to Migration guide" translate="no">​</a></h3>
<p>To adopt the new <code>startEnrollment</code> method you need to take the following actions:</p>
<p>Ensure you have called the following prerequisites in order:</p>
<ol>
<li class=""><code>UXComponents.initialize(context, env, uiKey)</code>-at app startup</li>
<li class=""><code>UXComponents.psa.initialize(context, psaENV, logger)</code>-at app startup</li>
<li class=""><code>UXComponents.setUserToken(context, token, listener)</code>-after user login</li>
<li class=""><code>UXComponents.psa.updateDeviceToken(fcmToken, listener)</code>-after user login</li>
</ol>
<p>Update your calling site to a snippet similar to the following:</p>
<div class="language-kotlin codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-kotlin codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">UXComponents</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">psa</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">startEnrollment</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    activity </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">this</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    certificates </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> R</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">array</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">com_google_android_gms_fonts_certs</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    completion </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> result </span><span class="token operator" style="color:rgb(137, 221, 255)">-&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token keyword" style="font-style:italic">when</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">result</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">            </span><span class="token keyword" style="font-style:italic">is</span><span class="token plain"> WeavrEnrollmentResult</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">Completed </span><span class="token operator" style="color:rgb(137, 221, 255)">-&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">                </span><span class="token function" style="color:rgb(130, 170, 255)">println</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string-literal singleline string" style="color:rgb(195, 232, 141)">"The enrollment was completed successfully"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">            </span><span class="token keyword" style="font-style:italic">is</span><span class="token plain"> WeavrEnrollmentResult</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">InitialisationError </span><span class="token operator" style="color:rgb(137, 221, 255)">-&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">                </span><span class="token function" style="color:rgb(130, 170, 255)">println</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string-literal singleline string" style="color:rgb(195, 232, 141)">"There was an error while initialising the enrollment flow: </span><span class="token string-literal singleline interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">${</span><span class="token string-literal singleline interpolation expression">result</span><span class="token string-literal singleline interpolation expression punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token string-literal singleline interpolation expression">error</span><span class="token string-literal singleline interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token string-literal singleline string" style="color:rgb(195, 232, 141)">"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">            </span><span class="token keyword" style="font-style:italic">is</span><span class="token plain"> WeavrEnrollmentResult</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">CryptographyError </span><span class="token operator" style="color:rgb(137, 221, 255)">-&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">                </span><span class="token function" style="color:rgb(130, 170, 255)">println</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string-literal singleline string" style="color:rgb(195, 232, 141)">"There was an error in the cryptography operations: </span><span class="token string-literal singleline interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">${</span><span class="token string-literal singleline interpolation expression">result</span><span class="token string-literal singleline interpolation expression punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token string-literal singleline interpolation expression">error</span><span class="token string-literal singleline interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token string-literal singleline string" style="color:rgb(195, 232, 141)">"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">            </span><span class="token keyword" style="font-style:italic">is</span><span class="token plain"> WeavrEnrollmentResult</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">FailedBiometricsChallenge </span><span class="token operator" style="color:rgb(137, 221, 255)">-&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">                </span><span class="token function" style="color:rgb(130, 170, 255)">println</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string-literal singleline string" style="color:rgb(195, 232, 141)">"The user failed the biometrics challenge"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">            </span><span class="token keyword" style="font-style:italic">is</span><span class="token plain"> WeavrEnrollmentResult</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">Unauthorized </span><span class="token operator" style="color:rgb(137, 221, 255)">-&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">                </span><span class="token function" style="color:rgb(130, 170, 255)">println</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string-literal singleline string" style="color:rgb(195, 232, 141)">"The token present in the SDK is not valid"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">            </span><span class="token keyword" style="font-style:italic">is</span><span class="token plain"> WeavrEnrollmentResult</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">UserDoesNotConsent </span><span class="token operator" style="color:rgb(137, 221, 255)">-&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">                </span><span class="token function" style="color:rgb(130, 170, 255)">println</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string-literal singleline string" style="color:rgb(195, 232, 141)">"The user cancelled the flow"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">            </span><span class="token keyword" style="font-style:italic">is</span><span class="token plain"> WeavrEnrollmentResult</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">FailedToLoadBrand </span><span class="token operator" style="color:rgb(137, 221, 255)">-&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">                </span><span class="token function" style="color:rgb(130, 170, 255)">println</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string-literal singleline string" style="color:rgb(195, 232, 141)">"Failed to load the brand configuration"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">            </span><span class="token keyword" style="font-style:italic">is</span><span class="token plain"> WeavrEnrollmentResult</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">NoPhoneNumberAvailable </span><span class="token operator" style="color:rgb(137, 221, 255)">-&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">                </span><span class="token function" style="color:rgb(130, 170, 255)">println</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string-literal singleline string" style="color:rgb(195, 232, 141)">"No phone number available to perform the SMS OTP flow"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">            </span><span class="token keyword" style="font-style:italic">is</span><span class="token plain"> WeavrEnrollmentResult</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">NoBiometricsAvailable </span><span class="token operator" style="color:rgb(137, 221, 255)">-&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">                </span><span class="token function" style="color:rgb(130, 170, 255)">println</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string-literal singleline string" style="color:rgb(195, 232, 141)">"No biometrics available. Availability: </span><span class="token string-literal singleline interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">${</span><span class="token string-literal singleline interpolation expression">result</span><span class="token string-literal singleline interpolation expression punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token string-literal singleline interpolation expression">availability</span><span class="token string-literal singleline interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token string-literal singleline string" style="color:rgb(195, 232, 141)">"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">            </span><span class="token keyword" style="font-style:italic">is</span><span class="token plain"> WeavrEnrollmentResult</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">ChallengeFailed </span><span class="token operator" style="color:rgb(137, 221, 255)">-&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">                </span><span class="token function" style="color:rgb(130, 170, 255)">println</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string-literal singleline string" style="color:rgb(195, 232, 141)">"The challenge failed due to </span><span class="token string-literal singleline interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">${</span><span class="token string-literal singleline interpolation expression">result</span><span class="token string-literal singleline interpolation expression punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token string-literal singleline interpolation expression">cause</span><span class="token string-literal singleline interpolation interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token string-literal singleline string" style="color:rgb(195, 232, 141)">"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="result-reference">Result reference<a href="https://docs.weavr.io/changelog/android-secure-components-v-3-9-0/#result-reference" class="hash-link" aria-label="Direct link to Result reference" title="Direct link to Result reference" translate="no">​</a></h3>
<table><thead><tr><th>Result</th><th>Description</th></tr></thead><tbody><tr><td><code>Completed</code></td><td>Enrollment finished successfully.</td></tr><tr><td><code>InitialisationError</code></td><td>The enrollment flow could not be initialised.</td></tr><tr><td><code>CryptographyError</code></td><td>A cryptography operation failed.</td></tr><tr><td><code>FailedBiometricsChallenge</code></td><td>The user failed the biometric prompt.</td></tr><tr><td><code>Unauthorized</code></td><td>The user token stored in the SDK is invalid or expired.</td></tr><tr><td><code>UserDoesNotConsent</code></td><td>The user cancelled or dismissed the flow.</td></tr><tr><td><code>FailedToLoadBrand</code></td><td>Brand configuration could not be loaded.</td></tr><tr><td><code>NoPhoneNumberAvailable</code></td><td>No phone number is available for the SMS OTP step.</td></tr><tr><td><code>NoBiometricsAvailable</code></td><td>The device has no usable biometrics enrolled.</td></tr><tr><td><code>ChallengeFailed</code></td><td>The challenge failed; inspect <code>result.cause</code> for details.</td></tr></tbody></table>]]></content:encoded>
            <category>Android</category>
            <category>Secure Components</category>
        </item>
        <item>
            <title><![CDATA[iOS Components v3.4.0]]></title>
            <link>https://docs.weavr.io/changelog/ios-components-v-3-4-0/</link>
            <guid>https://docs.weavr.io/changelog/ios-components-v-3-4-0/</guid>
            <pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Improves the public interface of the biometrics enrollment flow, and underlying minor fixes.]]></description>
            <content:encoded><![CDATA[<p>Improves the public interface of the biometrics enrollment flow, and underlying minor fixes.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="added-adoption-is-optional">Added (adoption is optional)<a href="https://docs.weavr.io/changelog/ios-components-v-3-4-0/#added-adoption-is-optional" class="hash-link" aria-label="Direct link to Added (adoption is optional)" title="Direct link to Added (adoption is optional)" translate="no">​</a></h3>
<ul>
<li class="">Added <code>startEnrollment(viewController:completion:)</code> to improve the result reporting of enrollment flow via <code>BiometricsEnrollmentResult</code>.</li>
<li class="">Added <code>credentials</code> to <code>WeavrSecureLoginData</code>.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="changed-also-optional">Changed (also optional)<a href="https://docs.weavr.io/changelog/ios-components-v-3-4-0/#changed-also-optional" class="hash-link" aria-label="Direct link to Changed (also optional)" title="Direct link to Changed (also optional)" translate="no">​</a></h3>
<ul>
<li class="">Surfaced HTTP 401 errors in <code>startEnrollment(vc:token:completion:)</code> by providing an <code>ErrorResponse</code> with a <code>401</code> code. This code should be handled by triggering a new login, and setting the token on the SDK again via <code>UXComponents</code>.</li>
<li class="">Improved wording on alerts displayed during the start of the enrollment flow.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="fixed">Fixed<a href="https://docs.weavr.io/changelog/ios-components-v-3-4-0/#fixed" class="hash-link" aria-label="Direct link to Fixed" title="Direct link to Fixed" translate="no">​</a></h3>
<ul>
<li class="">Fixed scenarios where <code>SecureCardNumberLabel</code> fails to detokenize without reporting an error.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="deprecated">Deprecated<a href="https://docs.weavr.io/changelog/ios-components-v-3-4-0/#deprecated" class="hash-link" aria-label="Direct link to Deprecated" title="Direct link to Deprecated" translate="no">​</a></h3>
<ul>
<li class="">Deprecated <code>startEnrollment(vc:token:completion:)</code> in favor of <code>startEnrollment(viewController:completion:)</code>.</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="migration-guide">Migration guide<a href="https://docs.weavr.io/changelog/ios-components-v-3-4-0/#migration-guide" class="hash-link" aria-label="Direct link to Migration guide" title="Direct link to Migration guide" translate="no">​</a></h2>
<p>To adopt the new <code>startEnrollment</code> method you just need to take the following actions:</p>
<ul>
<li class="">Ensure you have provided a fresh token to <code>UXComponents.setUserToken(token:)</code></li>
<li class="">Update your calling site to a snippet similar to the following:</li>
</ul>
<div class="language-swift codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-swift codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#bfc7d5"><span class="token class-name" style="color:rgb(255, 203, 107)">UXComponents</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">psa</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">startEnrollment</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">viewController</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> viewController</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> res </span><span class="token keyword" style="font-style:italic">in</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">switch</span><span class="token plain"> res </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">case</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">completed</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token function" style="color:rgb(130, 170, 255)">print</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string-literal string" style="color:rgb(195, 232, 141)">"The enrollment was completed successfully"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">case</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">initialisationError</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">error</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">let</span><span class="token plain"> error</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token function" style="color:rgb(130, 170, 255)">print</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string-literal string" style="color:rgb(195, 232, 141)">"There was an error while initialising the enrollment flow: </span><span class="token string-literal interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">\(</span><span class="token string-literal interpolation">error</span><span class="token string-literal interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token string-literal string" style="color:rgb(195, 232, 141)">"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">case</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">cryptographyError</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">error</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">let</span><span class="token plain"> error</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token function" style="color:rgb(130, 170, 255)">print</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string-literal string" style="color:rgb(195, 232, 141)">"There was an error in the cryptography operations of the enrollment flow: </span><span class="token string-literal interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">\(</span><span class="token string-literal interpolation">error</span><span class="token string-literal interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token string-literal string" style="color:rgb(195, 232, 141)">"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">case</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">failedBiometricsChallenge</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token function" style="color:rgb(130, 170, 255)">print</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string-literal string" style="color:rgb(195, 232, 141)">"The user failed the biometrics challenge"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">case</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">unauthorized</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token function" style="color:rgb(130, 170, 255)">print</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string-literal string" style="color:rgb(195, 232, 141)">"The token present in the SDK is not valid"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">case</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">userDoesNotConsent</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token function" style="color:rgb(130, 170, 255)">print</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string-literal string" style="color:rgb(195, 232, 141)">"The user cancelled the flow"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">case</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">failedToLoadBrand</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token function" style="color:rgb(130, 170, 255)">print</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string-literal string" style="color:rgb(195, 232, 141)">"Failed to load the brand configuration."</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">case</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">noPhoneNumberAvailable</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token function" style="color:rgb(130, 170, 255)">print</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string-literal string" style="color:rgb(195, 232, 141)">"No phone number available to perform the SMS OTP flow."</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">case</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">noBiometricsAvailable</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">hardwareSupportsBiometrics</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">let</span><span class="token plain"> hardwareSupportsBiometrics</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token function" style="color:rgb(130, 170, 255)">print</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string-literal string" style="color:rgb(195, 232, 141)">"No biometrics available. Hardware supports biometrics: </span><span class="token string-literal interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">\(</span><span class="token string-literal interpolation">hardwareSupportsBiometrics</span><span class="token string-literal interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token string-literal string" style="color:rgb(195, 232, 141)">"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">case</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">challengeFailed</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">cause</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">let</span><span class="token plain"> cause</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token function" style="color:rgb(130, 170, 255)">print</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string-literal string" style="color:rgb(195, 232, 141)">"The challenge failed due to </span><span class="token string-literal interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">\(</span><span class="token string-literal interpolation">cause</span><span class="token string-literal interpolation-punctuation punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token string-literal string" style="color:rgb(195, 232, 141)">"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div>]]></content:encoded>
            <category>iOS</category>
            <category>Components SDK</category>
        </item>
        <item>
            <title><![CDATA[Weavr API updates]]></title>
            <link>https://docs.weavr.io/changelog/2026/03/24/multi/release-106/</link>
            <guid>https://docs.weavr.io/changelog/2026/03/24/multi/release-106/</guid>
            <pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[User roles and linked card users]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="user-roles-and-linked-card-users">User roles and linked card users<a href="https://docs.weavr.io/changelog/2026/03/24/multi/release-106/#user-roles-and-linked-card-users" class="hash-link" aria-label="Direct link to User roles and linked card users" title="Direct link to User roles and linked card users" translate="no">​</a></h2>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="user-roles">User roles<a href="https://docs.weavr.io/changelog/2026/03/24/multi/release-106/#user-roles" class="hash-link" aria-label="Direct link to User roles" title="Direct link to User roles" translate="no">​</a></h2>
<p>Users within a corporate identity often interact with your service for a specific, everyday purpose - such as making purchases on an assigned card, or initiating payments. Beyond these end users, <span class="glossaryTermWrapper_xqTQ"><a href="https://docs.weavr.io/glossary#corporates" class="glossaryTerm_wdF6" aria-describedby="tooltip-corporates">corporates</a><span id="tooltip-corporates" class="tooltip_DUhm tooltipTop_L1lz tooltipFloating_oqgg" role="tooltip"><strong>Corporates</strong> <!-- -->Business entities that can be onboarded as identities on Weavr. Corporate identities represent companies and require Know Your Business (KYB) verification. They can have multiple authorised users and issue cards to card assignees.</span></span> also typically have users who perform support and administrative functions, such as overseeing financial <span class="glossaryTermWrapper_xqTQ"><a href="https://docs.weavr.io/glossary#instrument" class="glossaryTerm_wdF6" aria-describedby="tooltip-instrument">instruments</a><span id="tooltip-instrument" class="tooltip_DUhm tooltipTop_L1lz tooltipFloating_oqgg" role="tooltip"><strong>Instrument</strong> <!-- -->A financial product owned by an Identity. There are two types: Managed Accounts (stored-value accounts that hold balances and can receive wire transfers) and Managed Cards (prepaid cards - virtual or physical - used for purchases).</span></span>, controlling fund flows across the organization, or managing users.</p>
<p>Weavr recommends following the <strong>principle of least privilege:</strong> each user should only be able to access and operate on the financial <span class="glossaryTermWrapper_xqTQ"><a href="https://docs.weavr.io/glossary#instrument" class="glossaryTerm_wdF6" aria-describedby="tooltip-instrument">instruments</a><span id="tooltip-instrument" class="tooltip_DUhm tooltipTop_L1lz tooltipFloating_oqgg" role="tooltip"><strong>Instrument</strong> <!-- -->A financial product owned by an Identity. There are two types: Managed Accounts (stored-value accounts that hold balances and can receive wire transfers) and Managed Cards (prepaid cards - virtual or physical - used for purchases).</span></span> and data that are relevant to their specific function.</p>
<p>To support this, Weavr has introduced a set of <strong>pre-configured roles</strong> that can be assigned to users to achieve the appropriate access level for their function.</p>
<p>This <strong>optional feature</strong> can be adopted at your own choice. If not utilized, users will continue to enjoy all of the rights and permissions that they do today.</p>
<p>For more information, see the <a href="https://docs.weavr.io/identities/authorised-users/roles/" target="_blank" rel="noopener noreferrer" class="">authorized user roles documentation</a> and the <a href="https://api.weavr.io/products/multi/openapi/authorised-users" target="_blank" rel="noopener noreferrer" class="">Users endpoints</a>.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="linked-card-users-breaking-change">Linked card users (breaking change)<a href="https://docs.weavr.io/changelog/2026/03/24/multi/release-106/#linked-card-users-breaking-change" class="hash-link" aria-label="Direct link to Linked card users (breaking change)" title="Direct link to Linked card users (breaking change)" translate="no">​</a></h2>
<p>For <span class="glossaryTermWrapper_xqTQ"><a href="https://docs.weavr.io/glossary#embedder" class="glossaryTerm_wdF6" aria-describedby="tooltip-embedder">embedders</a><span id="tooltip-embedder" class="tooltip_DUhm tooltipTop_L1lz tooltipFloating_oqgg" role="tooltip"><strong>Embedder</strong> <!-- -->A company or developer that integrates Weavr's embedded finance services into their own application to provide financial services to their end customers.</span></span> operating a program where cards are issued to corporate identities, Weavr is introducing a mandatory process whereby <span class="glossaryTermWrapper_xqTQ"><a href="https://docs.weavr.io/glossary#managed-card" class="glossaryTerm_wdF6" aria-describedby="tooltip-managed-card">managed cards</a><span id="tooltip-managed-card" class="tooltip_DUhm tooltipTop_L1lz tooltipFloating_oqgg" role="tooltip"><strong>Managed Card</strong> <!-- -->A payment card (virtual or physical) that can be created and managed through the Weavr platform. Cards can operate in prepaid mode (with their own balance) or debit mode (linked to a managed account). All cards must be assigned to a card assignee who is an Authorised User.</span></span> must be linked to users. This is to ensure:</p>
<ul>
<li class="">Every active card is linked to a valid <strong><span class="glossaryTermWrapper_xqTQ"><a href="https://docs.weavr.io/glossary#card-user" class="glossaryTerm_wdF6" aria-describedby="tooltip-card-user">card user</a><span id="tooltip-card-user" class="tooltip_DUhm tooltipTop_L1lz tooltipFloating_oqgg" role="tooltip"><strong>Card User</strong> <!-- -->The person that a card is assigned to and who will use the card for purchases. Weavr does not support anonymous cards, and therefore all cards must be linked to a card user before a card can be used. For consumers, the card owner and the card user is typically the same person. For corporates, the card users are employees or individuals authorised to spend the corporate's funds.</span></span></strong> with complete mandatory data</li>
<li class=""><span class="glossaryTermWrapper_xqTQ"><a href="https://docs.weavr.io/glossary#card-user" class="glossaryTerm_wdF6" aria-describedby="tooltip-card-user">Card users</a><span id="tooltip-card-user" class="tooltip_DUhm tooltipTop_L1lz tooltipFloating_oqgg" role="tooltip"><strong>Card User</strong> <!-- -->The person that a card is assigned to and who will use the card for purchases. Weavr does not support anonymous cards, and therefore all cards must be linked to a card user before a card can be used. For consumers, the card owner and the card user is typically the same person. For corporates, the card users are employees or individuals authorised to spend the corporate's funds.</span></span> have valid credentials and are enrolled for <strong><span class="glossaryTermWrapper_xqTQ"><a href="https://docs.weavr.io/glossary#3ds" class="glossaryTerm_wdF6" aria-describedby="tooltip-3ds">3DS</a><span id="tooltip-3ds" class="tooltip_DUhm tooltipTop_L1lz tooltipFloating_oqgg" role="tooltip"><strong>3DS</strong> <!-- -->3-D Secure - an additional security layer for online credit and debit card transactions. It adds an authentication step where the cardholder verifies their identity with the card issuer during the purchase, reducing fraud and providing liability protection for merchants.</span></span></strong></li>
<li class="">Cards <strong>cannot be used</strong> until all mandatory data for the linked <span class="glossaryTermWrapper_xqTQ"><a href="https://docs.weavr.io/glossary#card-user" class="glossaryTerm_wdF6" aria-describedby="tooltip-card-user">card user</a><span id="tooltip-card-user" class="tooltip_DUhm tooltipTop_L1lz tooltipFloating_oqgg" role="tooltip"><strong>Card User</strong> <!-- -->The person that a card is assigned to and who will use the card for purchases. Weavr does not support anonymous cards, and therefore all cards must be linked to a card user before a card can be used. For consumers, the card owner and the card user is typically the same person. For corporates, the card users are employees or individuals authorised to spend the corporate's funds.</span></span> is provided</li>
</ul>
<p>The change supports compliance requirements for sanctions screening and channel enrollment, and establishes a consistent approach across all card schemes.</p>
<p>The linking of cards to users should be done via the existing <code>userId</code> field when creating or updating a card.</p>
<p>For more information, see the <a href="https://docs.weavr.io/instruments/cards/types/virtual-cards/" target="_blank" rel="noopener noreferrer" class="">virtual cards documentation</a> and the <a href="https://api.weavr.io/products/multi/openapi/managed-cards" target="_blank" rel="noopener noreferrer" class="">Managed Cards endpoints</a>.</p>
<p>To enable this feature on your sandbox account please contact Weavr support.</p>]]></content:encoded>
            <category>Weavr API</category>
            <category>Authorized Users</category>
            <category>Cards &amp; Payments</category>
            <category>Breaking Change</category>
        </item>
        <item>
            <title><![CDATA[iOS Components v3.3.1]]></title>
            <link>https://docs.weavr.io/changelog/ios-components-v-3-3-1/</link>
            <guid>https://docs.weavr.io/changelog/ios-components-v-3-3-1/</guid>
            <pubDate>Wed, 04 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Fixes clearing the whole keychain when clearing the cache of the SDK.]]></description>
            <content:encoded><![CDATA[<p>Fixes clearing the whole keychain when clearing the cache of the SDK.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="fixed">Fixed<a href="https://docs.weavr.io/changelog/ios-components-v-3-3-1/#fixed" class="hash-link" aria-label="Direct link to Fixed" title="Direct link to Fixed" translate="no">​</a></h3>
<ul>
<li class="">No longer clears all data in the keychain for the app when the user calls <code>UXComponents.clearUXComponentsCache</code>.</li>
</ul>]]></content:encoded>
            <category>iOS</category>
            <category>Components SDK</category>
        </item>
        <item>
            <title><![CDATA[Android Secure Components v3.8.0]]></title>
            <link>https://docs.weavr.io/changelog/android-secure-components-v-3-8-0/</link>
            <guid>https://docs.weavr.io/changelog/android-secure-components-v-3-8-0/</guid>
            <pubDate>Fri, 27 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Minor release adding Italian localization support to all SDK screens.]]></description>
            <content:encoded><![CDATA[<p>Minor release adding Italian localization support to all SDK screens.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="added">Added<a href="https://docs.weavr.io/changelog/android-secure-components-v-3-8-0/#added" class="hash-link" aria-label="Direct link to Added" title="Direct link to Added" translate="no">​</a></h3>
<ul>
<li class="">Italian (<code>it</code>) locale support across all SDK screens.</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="fixed">Fixed<a href="https://docs.weavr.io/changelog/android-secure-components-v-3-8-0/#fixed" class="hash-link" aria-label="Direct link to Fixed" title="Direct link to Fixed" translate="no">​</a></h3>
<ul>
<li class="">Fixed password fallback screen content not being vertically centered on the screen.</li>
</ul>]]></content:encoded>
            <category>Android</category>
            <category>Secure Components</category>
            <category>UX</category>
        </item>
    </channel>
</rss>