This guide walks you through onboarding corporate bank accounts via the Open Banking channel. The onboarding process connects your organization's bank accounts to the Aritma Banking API, enabling account information retrieval and payment initiation.
Before you begin, make sure you have the following in place:
- A tenant and subscription - see the Getting Started guide
- A client with the
banking.consents.createIAM action granted on the subscription. In most cases, grantingbanking.manageis sufficient as it includesbanking.consents.createand other required actions. - The scope
banking.ais.readto verify onboarded accounts
The examples below use the following values - replace them with your own:
| Placeholder | Example value | Description |
|---|---|---|
subscriptionId | 992606c793984bcf81e543d90ecfbb36 | Your subscription ID |
organisationNumber | 999999999 | The organization number |
bankId | cba4beaf-9b52-40c5-8929-e0af6c1e8b18 | The bank identifier |
Use the GET /banks endpoint to find available banks for open banking. You'll need the bankId from the response when creating a consent.
- Mock serverhttps://developer.aritma.com/_mock/apis/banking/v4/openapi/banking-openapi/banks
- https://banking.zdata.io/api/banks
curl -i -X GET \
'https://developer.aritma.com/_mock/apis/banking/v4/openapi/banking-openapi/banks?countryCode=NO&channels=string&includeAdditionalInformation=true' \
-H 'api-version: string'Some banks include an onboarding field with links to external onboarding documents or pages. Check these for any bank-specific requirements before proceeding.
Create a consent by calling POST /consents with the organization and bank account details.
| Field | Description |
|---|---|
channelType | Must be "openBanking" for open banking |
subscriptionId | Your subscription ID (e.g. 992606c793984bcf81e543d90ecfbb36) |
resourceGroupName | The organization number (e.g. "999999999"). A new resource group is created automatically if one does not already exist. |
bankId | The bank identifier from Step 1 |
properties.psuCorporateId | The organization number |
properties.accountNumbers | Comma-separated list of account numbers to onboard |
properties.combinedServiceIndicator | Set to "true" to enable combined AIS and PIS services |
properties.numberOfApprovers | Number of required approvers (e.g. "1") |
The required consent properties may vary between banks. Use GET /banks/{bankId} with includeAdditionalInformation=true to discover bank-specific property requirements.
- Mock serverhttps://developer.aritma.com/_mock/apis/banking/v4/openapi/banking-openapi/consents
- https://banking.zdata.io/api/consents
curl -i -X POST \
https://developer.aritma.com/_mock/apis/banking/v4/openapi/banking-openapi/consents \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Content-Type: application/json' \
-H 'api-version: string' \
-d '{
"channelType": "openBanking",
"subscriptionId": "992606c793984bcf81e543d90ecfbb36",
"resourceGroupName": "999999999",
"properties": {
"psuCorporateId": "999999999",
"combinedServiceIndicator": "true",
"numberOfApprovers": "1",
"accountNumbers": "<AccountNumber1>, <AccountNumber2>"
},
"bankId": "cba4beaf-9b52-40c5-8929-e0af6c1e8b18"
}'The response contains:
consentId- store this for later useredirectUrl- the URL to redirect the PSU (Payment Service User) tostatus- the initial consent status
The redirectUrl is only usable once.
A user with a valid role in the organization must open the redirectUrl from the previous step. They will be presented with information about the onboarding and asked to confirm it.
You can preselect the language by appending a ui-culture query parameter to the redirect URL:
?ui-culture=nb- Norwegian Bokmål?ui-culture=en- English (default)
The PSU must authenticate with BankID (in Norway) or the country-equivalent identification method. This verifies the user's identity with Aritma.
After user verification, our system automatically performs KYC (Know Your Customer) validation:
- Role validation - verifies the PSU has a valid role in the organization
- Account ownership - verifies the organization is the account owner of the bank accounts requested in the consent
What happens next depends on the state of the bank agreement and KYC results:
- Bank agreement exists - If an agreement with the bank has already been established (external process), the onboarding service will typically complete the onboarding automatically and provision the accounts.
- No bank agreement or insufficient information - If no bank agreement has been created, or the bank does not supply enough onboarding information, the Aritma support team will manually review the onboarding.
- KYC insufficient - If KYC validation is not sufficient, or KYC is not supported for the country, Aritma support can execute manual KYC validation.
You can track the consent status by polling GET /consents/{consentId} or by subscribing to consent events through the Events API. The consent status will transition from Created → Started → Authorized when complete, or to AwaitingApproval if manual review is required.
- Mock serverhttps://developer.aritma.com/_mock/apis/banking/v4/openapi/banking-openapi/consents/{id}
- https://banking.zdata.io/api/consents/{id}
curl -i -X GET \
https://developer.aritma.com/_mock/apis/banking/v4/openapi/banking-openapi/consents/1E5EFC3B-635E-4973-A605-41D7F0D6D7B3 \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'api-version: string'Once the consent status is Authorized, verify the onboarding by retrieving the accounts. You can scope the request in two ways:
- Mock serverhttps://developer.aritma.com/_mock/apis/banking/v4/openapi/banking-openapi/accounts
- https://banking.zdata.io/api/accounts
curl -i -X GET \
'https://developer.aritma.com/_mock/apis/banking/v4/openapi/banking-openapi/accounts?withBalance=true&bban=12345612345678&iban=FR7612345987650123456789014&search=string&cursor=string' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Channel-Type: unspecified' \
-H 'Consent-ID: <consentId>' \
-H 'PSU-IP-Address: string' \
-H 'Resource-Group-Name: string' \
-H 'Scopes: /subscriptions/7fdf00601dfb/resource-groups/my-company' \
-H 'Subscription-Id: string' \
-H 'api-version: string'- Mock serverhttps://developer.aritma.com/_mock/apis/banking/v4/openapi/banking-openapi/accounts
- https://banking.zdata.io/api/accounts
curl -i -X GET \
'https://developer.aritma.com/_mock/apis/banking/v4/openapi/banking-openapi/accounts?withBalance=true&bban=12345612345678&iban=FR7612345987650123456789014&search=string&cursor=string' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Channel-Type: openBanking' \
-H 'Consent-ID: string' \
-H 'PSU-IP-Address: string' \
-H 'Resource-Group-Name: 999999999' \
-H 'Scopes: /subscriptions/7fdf00601dfb/resource-groups/my-company' \
-H 'Subscription-Id: 992606c793984bcf81e543d90ecfbb36' \
-H 'api-version: string'If accounts are returned with status enabled, they are ready for use - including payment initiation.