Access V2 migration guide
Overview
The Access V2 API is an evolved version of the Access V1 API. This document covers the differences between both versions and how to upgrade your client to the Access V2 API.
Major changes summary
All services, request/response parameters, and headers that are marked as deprecated in V1 have been removed from V2.
The old internal Web Form (V1) is no longer supported in Access V2.So if you’re using finAPI’s internal Web Form, you have to migrate to the Web Form 2.0 product before you can use Access V2. For Access V1, the internal Web Form is still available.
General improvements and cleanup have been done on the service parameters and responses.
The technical and/or semantic details of some fields have changed. The changes are described in detail below.
OpenAPI definition changes
For Access V2, a new OpenAPI definition (“openapi-access-v2.yaml”) is available by selecting “V2 (latest)” in the “API VERSION” combo box of the API Documentation page.
With the Access V2 rollout, the “openapi-access-latest.yaml” file (the one you got previously when “finAPI Access” was selected in the “SELECT PRODUCT” combo box) is no longer available. This was a cleaned-up Access V1 view without deprecated fields and services, which will no longer be available, as the Access V1 API has now been deprecated as a whole.
The full Access V1 API is still available as “openapi-access.yaml”. Previously it was referred to as “finAPI Access (with deprecation)”, now you find it by selecting “V1 deprecated” in the “API VERSION” combo box.
The “openapi-payment.yaml” file is no longer supported. It was shown before when “finAPI Payment” was selected in the “SELECT PRODUCT” combo box, but in fact, it was a payment-filtered view on the Access API. If you have generated a client based on this yaml file, please now use the full “openapi-access.yaml” yaml file instead.
Activate Access V2
As described in Upgrading to a new API version | Switching-between-API-versions, your client configuration is bound to one API version at a time, which is V1 initially.
To update your client configuration to Access V2, please execute the switchApiVersion service and set the apiVersion parameter to V2. After that, you will be able to go back to V1 for 7 days. Now you are ready to use the new API.
API changes summary
To make migration easy for you, the following chapter groups most API changes by feature, so that you can go through the sub-chapters one by one and adjust your client code.
In the following, services are referred to by their “operationId” in the OpenAPI file, not by the service name that is shown in the API documentation. However, both names match closely, e.g. the “Get and search all banks” service has the operationId “getAndSearchAllBanks“.
For changes in service requests and responses, the name of the OpenAPI schema type is used in the text as the reference. You can find these schema-type definitions in the “components/schemas” section of the OpenAPI file.
If you use an OpenAPI-generated API client: Please generate a new client based on “openapi-access-v2.yaml” and update your project with the newly generated sources. Some of the changes described below will not even affect you as they are abstracted by the generated code.
The mentioned operationId’s are usually identical to the service’s method name in the generated client, so should help you to easily find the service calls in your code. Also the mentioned schema type names usually match with the model class names in the generated code.
If you use a self-implemented API client: Please refer to the openapi-access-v2.yaml file to determine the respective service definition by searching for the mentioned operationId resp. schema type name.
For detailed information on the changes to a specific service, you may want to refer to the full API diff in the appendix.
OpenAPI operationId changes
The OpenAPI operationId for the "Delete a consent" service has been changed from deleteAccessData to deleteConsent to better reflect the service name.
Url changes
All services available below /api/v1 for Access V1 are now located below the /api/v2 base path for Access V2.
Additionally, OAuth2 token services have been moved below the base path:
getToken:/oauth/token→/api/v2/oauth/tokenrevokeToken:/oauth/revoke→/api/v2/oauth/revoke
If you use an OpenAPI-generated API client: No changes are required to your code.
Null response properties are skipped in the response
Response properties having a null value are no longer returned in the response.
Example
Access V1: getTransaction
{
"id": 6134,
"parentId": null,
"accountId": 3,
"valueDate": "2022-09-05 00:00:00.000",
"importDate": "2022-09-05 11:12:22.000",
...
"endToEndReference": null,
"compensationAmount": null,
"originalAmount": null,
"originalCurrency": null,
"differentDebitor": null,
"differentCreditor": null
}
Access V2: getTransaction
{
"id": 6134,
"accountId": 3,
"valueDate": "2022-09-05",
"importDate": "2022-09-05T11:12:22.000+02:00"
...
}
Accordingly in the OpenAPI definition, all nullable response properties are no longer marked as mandatory, and the “| null” addition has been removed from the type definition:
Example
Access V1:

Access V2:

If you use an OpenAPI-generated API client: No changes should be required, as the generated code should still return null values as before.
Date fields use real date types instead of strings
In Access V1, date properties in service requests and responses were defined as OpenAPI “string” type with an additional format description “YYYY-MM-DD” in the API docs. Starting with Access V2, all such properties now refer to the regular OpenAPI "date" type by additionally specifying the format: date qualifier.
The JSON payload is unchanged as the OpenAPI “date” type uses an identical date format. But if you generate a client from the OpenAPI definition, you will now get a proper date type generated in your target language, making date-to-string or string-to-date conversion unnecessary.
The following properties are affected:
BankConnectionOwnertype:dateOfBirthCreateDirectDebitParamstype:executionDateCreateMoneyTransferParamstype:executionDateCreateStandingOrderParamstype:startDate,endDateDirectDebitOrderParamstype:mandateDateEditTppCredentialParamstype:validFromDate,validUntilDateNewTransactiontype:bookingDate,valueDatePaymenttype:instructedExecutionDateStandingOrdertype:startDate,endDateTppCertificatetype:validFrom,validUntilTppCertificateParamstype:validFromDate,validUntilDateTppCredentialstype:validFrom,validUntilTppCredentialsParamstype:validFromDate,validUntilDateUserInfotype:registrationDate,deletionDate,lastActiveDate,latestBankConnectionImportDate,latestBankConnectionDeletionDate
Additionally, the following response properties, which were previously defined as type “string” containing a date-time value, but in fact always returned a date with “00:00:00.000” as the time part, have been migrated to the OpenAPI “date” type. This affects the following response types and properties:
Transactiontype:valueDate,bankBookingDate,finapiBookingDateDailyBalancetype:date
Timezone information included for date-time response properties
In Access V1, date-time properties in service responses were defined as OpenAPI “string” type with an additional format description “'YYYY-MM-DD HH:MM:SS.SSS' (german time)” in the API docs. Starting with Access V2, such properties now use the regular OpenAPI “date-time” format which includes timezone information according to RFC 3339, section 5.6.
The JSON response format is changed in the following way (Example: Excerpt from getAccount response):
Access V1:
"lastSuccessfulUpdate": "2022-09-05 13:14:58.000"
Access V2:
"lastSuccessfulUpdate": "2022-09-05T13:14:58.000+02:00"
The following response properties are affected:
Accounttype:lastSuccessfulUpdate,lastUpdateAttemptAccountInterfacetype:lastSuccessfulUpdate,lastUpdateAttemptBanktype:lastCommunicationAttempt,lastSuccessfulCommunicationBankConsenttype:expiresAtBankInterfacetype:lastCommunicationAttempt,lastSuccessfulCommunicationDailyBalanceListtype:latestCommonBalanceTimestampErrorMessagetype:dateIbanRuletype:creationDateKeywordRuletype:creationDatePaymenttype:requestDate,executionDateSecuritytype:quoteDateStandingOrdertype:requestDate,requestCompletionDateTransactiontype:importDateUpdateResulttype:timestamp
If you generate a client from the OpenAPI definition, you will now get a proper date-time type generated in your target language, making date-time-to-string or string-to-date-time conversion unnecessary.
The returned timezone is defined by the finAPI Access server environment, but can easily be converted into your desired client timezone.
Web Form related changes
Support for the deprecated internal Web Form has been removed.
Removed services
getWebForm
Changed services
The HTTP status code 451 to signal that a Web Form must be opened has been removed from the following services:
importBankConnection,updateBankConnection,editBankConnection,connectInterface,submitPayment
The enumeration properties aisWebFormMode, pisWebFormMode and pisStandaloneWebFormMode returned by the services
getClientConfiguration,editClientConfiguration
have been removed and replaced by the new boolean properties aisViaWebForm, pisViaWebForm, and pisStandaloneViaWebForm. The mapping is as follows:
aisWebFormMode.INTERNAL,-> no longer available as the internal Web Form has been removed.aisWebFormMode.EXTERNAL→aisViaWebFormis set to trueaisWebFormMode.DISABLED->aisViaWebFormis set to falsepisWebFormMode.INTERNAL,-> no longer available as the internal Web Form has been removed.pisWebFormMode.EXTERNAL→pisViaWebFormis set to truepisWebFormMode.DISABLED->pisViaWebFormis set to falsepisStandaloneWebFormMode.INTERNAL,-> no longer available as the internal Web Form has been removed.pisStandaloneWebFormMode.EXTERNAL→pisStandaloneViaWebFormis set to truepisStandaloneWebFormMode.DISABLED->pisStandaloneViaWebFormis set to false
Removed properties (related to the Web Form) are mentioned in the “Removed deprecated request and response properties” section below.
Authorization changes
For security reasons, it’s no longer possible to provide security-relevant data as query parameters. This affects the following services:
getTokenservice: credentials can no longer be passed as query parameters. Please provide credentials in the request body as described in the service documentation.revokeTokenservice: the query parameters -tokenandtoken_type_hint- have been replaced by the newRevokeTokenParamsOpenAPI schema type which must now be provided in the request body.all other services: the access token can no longer be passed with the “access_token” query parameter. Please provide it in the “Authorization” request header instead.
The maximum length of the “access_token” returned by the getToken service has been increased from 128 to 8192. The token format hasn’t changed yet with Access V2, and existing access tokens created with the Access V1 API are still valid, but the token format may change in the future. So please make sure you are able to handle and store tokens up to the new maximum length.
Property interface renamed to bankingInterface
To avoid problems with generated API clients, the property interface has been renamed to bankingInterface for parameters and responses, as "interface" is a reserved word in some programming languages.
This affects the following schema types:
request types:
ImportBankConnectionParams,UpdateBankConnectionParams,EditBankConnectionParams,ConnectInterfaceParams,RemoveInterfaceParams,SubmitPaymentParams,SubmitStandingOrderParams,MockBankConnectionUpdateresponse types:
BankInterface,BankConnectionInterface,AccountInterface
For consistency, the property “sourceInterface” has also been renamed to "sourceBankingInterface" in:
ConnectInterfaceParamstype
Also, the supportedInterfaces query parameter has been renamed to supportedBankingInterfaces in the following service:
getAndSearchAllBanks
Property bankingInterface made mandatory
The bankingInterface property (renamed from "interface") has been made mandatory in the following request types:
importBankConnectionParams,UpdateBankConnectionParams,MockBankConnectionUpdate
Property Bank.interfaces changed in its semantics
In V1, the interfaces property of the Bank resource contained only those interfaces that were supported (i.e. that can be used for bank connection import and/or payments).
In V2, the interfaces property contains all interfaces that exist in the finAPI bank repository, even when they are currently not supported. This change was done to ensure data consistency in the case when we have to (temporarily) disable an interface, for example, due to bank-side issues. In V1, this situation could lead to existing bank connections that are linked to an interface that no longer exists in the API. In V2, disabled interfaces would still be returned in the API.
To determine whether an interface is supported in V2, you need to regard the BankInterface properties isAisSupported / isPisSupported.
Property UpdateBankConnectionParams.importNewAccounts changed in its semantics
In V1, if the flag importNewAccounts was set to true on a bank connection update and the bank connection had an existing consent with supportsImportNewAccounts=false (which is the case for Sparkasse banks and the finAPI demo bank DEMO0001 with XS2A), the update succeeded, but without importing new accounts (as the bank can’t handle new accounts with the existing consent), so the flag had no effect.
In V2, this case now results in an HTTP 422 error with type=BUSINESS and code=ILLEGAL_ENTITY_STATE. So if you want to perform an update with importNewAccounts=true, please make sure that the consent (if available) supports it. If it doesn’t, then you must first delete the existing consent with the deleteConsent service before you can try to import new accounts. Note that in any case, when a new consent is requested during an update, user involvement is required due to strong customer authentication.
Added properties
The following new response properties have been added (please refer to the Access V2 docs for further details):
BankInterfacetype:isPisSupported
Removed deprecated services
All services have been removed that were marked as deprecated for a long time (please refer to their Access V1 docs on how to migrate them):
Deprecated Payment Services:
requestSepaMoneyTransfer,executeSepaMoneyTransfer,requestSepaDirectDebit,executeSepaDirectDebit
Deprecated “getMultiple” services (please migrate to the respective “getAll” services):
getMultipleBanks,getMultipleBankConnections,getMultipleAccounts,getMultipleTransactions,getMultipleSecurities,getMultipleCategories,getMultipleLabels
Deprecated “editMultiple” services (please migrate to the “editMultipleTransactions” service):
editMultipleTransactionsDeprecated
Removed deprecated query parameters
The following query parameters have been removed:
getAndSearchAllBanksservice:isSupported,pinsAreVolatile,supportedDataSourcesgetAndSearchAllAccountsservice:accountTypeIds
Removed deprecated request and response properties
The following properties have been removed from request and response schema types. All properties are marked as deprecated in the Access V1 API. Please refer to the Access V1 docs on how to migrate them.
Client configuration related:
ClientConfigurationParamsrequest type: isPinStorageAvailableInWebForm, storeSecretsAvailableInWebForm, applicationName, supportSubjectDefault, supportEmailClientConfigurationresponse type: isXs2aEnabled, pinStorageAvailableInWebForm, applicationName, storeSecretsAvailableInWebForm, supportSubjectDefault, supportEmail, autoDismountWebForm
Account related:
AcountParamsrequest type:accountTypeIdAccountresponse type:accountTypeId,accountTypeName,lastSuccessfulUpdate,lastUpdateAttempt,status,supportedOrders,clearingAccounts
Bank related:
Bankresponse type:loginHint,blzs,isSupported,health,loginFieldUserId,loginFieldCustomerId,loginFieldPin,pinsAreVolatile,isCustomerIdPassword,supportedDataSources,lastCommunicationAttempt,lastSuccessfulCommunicationBankInterfaceresponse type:isMoneyTransferSupported
Bank connection related:
importBankConnectionParamsrequest type:bankingUserId,bankingCustomerId,bankingPin,storePin,accountTypeIds,challengeResponseupdateBankConnectionParamsrequest type:bankingPin,storePin,challengeResponse,forceWebFormeditBankConnectionParamsrequest type:bankingUserId,bankingCustomerId,bankingPinBankConnectionresponse type:bankId,bankingUserId,bankingCustomerId,bankingPin,type,lastManualUpdate,lastAutoUpdate,ibanOnlyMoneyTransferSupported,ibanOnlyDirectDebitSupported,collectiveMoneyTransferSupported,defaultTwoStepProcedureId,twoStepProcedures,furtherLoginNotRecommended
Payment related:
SubmitPaymentParamsrequest type:hideTransactionDetailsInWebForm,forceWebFormCreateStandingOrderParamsrequest type:dayOfExecutionStandingOrderresponse type:dayOfExecution
Proposed migration approach
We propose the following approach for the migration to Access V2:
If you are still using the deprecated internal Access Web Form :
Then please migrate to Web Form V2 first. We suggest doing this on Access V1 already as a separate step before the Access V2 migration.If you are still using deprecated services or properties from Access V1 (see “Removed Services” section”):
Then we suggest migrating them to non-deprecated services on Access V1 first, as a separate step before starting the Access V2 migration, as the Access V1 API documentation describes the necessary changes in detail.
If your API client has been generated from the V1 “openapi-access-latest.yaml” file, in which all deprecations have been removed already, you are already done.Activate the Access V2 API for your client on our sandbox environment using the switchApiVersion service.
Adjust your client to the Access V2 API by implementing the changes described in the “API changes summary” section and test that your application works correctly against the new API. If you cannot finish your tests within the 7 days rollback period, remember to switch back to
V1in time. This allows you to restart the testing period when you switch toV2again, to have 7 more days for testing.Activate the Access V2 API for your client on your production environment and roll out your adjusted application. Also on the production environment, you can switch back to
V1if necessary as described for the sandbox environment.
Appendix
For a detailed comparison of service changes, you may refer to the generated API diff between Access V1 and Access V2:
Please note that the document reflects the changes at the time when Access V2 was rolled out on October 20th, 2022. Later adjustments or extensions to the Access API won’t be covered here.