{"title":"SCA for transaction history","category":"default","creationDate":1669827120,"content":"<p>Each time a user in the European Economic Area (EEA) wants to check their transaction history, you must authenticate them using SCA. This process ensures that sensitive financial data is only accessible to authorized users, fulfilling PSD2 regulatory requirements for secure data retrieval. <br><br>Use the Authentication SDK to integrate this verification flow directly into your transaction history request.<\/p>\n<h2>Requirements<\/h2>\n<p>Before you begin, take into account the following requirements, limitations, and preparations.<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Requirement<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><strong>Integration type<\/strong><\/td>\n<td style=\"text-align: left;\">This feature is supported with an <a href=\"\/pt\/platforms\">Adyen for Platforms<\/a> or a <a href=\"\/pt\/point-of-sale\/classic-library-deprecation\">Classic integration<\/a>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong><a href=\"\/pt\/development-resources\/api-credentials\/\">API credentials<\/a><\/strong><\/td>\n<td style=\"text-align: left;\">You must have an <a href=\"\/pt\/development-resources\/api-credentials\/#generate-api-key\">API key<\/a> (recommended) or <a href=\"\/pt\/development-resources\/api-credentials\/#basic-authentication\">basic authentication username and password<\/a> to access this API. Ensure that you have asked your Adyen contact to assign the following role to your API credential:<br><ul><li markdown=\"1\"><strong>TransferService Webservice Retrieve role<\/strong><\/li><\/ul><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>Setup steps<\/strong><\/td>\n<td style=\"text-align: left;\">Before you begin:<ul><li markdown=\"1\">Make sure that you have <a href=\"\/pt\/business-accounts\/install-auth-sdk\">installed the Authentication SDK<\/a>.<\/li><li markdown=\"1\">Make sure that you have <a href=\"\/pt\/business-accounts\/register-sca-devices\">registered a device<\/a> for your user.<\/li><\/ul><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>How it works<\/h2>\n<p>To retrieve transaction history, verify device eligibility, trigger a secure challenge via the SDK, and retrieve the data, perform the following:<\/p>\n<ol>\n<li><a href=\"#initiate-authentication\">Check SCA eligibility<\/a><\/li>\n<li><a href=\"#initiate-request-transactions\">Initiate a request for your user's transaction history<\/a> using the <code>sdkOutput<\/code> that you got when you checked the device for SCA eligibility.<\/li>\n<li><a href=\"#authenticate-user\">Authenticate your user<\/a> with the Authentication SDK.<\/li>\n<li><a href=\"#get-transactions\">Get the transaction history<\/a> using the <code>sdkOutput<\/code> from the authentication step.<\/li>\n<\/ol>\n<h2 id=\"initiate-authentication\">Check SCA eligibility<\/h2>\n<p>Before requesting the transaction history, you must check for SCA eligibility and initiate the process to authenticate your users.<\/p>\n<p>The following tabs explain how to check for SCA eligibility and initiate authentication using Kotlin, Swift, or JavaScript.<\/p>\n\n<div id=\"tabWQtSf\">\n    <div data-component-wrapper=\"tabs\">\n        <tabs\n                        :items=\"[{&quot;title&quot;:&quot;Android (Kotlin)&quot;,&quot;content&quot;:&quot;\\n&lt;p&gt;To initiate authentication on an Android device:&lt;\\\/p&gt;\\n&lt;p&gt;To check if the Android device is eligible for SCA:&lt;\\\/p&gt;\\n&lt;ol&gt;\\n&lt;li&gt;\\n&lt;p&gt;Initiate the &lt;code&gt;AdyenAuthentication&lt;\\\/code&gt; class in your Activity or Fragment.&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;Initiate authentication&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;kotlin\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;private lateinit var adyenAuthentication: AdyenAuthentication\\\\n\\\\noverride fun onCreate(savedInstanceState: Bundle?) {\\\\n    super.onCreate(savedInstanceState)\\\\n    adyenAuthentication = AdyenAuthentication(this)\\\\n}\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Check if SCA is available on the device.&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;Check SCA eligibility&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;kotlin\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;lifecycleScope.launch {\\\\n    val availabilityResult: AvailabilityResult = adyenAuthentication.checkAvailability()\\\\n    if (availabilityResult is AvailabilityResult.Available) {\\\\n        availabilityResult.sdkOutput\\\\n    }\\\\n}\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;p&gt;The function returns an &lt;code&gt;sdkOutput&lt;\\\/code&gt;.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Pass the &lt;code&gt;sdkOutput&lt;\\\/code&gt; to your server.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;\\n&quot;,&quot;altTitle&quot;:&quot;kotlin&quot;,&quot;oldTabId&quot;:&quot;sca-eligibility-kotlin_1&quot;,&quot;relation&quot;:&quot;kotlin&quot;},{&quot;title&quot;:&quot;iOS (Swift)&quot;,&quot;content&quot;:&quot;\\n&lt;p&gt;To initiate authentication on an iOS device:&lt;\\\/p&gt;\\n&lt;p&gt;To check if the iOS device is eligible for SCA:&lt;\\\/p&gt;\\n&lt;ol&gt;\\n&lt;li&gt;\\n&lt;p&gt;Initialize the &lt;code&gt;AuthenticationService&lt;\\\/code&gt; class.&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;Initialize authentication service&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;swift\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;let configuration = AuthenticationService.Configuration(\\\\n    localizedRegistrationReason: registrationReason,\\\\n    localizedAuthenticationReason: authenticationReason,\\\\n    appleTeamIdendtifier: appleTeamIdentifier\\\\n)\\\\nlet authenticationService = AuthenticationService(configuration: configuration)\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Check if SCA is available on the device.&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;Check SCA eligibility&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;swift\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;let sdkOutput = try authenticationService.checkSupport()\\\\n\\\\\\\/\\\\\\\/\\\\\\\/ send the sdkOutput to your backend\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;p&gt;The function returns an &lt;code&gt;sdkOutput&lt;\\\/code&gt;.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Pass the &lt;code&gt;sdkOutput&lt;\\\/code&gt; to your server.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;\\n&quot;,&quot;altTitle&quot;:&quot;swift&quot;,&quot;oldTabId&quot;:&quot;sca-eligibility-swift_2&quot;,&quot;relation&quot;:&quot;swift&quot;},{&quot;title&quot;:&quot;Web (JavaScript)&quot;,&quot;content&quot;:&quot;\\n&lt;p&gt;To initiate authentication on a web browser on your web-enabled device:&lt;\\\/p&gt;\\n&lt;p&gt;To check if the web browser on your web-enabled device is eligible for SCA:&lt;\\\/p&gt;\\n&lt;ol&gt;\\n&lt;li&gt;\\n&lt;p&gt;Import the node package in your application. &lt;\\\/p&gt;\\n&lt;p&gt;&lt;code&gt;RelyingPartyName&lt;\\\/code&gt; is the name the user will be presented with when creating or validating a &lt;code&gt;WebAuthn&lt;\\\/code&gt; operation. We recommend that the value of the &lt;code&gt;RelyingPartyName&lt;\\\/code&gt; be the merchant name or the URL domain.&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;Import web sdk and initiate authentication&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=\\&quot;[{&amp;quot;language&amp;quot;:&amp;quot;javascript&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;import ScaWebauthn from &#039;@adyen\\\\\\\/bpscaweb&#039;;\\\\n\\\\nconst scaWebauthn = ScaWebauthn.create({ \\\\n    relyingPartyName: &#039;merchant&#039;,\\\\n});\\\\n\\\\nconst sdkOutput = await scaWebauthn.checkAvailability().catch((error) =&amp;gt; \\\\\\\/* SCA_UNAVAILABLE error*\\\\\\\/);&amp;quot;}]\\&quot; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;p&gt;If the user&#039;s browser supports SCA, the function returns &lt;code&gt;sdkOutput&lt;\\\/code&gt; to exchange in requests to the server. If SCA is not supported, the method throws an &lt;code&gt;SCA_UNAVAILABLE&lt;\\\/code&gt; error.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;li&gt;\\n&lt;p&gt;Pass the &lt;code&gt;sdkOutput&lt;\\\/code&gt; to your server.&lt;\\\/p&gt;\\n&lt;\\\/li&gt;\\n&lt;\\\/ol&gt;\\n&quot;,&quot;altTitle&quot;:&quot;javascript&quot;,&quot;oldTabId&quot;:&quot;sca-eligibility-javascript_3&quot;,&quot;relation&quot;:&quot;javascript&quot;}]\"\n            :should-update-when-url-changes='true'>\n        <\/tabs>\n    <\/div>\n<\/div>\n\n<p>You will use the <code>sdkOutput<\/code> when <a href=\"#initiate-request-transactions\">initiating a request for transaction history<\/a>.<\/p>\n<h2 id=\"initiate-request-transactions\">Initiate a request for the transaction history<\/h2>\n<p>To request the transaction history for the specified balance account:<\/p>\n<ol>\n<li>\n<p>Make a GET  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/transfers\/latest\/get\/transactions\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/transactions<\/a> request, specifying the following parameter in the header:<\/p>\n<table>\n<thead>\n<tr>\n<th>Request header<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>WWW-Authenticate<\/code><\/td>\n<td><code>SCA realm<\/code>: <strong>Transaction<\/strong>.<br><code>auth-param1<\/code>: Base64-encoded value of <strong>sdkOutput<\/strong> you get when you <a href=\"#initiate-authentication\">initiate authentication<\/a>..<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Provide the following query parameters:<\/p>\n<table>\n<thead>\n<tr>\n<th>Parameter<\/th>\n<th>Required<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/transfers\/latest\/get\/transactions#query-balanceAccountId\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">balanceAccountId<\/a><\/td>\n<td><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td>Unique identifier of the balance account to get the transaction history for.<\/td>\n<\/tr>\n<tr>\n<td> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/transfers\/latest\/get\/transactions#query-createdSince\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">createdSince<\/a><\/td>\n<td><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td>Only include transactions that have been created on or after this point in time. The value must be in ISO 8601 format. For example, <strong>2022-05-30T15:07:40Z<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/transfers\/latest\/get\/transactions#query-createdUntil\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">createdUntil<\/a><\/td>\n<td><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td>Only include transactions that have been created on or before this point in time. The value must be in ISO 8601 format. For example, <strong>2022-05-31T15:07:40Z<\/strong>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Request transaction history'\" :id=\"'initiate-request-transaction-history'\" :code-data=\"[{&quot;language&quot;:&quot;bash&quot;,&quot;tabTitle&quot;:&quot;curl&quot;,&quot;content&quot;:&quot;curl https:\\\/\\\/balanceplatform-api-test.adyen.com\\\/btl\\\/v4\\\/transactions?balanceAccountId=BA00000000000000000000002&amp;createdSince=2022-05-30T15:07:40Z&amp;createdUntil=2022-05-31T15:07:40Z \\\\\\n-H 'x-api-key: ADYEN_BALANCE_PLATFORM_API_KEY' \\\\\\n-H 'content-type: application\\\/json' \\\\\\n-H 'WWW-Authenticate: SCA realm=\\&quot;Transaction\\&quot; auth-param1=\\&quot;eyJjaGFsbGVuZ2UiOiJiVlV6ZW5wek0waFNl...\\&quot;' \\\\\\n-X GET \\\\\\n-d '{\\n}'&quot;},{&quot;language&quot;:&quot;java&quot;,&quot;tabTitle&quot;:&quot;Java&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Java API Library v33.0.0\\nimport com.adyen.Client;\\nimport com.adyen.enums.Environment;\\nimport com.adyen.model.transfers.*;\\nimport java.time.OffsetDateTime;\\nimport java.util.*;\\nimport com.adyen.service.transfers.*;\\n\\nClient client = new Client(\\&quot;ADYEN_BALANCE_PLATFORM_API_KEY\\&quot;, Environment.TEST);\\n\\\/\\\/ Send the request\\nTransactionsApi service = new TransactionsApi(client);\\nTransactionSearchResponse response = service.getAllTransactions(\\&quot;String\\&quot;, \\&quot;String\\&quot;, \\&quot;String\\&quot;, \\&quot;String\\&quot;, \\&quot;String\\&quot;, LocalDateTime.parse(\\&quot;2025-01-01T15:00:00\\&quot;);, LocalDateTime.parse(\\&quot;2025-01-01T15:00:00\\&quot;);, 1, null);&quot;},{&quot;language&quot;:&quot;php&quot;,&quot;tabTitle&quot;:&quot;PHP&quot;,&quot;content&quot;:&quot;&lt;?php\\n\\\/\\\/ Adyen PHP API Library v24.0.0\\nuse Adyen\\\\Client;\\nuse Adyen\\\\Environment;\\nuse Adyen\\\\Service\\\\Transfers\\\\TransactionsApi;\\n\\n$client = new Client();\\n$client-&gt;setXApiKey(\\&quot;ADYEN_BALANCE_PLATFORM_API_KEY\\&quot;);\\n$client-&gt;setEnvironment(Environment::TEST);\\n\\n$requestOptions['queryParams'] = array('balancePlatform' =&gt; 'string', 'paymentInstrumentId' =&gt; 'string', 'accountHolderId' =&gt; 'string', 'balanceAccountId' =&gt; 'string', 'cursor' =&gt; 'string', 'createdSince' =&gt; 'date-time', 'createdUntil' =&gt; 'date-time', 'limit' =&gt; 'integer');\\n\\n\\\/\\\/ Send the request\\n$service = new TransactionsApi($client);\\n$response = $service-&gt;getAllTransactions($requestOptions);&quot;},{&quot;language&quot;:&quot;cs&quot;,&quot;tabTitle&quot;:&quot;C#&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen .net API Library v28.0.0\\nusing Adyen;\\nusing Environment = Adyen.Model.Environment;\\nusing Adyen.Model;\\nusing Adyen.Model.Transfers;\\nusing Adyen.Service.Transfers;\\n\\nvar config = new Config()\\n{\\n    XApiKey = \\&quot;ADYEN_BALANCE_PLATFORM_API_KEY\\&quot;,\\n    Environment = Environment.Test\\n};\\nvar client = new Client(config);\\n\\n\\\/\\\/ Send the request\\nvar service = new TransactionsService(client);\\nvar response = service.GetAllTransactions(balancePlatform: \\&quot;string\\&quot;, paymentInstrumentId: \\&quot;string\\&quot;, accountHolderId: \\&quot;string\\&quot;, balanceAccountId: \\&quot;string\\&quot;, cursor: \\&quot;string\\&quot;, createdSince: DateTime.Parse(\\&quot;2025-01-01T15:00:00\\&quot;), createdUntil: DateTime.Parse(\\&quot;2025-01-01T15:00:00\\&quot;), limit: 1);&quot;},{&quot;language&quot;:&quot;js&quot;,&quot;tabTitle&quot;:&quot;NodeJS (JavaScript)&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Node API Library v23.3.0\\nconst { Client, TransfersAPI } = require('@adyen\\\/api-library');\\n\\nconst client = new Client({ apiKey: \\&quot;ADYEN_BALANCE_PLATFORM_API_KEY\\&quot;, environment: \\&quot;TEST\\&quot; });\\n\\n\\\/\\\/ Send the request\\nconst transfersAPI = new TransfersAPI(client);\\nconst response = transfersAPI.TransactionsApi.getAllTransactions(\\&quot;string\\&quot;, \\&quot;string\\&quot;, \\&quot;string\\&quot;, \\&quot;string\\&quot;, \\&quot;string\\&quot;, Date.now(), Date.now(), 1);&quot;},{&quot;language&quot;:&quot;go&quot;,&quot;tabTitle&quot;:&quot;Go&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Go API Library v17.0.0\\nimport (\\n  \\&quot;context\\&quot;\\n  \\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v17\\\/src\\\/common\\&quot;\\n  \\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v17\\\/src\\\/adyen\\&quot;\\n  \\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v17\\\/src\\\/transfers\\&quot;\\n)\\nclient := adyen.NewClient(&amp;common.Config{\\n  ApiKey:      \\&quot;ADYEN_BALANCE_PLATFORM_API_KEY\\&quot;,\\n  Environment: common.TestEnv,\\n})\\n\\n\\\/\\\/ Send the request\\nservice := client.Transfers()\\nreq := service.TransactionsApi.GetAllTransactionsInput()\\nreq = req.BalancePlatform(\\&quot;string\\&quot;).PaymentInstrumentId(\\&quot;string\\&quot;).AccountHolderId(\\&quot;string\\&quot;).BalanceAccountId(\\&quot;string\\&quot;).Cursor(\\&quot;string\\&quot;).CreatedSince(DateTime.Parse(\\&quot;2025-01-01T15:00:00\\&quot;)).CreatedUntil(DateTime.Parse(\\&quot;2025-01-01T15:00:00\\&quot;)).Limit(1)\\nres, httpRes, err := service.TransactionsApi.GetAllTransactions(context.Background(), req)&quot;},{&quot;language&quot;:&quot;py&quot;,&quot;tabTitle&quot;:&quot;Python&quot;,&quot;content&quot;:&quot;# Adyen Python API Library v13.3.0\\nimport Adyen\\n\\nadyen = Adyen.Adyen()\\nadyen.client.xapikey = \\&quot;ADYEN_BALANCE_PLATFORM_API_KEY\\&quot;\\nadyen.client.platform = \\&quot;test\\&quot; # The environment to use library in.\\n\\nquery_parameters = {\\n  \\&quot;balancePlatform\\&quot; : \\&quot;string\\&quot;,\\n  \\&quot;paymentInstrumentId\\&quot; : \\&quot;string\\&quot;,\\n  \\&quot;accountHolderId\\&quot; : \\&quot;string\\&quot;,\\n  \\&quot;balanceAccountId\\&quot; : \\&quot;string\\&quot;,\\n  \\&quot;cursor\\&quot; : \\&quot;string\\&quot;,\\n  \\&quot;createdSince\\&quot; : \\&quot;date-time\\&quot;,\\n  \\&quot;createdUntil\\&quot; : \\&quot;date-time\\&quot;,\\n  \\&quot;limit\\&quot; : \\&quot;integer\\&quot;\\n}\\n\\n# Send the request\\nresult = adyen.transfers.transactions_api.get_all_transactions(query_parameters=query_parameters)&quot;},{&quot;language&quot;:&quot;rb&quot;,&quot;tabTitle&quot;:&quot;Ruby&quot;,&quot;content&quot;:&quot;# Adyen Ruby API Library v10.1.1\\nrequire \\&quot;adyen-ruby-api-library\\&quot;\\n\\nadyen = Adyen::Client.new\\nadyen.api_key = 'ADYEN_BALANCE_PLATFORM_API_KEY'\\nadyen.env = :test # Set to \\&quot;live\\&quot; for live environment\\n\\n# Create the request object(s)\\nquery_params = {\\n  :balancePlatform =&gt; 'string',\\n  :paymentInstrumentId =&gt; 'string',\\n  :accountHolderId =&gt; 'string',\\n  :balanceAccountId =&gt; 'string',\\n  :cursor =&gt; 'string',\\n  :createdSince =&gt; 'date-time',\\n  :createdUntil =&gt; 'date-time',\\n  :limit =&gt; 'integer'\\n}\\n\\n# Send the request\\nresult = adyen.transfers.transactions_api.get_all_transactions(query_params: query_params)&quot;},{&quot;language&quot;:&quot;ts&quot;,&quot;tabTitle&quot;:&quot;NodeJS (TypeScript)&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Node API Library v23.3.0\\nimport { Client, TransfersAPI, Types } from \\&quot;@adyen\\\/api-library\\&quot;;\\n\\nconst client = new Client({ apiKey: \\&quot;ADYEN_BALANCE_PLATFORM_API_KEY\\&quot;, environment: \\&quot;TEST\\&quot; });\\n\\n\\\/\\\/ Send the request\\nconst transfersAPI = new TransfersAPI(client);\\nconst response = transfersAPI.TransactionsApi.getAllTransactions(\\&quot;string\\&quot;, \\&quot;string\\&quot;, \\&quot;string\\&quot;, \\&quot;string\\&quot;, \\&quot;string\\&quot;, Date.now(), Date.now(), 1);&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<\/li>\n<li>\n<p>In the response, note the following field in the header:<\/p>\n<ul>\n<li><code>auth-param1<\/code>: Base64-encoded blob of data.<\/li>\n<\/ul>\n<p>You will need <code>auth-param1<\/code> when <a href=\"#authenticate-user\">authenticating your user using the SDK<\/a>.<\/p>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Response'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n  \\\"type\\\": \\\"https:\\\/\\\/docs.adyen.com\\\/errors\\\/unauthorized\\\",\\n  \\\"title\\\": \\\"Unauthorized\\\",\\n  \\\"status\\\": 401,\\n  \\\"errorCode\\\": \\\"00_401\\\"\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<\/li>\n<li>\n<p>Pass <code>auth-param1<\/code> to the SDK as <code>sdkInput<\/code>.<\/p>\n<\/li>\n<\/ol>\n<h2 id=\"authenticate-user\">Authenticate your user<\/h2>\n<p>After <a href=\"#initiate-request-transactions\">initiating the request<\/a>, you have 10 minutes to complete the authentication process and <a href=\"#get-transactions\">finalize the request<\/a>.<\/p>\n<p>To authenticate your user with the Authentication SDK:<\/p>\n<ol>\n<li>\n<p>Trigger the SDK and pass the <code>auth-param1<\/code> value from the previous step as <code>sdkInput<\/code>.<\/p>\n\n<div id=\"tab5N8py\">\n    <div data-component-wrapper=\"tabs\">\n        <tabs\n                        :items=\"[{&quot;title&quot;:&quot;Android (Kotlin)&quot;,&quot;content&quot;:&quot;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;Authenticate with SCA SDK&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;kotlin\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;lifecycleScope.launch {\\\\n        if (adyenAuthentication.hasCredential(\\\\\\&quot;sdkInput\\\\\\&quot;)) {\\\\n            \\\\\\\/\\\\\\\/ Authenticate existing credential\\\\n            val authenticationResult: AuthenticationResult = adyenAuthentication.authenticate(\\\\\\&quot;sdkInput\\\\\\&quot;)\\\\n            when (authenticationResult) {\\\\n                is AuthenticationResult.AuthenticationSuccessful -&amp;gt; {\\\\n                    authenticationResult.sdkOutput\\\\n                }\\\\n                is AuthenticationResult.Canceled -&amp;gt; {\\\\n                    \\\\\\\/\\\\\\\/ User cancelled the authentication flow\\\\n                }\\\\n                is AuthenticationResult.Error -&amp;gt; {\\\\n                    \\\\\\\/\\\\\\\/ Unexpected error\\\\n                    authenticationResult.errorMessage\\\\n                }\\\\n                is AuthenticationResult.AuthenticationError -&amp;gt; {\\\\n                    \\\\\\\/\\\\\\\/ FIDO API Error\\\\n                    authenticationResult.authenticationError\\\\n                }\\\\n            }\\\\n        } else {\\\\n            \\\\\\\/\\\\\\\/ None of the existing credentials exist in this device\\\\n        }\\\\n    }\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;p&gt;If successful, the SDK generates a Base64-encoded &lt;code&gt;sdkOutput&lt;\\\/code&gt; data blob.&lt;\\\/p&gt;\\n&quot;,&quot;altTitle&quot;:&quot;kotlin&quot;,&quot;oldTabId&quot;:&quot;authenticate-user-kotlin_1&quot;,&quot;relation&quot;:&quot;kotlin&quot;},{&quot;title&quot;:&quot;iOS (Swift)&quot;,&quot;content&quot;:&quot;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;Authenticate with SCA SDK&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;swift\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;delegatedAuthenticationSession.authenticate(withBase64URLString: sdkInput) { [weak self] result in\\\\n        switch result {\\\\n        case let .success(sdkOutput):\\\\n            \\\\\\\/\\\\\\\/\\\\\\\/ send the sdkOutput to the backend\\\\n        case let .failure(error):\\\\n            \\\\\\\/\\\\\\\/\\\\\\\/ authentication failed\\\\n        }\\\\n    }\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;p&gt;The SDK uses the &lt;a href=\\&quot;https:\\\/\\\/developer.apple.com\\\/documentation\\\/devicecheck\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Apple DeviceCheck framework&lt;\\\/a&gt; to generate a Base64-encoded &lt;code&gt;sdkOutput&lt;\\\/code&gt; data blob. To do this, the SDK authenticates the user using Touch ID, Face ID, or the device passcode. To enable Face ID support, add &lt;code&gt;NSFaceIDUsageDescription&lt;\\\/code&gt; to &lt;code&gt;Info.plist&lt;\\\/code&gt;.&lt;\\\/p&gt;\\n&quot;,&quot;altTitle&quot;:&quot;swift&quot;,&quot;oldTabId&quot;:&quot;authenticate-user-swift_2&quot;,&quot;relation&quot;:&quot;swift&quot;},{&quot;title&quot;:&quot;Web (JavaScript)&quot;,&quot;content&quot;:&quot;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n&lt;code-sample :title=\\&quot;&#039;Authenticate with SCA SDK&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;javascript\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;const sdkOutput = await scaWebauthn.authenticate(sdkInput);\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;p&gt;If successful, the SDK generates a Base64-encoded &lt;code&gt;sdkOutput&lt;\\\/code&gt; data blob.&lt;\\\/p&gt;\\n&quot;,&quot;altTitle&quot;:&quot;javascript&quot;,&quot;oldTabId&quot;:&quot;authenticate-user-javascript_3&quot;,&quot;relation&quot;:&quot;javascript&quot;}]\"\n            :should-update-when-url-changes='true'>\n        <\/tabs>\n    <\/div>\n<\/div>\n\n<\/li>\n<li>\n<p>Pass <code>sdkOutput<\/code> to your server.<\/p>\n<\/li>\n<\/ol>\n<h2 id=\"get-transactions\">Get the transaction history<\/h2>\n<p>To finalize the request to get the transaction history:<\/p>\n<ol>\n<li>\n<p>Make a GET  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/transfers\/latest\/get\/transactions\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/transactions<\/a> request, specifying the following parameter in the request header.<\/p>\n<table>\n<thead>\n<tr>\n<th>Request header<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>WWW-Authenticate<\/code><\/td>\n<td><code>SCA realm<\/code>: <strong>Transaction<\/strong>.<br><code>auth-param1<\/code>: Base64-encoded value of <strong>sdkOutput<\/strong> you get when you <a href=\"#initiate-authentication\">initiate authentication<\/a>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Get user transaction history'\" :id=\"'get-transaction-history'\" :code-data=\"[{&quot;language&quot;:&quot;bash&quot;,&quot;tabTitle&quot;:&quot;curl&quot;,&quot;content&quot;:&quot;curl https:\\\/\\\/balanceplatform-api-test.adyen.com\\\/btl\\\/v4\\\/transactions?balanceAccountId=BA00000000000000000000002&amp;createdSince=2022-05-30T15:07:40Z&amp;createdUntil=2022-05-31T15:07:40Z \\\\\\n-H 'x-api-key: ADYEN_BALANCE_PLATFORM_API_KEY' \\\\\\n-H 'content-type: application\\\/json' \\\\\\n-H 'WWW-Authenticate: SCA realm=\\&quot;Transaction\\&quot; auth-param1=\\&quot;CeCcEEJf2UPC7pB0K7AtEgLZX7cTvnqNznJF...\\&quot;' \\\\\\n-X GET \\\\\\n-d '{\\n}'&quot;},{&quot;language&quot;:&quot;java&quot;,&quot;tabTitle&quot;:&quot;Java&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Java API Library v33.0.0\\nimport com.adyen.Client;\\nimport com.adyen.enums.Environment;\\nimport com.adyen.model.transfers.*;\\nimport java.time.OffsetDateTime;\\nimport java.util.*;\\nimport com.adyen.service.transfers.*;\\n\\nClient client = new Client(\\&quot;ADYEN_BALANCE_PLATFORM_API_KEY\\&quot;, Environment.TEST);\\n\\\/\\\/ Send the request\\nTransactionsApi service = new TransactionsApi(client);\\nTransactionSearchResponse response = service.getAllTransactions(\\&quot;String\\&quot;, \\&quot;String\\&quot;, \\&quot;String\\&quot;, \\&quot;String\\&quot;, \\&quot;String\\&quot;, LocalDateTime.parse(\\&quot;2025-01-01T15:00:00\\&quot;);, LocalDateTime.parse(\\&quot;2025-01-01T15:00:00\\&quot;);, 1, null);&quot;},{&quot;language&quot;:&quot;php&quot;,&quot;tabTitle&quot;:&quot;PHP&quot;,&quot;content&quot;:&quot;&lt;?php\\n\\\/\\\/ Adyen PHP API Library v24.0.0\\nuse Adyen\\\\Client;\\nuse Adyen\\\\Environment;\\nuse Adyen\\\\Service\\\\Transfers\\\\TransactionsApi;\\n\\n$client = new Client();\\n$client-&gt;setXApiKey(\\&quot;ADYEN_BALANCE_PLATFORM_API_KEY\\&quot;);\\n$client-&gt;setEnvironment(Environment::TEST);\\n\\n$requestOptions['queryParams'] = array('balancePlatform' =&gt; 'string', 'paymentInstrumentId' =&gt; 'string', 'accountHolderId' =&gt; 'string', 'balanceAccountId' =&gt; 'string', 'cursor' =&gt; 'string', 'createdSince' =&gt; 'date-time', 'createdUntil' =&gt; 'date-time', 'limit' =&gt; 'integer');\\n\\n\\\/\\\/ Send the request\\n$service = new TransactionsApi($client);\\n$response = $service-&gt;getAllTransactions($requestOptions);&quot;},{&quot;language&quot;:&quot;cs&quot;,&quot;tabTitle&quot;:&quot;C#&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen .net API Library v28.0.0\\nusing Adyen;\\nusing Environment = Adyen.Model.Environment;\\nusing Adyen.Model;\\nusing Adyen.Model.Transfers;\\nusing Adyen.Service.Transfers;\\n\\nvar config = new Config()\\n{\\n    XApiKey = \\&quot;ADYEN_BALANCE_PLATFORM_API_KEY\\&quot;,\\n    Environment = Environment.Test\\n};\\nvar client = new Client(config);\\n\\n\\\/\\\/ Send the request\\nvar service = new TransactionsService(client);\\nvar response = service.GetAllTransactions(balancePlatform: \\&quot;string\\&quot;, paymentInstrumentId: \\&quot;string\\&quot;, accountHolderId: \\&quot;string\\&quot;, balanceAccountId: \\&quot;string\\&quot;, cursor: \\&quot;string\\&quot;, createdSince: DateTime.Parse(\\&quot;2025-01-01T15:00:00\\&quot;), createdUntil: DateTime.Parse(\\&quot;2025-01-01T15:00:00\\&quot;), limit: 1);&quot;},{&quot;language&quot;:&quot;js&quot;,&quot;tabTitle&quot;:&quot;NodeJS (JavaScript)&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Node API Library v23.3.0\\nconst { Client, TransfersAPI } = require('@adyen\\\/api-library');\\n\\nconst client = new Client({ apiKey: \\&quot;ADYEN_BALANCE_PLATFORM_API_KEY\\&quot;, environment: \\&quot;TEST\\&quot; });\\n\\n\\\/\\\/ Send the request\\nconst transfersAPI = new TransfersAPI(client);\\nconst response = transfersAPI.TransactionsApi.getAllTransactions(\\&quot;string\\&quot;, \\&quot;string\\&quot;, \\&quot;string\\&quot;, \\&quot;string\\&quot;, \\&quot;string\\&quot;, Date.now(), Date.now(), 1);&quot;},{&quot;language&quot;:&quot;go&quot;,&quot;tabTitle&quot;:&quot;Go&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Go API Library v17.0.0\\nimport (\\n  \\&quot;context\\&quot;\\n  \\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v17\\\/src\\\/common\\&quot;\\n  \\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v17\\\/src\\\/adyen\\&quot;\\n  \\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v17\\\/src\\\/transfers\\&quot;\\n)\\nclient := adyen.NewClient(&amp;common.Config{\\n  ApiKey:      \\&quot;ADYEN_BALANCE_PLATFORM_API_KEY\\&quot;,\\n  Environment: common.TestEnv,\\n})\\n\\n\\\/\\\/ Send the request\\nservice := client.Transfers()\\nreq := service.TransactionsApi.GetAllTransactionsInput()\\nreq = req.BalancePlatform(\\&quot;string\\&quot;).PaymentInstrumentId(\\&quot;string\\&quot;).AccountHolderId(\\&quot;string\\&quot;).BalanceAccountId(\\&quot;string\\&quot;).Cursor(\\&quot;string\\&quot;).CreatedSince(DateTime.Parse(\\&quot;2025-01-01T15:00:00\\&quot;)).CreatedUntil(DateTime.Parse(\\&quot;2025-01-01T15:00:00\\&quot;)).Limit(1)\\nres, httpRes, err := service.TransactionsApi.GetAllTransactions(context.Background(), req)&quot;},{&quot;language&quot;:&quot;py&quot;,&quot;tabTitle&quot;:&quot;Python&quot;,&quot;content&quot;:&quot;# Adyen Python API Library v13.3.0\\nimport Adyen\\n\\nadyen = Adyen.Adyen()\\nadyen.client.xapikey = \\&quot;ADYEN_BALANCE_PLATFORM_API_KEY\\&quot;\\nadyen.client.platform = \\&quot;test\\&quot; # The environment to use library in.\\n\\nquery_parameters = {\\n  \\&quot;balancePlatform\\&quot; : \\&quot;string\\&quot;,\\n  \\&quot;paymentInstrumentId\\&quot; : \\&quot;string\\&quot;,\\n  \\&quot;accountHolderId\\&quot; : \\&quot;string\\&quot;,\\n  \\&quot;balanceAccountId\\&quot; : \\&quot;string\\&quot;,\\n  \\&quot;cursor\\&quot; : \\&quot;string\\&quot;,\\n  \\&quot;createdSince\\&quot; : \\&quot;date-time\\&quot;,\\n  \\&quot;createdUntil\\&quot; : \\&quot;date-time\\&quot;,\\n  \\&quot;limit\\&quot; : \\&quot;integer\\&quot;\\n}\\n\\n# Send the request\\nresult = adyen.transfers.transactions_api.get_all_transactions(query_parameters=query_parameters)&quot;},{&quot;language&quot;:&quot;rb&quot;,&quot;tabTitle&quot;:&quot;Ruby&quot;,&quot;content&quot;:&quot;# Adyen Ruby API Library v10.1.1\\nrequire \\&quot;adyen-ruby-api-library\\&quot;\\n\\nadyen = Adyen::Client.new\\nadyen.api_key = 'ADYEN_BALANCE_PLATFORM_API_KEY'\\nadyen.env = :test # Set to \\&quot;live\\&quot; for live environment\\n\\n# Create the request object(s)\\nquery_params = {\\n  :balancePlatform =&gt; 'string',\\n  :paymentInstrumentId =&gt; 'string',\\n  :accountHolderId =&gt; 'string',\\n  :balanceAccountId =&gt; 'string',\\n  :cursor =&gt; 'string',\\n  :createdSince =&gt; 'date-time',\\n  :createdUntil =&gt; 'date-time',\\n  :limit =&gt; 'integer'\\n}\\n\\n# Send the request\\nresult = adyen.transfers.transactions_api.get_all_transactions(query_params: query_params)&quot;},{&quot;language&quot;:&quot;ts&quot;,&quot;tabTitle&quot;:&quot;NodeJS (TypeScript)&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Node API Library v23.3.0\\nimport { Client, TransfersAPI, Types } from \\&quot;@adyen\\\/api-library\\&quot;;\\n\\nconst client = new Client({ apiKey: \\&quot;ADYEN_BALANCE_PLATFORM_API_KEY\\&quot;, environment: \\&quot;TEST\\&quot; });\\n\\n\\\/\\\/ Send the request\\nconst transfersAPI = new TransfersAPI(client);\\nconst response = transfersAPI.TransactionsApi.getAllTransactions(\\&quot;string\\&quot;, \\&quot;string\\&quot;, \\&quot;string\\&quot;, \\&quot;string\\&quot;, \\&quot;string\\&quot;, Date.now(), Date.now(), 1);&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<\/li>\n<li>\n<p>Use the content of the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/transfers\/latest\/get\/transactions#responses-200-data\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">data<\/a> array to present the transaction information to your user.<\/p>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Response'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n    \\\"data\\\": [\\n        {\\n            \\\"balancePlatform\\\": \\\"YOUR_BALANCE_PLATFORM\\\",\\n            \\\"creationDate\\\": \\\"2023-08-10T14:51:20+02:00\\\",\\n            \\\"id\\\": \\\"EVJN42272224222B5JB8BRC84N686ZEUR\\\",\\n            \\\"accountHolder\\\": {\\n                \\\"description\\\": \\\"Your description for the account holder\\\",\\n                \\\"id\\\": \\\"AH00000000000000000000001\\\"\\n            },\\n            \\\"amount\\\": {\\n                \\\"currency\\\": \\\"USD\\\",\\n                \\\"value\\\": -1000\\n            },\\n            \\\"balanceAccount\\\": {\\n                \\\"description\\\": \\\"Your description for the account holder\\\",\\n                \\\"id\\\": \\\"BA00000000000000000000001\\\"\\n            },\\n            \\\"bookingDate\\\": \\\"2023-08-10T14:51:33+02:00\\\",\\n            \\\"status\\\": \\\"booked\\\",\\n            \\\"transfer\\\": {\\n                \\\"id\\\": \\\"3JNC3O5ZVFLLGV4B\\\",\\n                \\\"reference\\\": \\\"Your internal reference for the transfer\\\"\\n            },\\n            \\\"valueDate\\\": \\\"2023-08-10T14:51:20+02:00\\\"\\n        },\\n        {\\n            \\\"balancePlatform\\\": \\\"YOUR_BALANCE_PLATFORM\\\",\\n            \\\"creationDate\\\": \\\"2023-08-10T15:34:31+02:00\\\",\\n            \\\"id\\\": \\\"EVJN4227C224222B5JB8G3Q89N2NB6EUR\\\",\\n            \\\"accountHolder\\\": {\\n                \\\"description\\\": \\\"Your description for the account holder\\\",\\n                \\\"id\\\": \\\"AH00000000000000000000001\\\"\\n            },\\n            \\\"amount\\\": {\\n                \\\"currency\\\": \\\"USD\\\",\\n                \\\"value\\\": 123\\n            },\\n            \\\"balanceAccount\\\": {\\n                \\\"description\\\": \\\"Your description for the account holder\\\",\\n                \\\"id\\\": \\\"BA00000000000000000000001\\\"\\n            },\\n            \\\"bookingDate\\\": \\\"2023-08-10T15:34:40+02:00\\\",\\n            \\\"status\\\": \\\"booked\\\",\\n            \\\"transfer\\\": {\\n                \\\"id\\\": \\\"48POO45ZVG11166J\\\",\\n                \\\"reference\\\": \\\"Your internal reference for the transfer\\\"\\n            },\\n            \\\"valueDate\\\": \\\"2023-08-10T15:34:31+02:00\\\"\\n        }\\n    ],\\n    \\\"_links\\\": {\\n        \\\"next\\\": {\\n            \\\"href\\\": \\\"https:\\\/\\\/balanceplatform-api-test.adyen.com\\\/btl\\\/v4\\\/transactions?balancePlatform=YOUR_BALANCE_PLATFORM&amp;createdUntil=2023-08-20T13%3A07%3A40Z&amp;createdSince=2023-08-10T10%3A50%3A40Z&amp;cursor=S2B-c0p1N0tdN0l6RGhYK1YpM0lgOTUyMDlLXElyKE9LMCtyaFEuMj1NMHgidCsrJi1ZNnhqXCtqVi5JPGpRK1F2fCFqWzU33JTojSVNJc1J1VXhncS10QDd6JX9FQFl5Zn0uNyUvSXJNQTo\\\"\\n        }\\n    }\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<\/li>\n<\/ol>\n<h2>See also<\/h2>\n<ul>\n<li><a href=\"\/pt\/business-accounts\/how-sca-works\">How SCA works<\/a><\/li>\n<\/ul>","url":"https:\/\/docs.adyen.com\/pt\/business-accounts\/sca-for-transaction-history","articleFields":{"description":"Learn how to use our Authentication SDK to authenticate your users when they request their transaction history.","feedback_component":true,"type":"page","_expandable":{"operations":""},"status":"current","parameters":{"directoryPath":"\/business-accounts","model":"balance platform"},"last_edit_on":"30-11-2022 17:52"},"algolia":{"url":"https:\/\/docs.adyen.com\/pt\/business-accounts\/sca-for-transaction-history","title":"SCA for transaction history","content":"Each time a user in the European Economic Area (EEA) wants to check their transaction history, you must authenticate them using SCA. This process ensures that sensitive financial data is only accessible to authorized users, fulfilling PSD2 regulatory requirements for secure data retrieval. Use the Authentication SDK to integrate this verification flow directly into your transaction history request.\nRequirements\nBefore you begin, take into account the following requirements, limitations, and preparations.\n\n\n\nRequirement\nDescription\n\n\n\n\nIntegration type\nThis feature is supported with an Adyen for Platforms or a Classic integration.\n\n\nAPI credentials\nYou must have an API key (recommended) or basic authentication username and password to access this API. Ensure that you have asked your Adyen contact to assign the following role to your API credential:TransferService Webservice Retrieve role\n\n\nSetup steps\nBefore you begin:Make sure that you have installed the Authentication SDK.Make sure that you have registered a device for your user.\n\n\n\nHow it works\nTo retrieve transaction history, verify device eligibility, trigger a secure challenge via the SDK, and retrieve the data, perform the following:\n\nCheck SCA eligibility\nInitiate a request for your user's transaction history using the sdkOutput that you got when you checked the device for SCA eligibility.\nAuthenticate your user with the Authentication SDK.\nGet the transaction history using the sdkOutput from the authentication step.\n\nCheck SCA eligibility\nBefore requesting the transaction history, you must check for SCA eligibility and initiate the process to authenticate your users.\nThe following tabs explain how to check for SCA eligibility and initiate authentication using Kotlin, Swift, or JavaScript.\n\n\n    \n        \n        \n    \n\n\nYou will use the sdkOutput when initiating a request for transaction history.\nInitiate a request for the transaction history\nTo request the transaction history for the specified balance account:\n\n\nMake a GET  \/transactions request, specifying the following parameter in the header:\n\n\n\nRequest header\nDescription\n\n\n\n\nWWW-Authenticate\nSCA realm: Transaction.auth-param1: Base64-encoded value of sdkOutput you get when you initiate authentication..\n\n\n\nProvide the following query parameters:\n\n\n\nParameter\nRequired\nDescription\n\n\n\n\n balanceAccountId\n\nUnique identifier of the balance account to get the transaction history for.\n\n\n createdSince\n\nOnly include transactions that have been created on or after this point in time. The value must be in ISO 8601 format. For example, 2022-05-30T15:07:40Z.\n\n\n createdUntil\n\nOnly include transactions that have been created on or before this point in time. The value must be in ISO 8601 format. For example, 2022-05-31T15:07:40Z.\n\n\n\n\n\n\n\n\nIn the response, note the following field in the header:\n\nauth-param1: Base64-encoded blob of data.\n\nYou will need auth-param1 when authenticating your user using the SDK.\n\n\n\n\n\nPass auth-param1 to the SDK as sdkInput.\n\n\nAuthenticate your user\nAfter initiating the request, you have 10 minutes to complete the authentication process and finalize the request.\nTo authenticate your user with the Authentication SDK:\n\n\nTrigger the SDK and pass the auth-param1 value from the previous step as sdkInput.\n\n\n    \n        \n        \n    \n\n\n\n\nPass sdkOutput to your server.\n\n\nGet the transaction history\nTo finalize the request to get the transaction history:\n\n\nMake a GET  \/transactions request, specifying the following parameter in the request header.\n\n\n\nRequest header\nDescription\n\n\n\n\nWWW-Authenticate\nSCA realm: Transaction.auth-param1: Base64-encoded value of sdkOutput you get when you initiate authentication.\n\n\n\n\n\n\n\n\nUse the content of the  data array to present the transaction information to your user.\n\n\n\n\n\nSee also\n\nHow SCA works\n","type":"page","locale":"pt","boost":18,"hierarchy":{"lvl0":"Home","lvl1":"Business accounts","lvl2":"SCA for transaction history"},"hierarchy_url":{"lvl0":"https:\/\/docs.adyen.com\/pt","lvl1":"https:\/\/docs.adyen.com\/pt\/business-accounts","lvl2":"\/pt\/business-accounts\/sca-for-transaction-history"},"levels":3,"category":"","category_color":"","tags":["transaction","history"]}}
