Tutorial
How the Investment Asset Report API Works
- Request an access token using OAuth 2.0 client credentials. The authentication inputs depend on whether you access the Sandbox or Production environment.
Note: Please include the required scopes for the endpoints you wish to access in your authorization request. They are detailed in the OAuth 2.0 Scopes.
- Retrieve client details using the /clients endpoint.
- Retrieve asset reports for a client, including securities accounts, cash accounts, or transaction data for a specified date or date range.
Requirements
To use this API in a production environment, you must have the following:
-
- A Organisation Validation (OV) or Extended Validation (EV) TLS/SSL certificate from ABN AMRO, Digicert, QuoVadis, Sectigo or Entrust with ClientAuthentication EKU, without wildcard options.
Note: We have been made aware that Sectigo stopped issuing TLS/SSL certificates with ClientAuthentication EKU in October 2025.
Note: Since the second half of May 2026, ABN AMRO can issue Client Authorization certificates on request. We only allow these certificates to be used to connect to this API. No other use case is allowed.
- The organization name issued on the certificate must correspond with the name of the API contract holder.
Available Endpoints
- getClients: Retrieve client information (GET /clients)
- getCashBalances: Get cash account balances (GET /clients/{clientId}/cash-balances)
- getCashTransactions: Get cash account transactions (GET /clients/{clientId}/cash-transactions)
- getInvestmentPositions: Get investment positions (GET /clients/{clientId}/investment-positions)
- getInvestmentTransactions: Get investment transactions (GET /clients/{clientId}/investment-transactions)
OAuth 2.0 Scopes
Each endpoint requires a specific OAuth 2.0 scope:
| Scope (use this in your authorization request) | Endpoint | Description |
|---|---|---|
investments:clients:read |
GET /clients | Access client information and account details |
investments:cash-account:read |
GET /clients/{clientId}/cash-balances | Access cash account balances |
investments:cash-transactions:read |
GET /clients/{clientId}/cash-transactions | Access cash transaction history |
investments:securities-account:read |
GET /clients/{clientId}/investment-positions | Access investment positions and holdings |
investments:securities-transactions:read |
GET /clients/{clientId}/investment-transactions | Access investment transaction history |
Request tokens with only the scopes needed for your use case to follow the principle of least privilege.
Further details are available in the How to use this API process.
Authentication & Authorization
This API uses OAuth 2.0 for authentication and authorization.
First, you must authenticate to the appropriate environment (Sandbox or Production) to receive an access token. Please include all the scopes you wish to query in your access token request.
After receiving your access token, you can send requests to the API.
All requests must include:
- A valid JWT access token obtained from the OAuth 2.0 token endpoint in the Authorization header.
- The appropriate scope for the endpoint being accessed.
- Your Production API-Key in the request headers.
Requesting Sandbox Access
The Sandbox and Production environments are functionally identical. The Sandbox is static, which means that you can perform all operations to retrieve investments asset report details in a safe environment.
Please note that the Sandbox environment contains a limited set of test data, that will be expanded during Q1 and Q2 2026.
To use the Investment Asset Report API in a Sandbox environment, you first need to contact the support team. Your ABN AMRO account manager will be able to guide you.
In order to be onboarded onto this API, you'll need to create a Developer Account. To do this, please follow the following steps:
- Register and create an account on ABN AMRO Developer Portal:
- Click Sign up.
- Enter your details, and click Create new account.
- Developer Support will send you an activation link by email.
- Click the activation link.
- Create and register application:
- Log in to your account.
- In the left-side navigation click Apps.
- Click Add app.
- In the App name field, enter a name for your application.
- In the APIs field, select Investment Asset Report, and click Add app.
After completing the sign-up process above, please provide the following details to your ABN AMRO account manager and the support team:
- E-mail address used to create the Developer Portal account.
- Team e-mail address.
- App Name, as used in the Developer Portal to sign up to this API.
ABN AMRO will generally need 1-3 working days to finish the onboarding process for you. You will be notified once you can access the Sandbox environment.
Sandbox Access Details
- Sandbox URL: https://api-sandbox.abnamro.com
- Sandbox token URL: https://auth-sandbox.abnamro.com/as/token.oauth2
- client_id: your AMRI ID (example: AMRI_1234567890), as provided to you by ABN AMRO
- client_secret: your client_secret, as provided to you by ABN AMRO
- API-Key: Your API Key from the Developer Portal
Requesting Production Access
To access the Production environment, you'll need to work with the support team. Please contact your ABN AMRO account manager for details. Onboarding onto Production may generally take up to one week. We strongly recommend a test period of at least one month before using this API in a live environment.
Follow the steps below to use this API in a Production environment.
To get access to Production:
- Log in to Investment Asset Report (https://developer.abnamro.com/).
- Go to the Production Access Request form.
- Select the Investment Asset Report API.
Note: If you request access to other investment APIs besides this one at the same time, please inform the support team to prevent delayed processing.
- Fill in the form, and click Submit.
- You'll receive a confirmation email and ticket Id.
- ABN AMRO Developer Support validates the form.
- When the form is validated and the setup is complete, your ABN AMRO account manager or the support team will contact you.
- A new app is added in Apps. This new app contains your API key for the Production environment. Please note that this API key will differ from the Sandbox API key.
The lead time of this process is generally 3-5 working days.
Production Access Details
- Production URL: https://api.abnamro.com
- Production Token URL: https://auth-mtls.abnamro.com/as/token.oauth2
- client_id: your AMRI ID (example: AMRI_1234567890), as provided to you by ABN AMRO
- API-Key: Your API Key from the Developer Portal
- Certificate files: Your OV or EV SSL certificate and private key
How to use this API
This instruction describes how to connect an application to the Investment Asset Report API.
Please note that there are differences in authentication between the Sandbox and Production environment. These differences are clearly noted in this instruction.
Note: Before you start this process, you must complete the steps described in Requesting Sandbox Access to be able to access the Sandbox environment. For Production, you'll need to have completed the Requesting Production Access steps.
Step 1 - Request an access token
In this step, the OAuth 2.0 client credentials flow is used to obtain access to the Investment Asset Report API. In the Sandbox environment, you only need to provide a client_id (AMRI ID) and client_secret for authentication. Please note that in the Production environment, you need to provide your public and private key as well as your client_id (AMRI ID) to authenticate. In both environments, please use the bearer token provided during authentication as well as your API-Key when calling endpoints for data.
Sample request for Sandbox
Request an access token using the following sample:
curl -X POST "https://auth-sandbox.abnamro.com/as/token.oauth2" \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'grant_type=client_credentials&client_id=AMRI_1234567890&client_secret=YourClientSecretHere&scope=investments:clients:read investments:securities-account:read'
Note: You can request multiple scopes in a single token by space-separating them.
Sample request for Production
Request an access token with the appropriate scope:
curl -X POST "https://auth-mtls.abnamro.com/as/token.oauth2" \
--key PrivateKeyCommercial.key \
-u 'AMRI_1234567890:YourClientSecretHere' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'grant_type=client_credentials&client_id=AMRI_1234567890&scope=investments:clients:read investments:securities-account:read'
Note: You can request multiple scopes in a single token by space-separating them.
Sample Response
{
"token_type": "Bearer",
"access_token": "X1PTWZre0fnW72l263yrhAWB2FDwx3tg",
"expires_in": 7199
}
- Call the endpoints with the access token and required headers:
- Authorization: Bearer {access_token}
- API-Key: Your API Key
Endpoint Examples
/clients
Required Scope: investments:clients:read
Request:
curl -X GET "https://api-sandbox.abnamro.com/consumer-investments/investment-asset-report/v3/clients" \
-H 'Authorization: Bearer X1PTWZre0fnW72l263yrhAWB2FDwx3tg' \
-H 'API-Key: YourApiKeyHere'
Response:
{
"clients": [
{
"clientId": "123e4567-e89b-12d3-a456-426614174000",
"clientName": "John Doe",
"accounts": [
{
"accountNumber": "0123456789",
"productName": "Maatwerk Beleggen",
"type": "Investment"
}
]
}
]
}
/clients/{clientId}/cash-balances
Required Scope: investments:cash-account:read
Request:
curl -X GET "https://api-sandbox.abnamro.com/consumer-investments/investment-asset-report/v3/clients/123e4567-e89b-12d3-a456-426614174000/cash-balances?date=2024-04-24" \
-H 'Authorization: Bearer X1PTWZre0fnW72l263yrhAWB2FDwx3tg' \
-H 'API-Key: YourApiKeyHere'
Response:
{
"cashBalances": [
{
"reportDate": "2024-04-24",
"cashAccountNumber": "412833824",
"balanceAmount": 1234.57,
"currencyCode": "EUR",
"creditDebitIndicator": "DEBIT"
}
]
}
/clients/{clientId}/cash-transactions
Required Scope: investments:cash-transactions:read
Request:
curl -X GET "https://api-sandbox.abnamro.com/consumer-investments/investment-asset-report/v3/clients/123e4567-e89b-12d3-a456-426614174000/cash-transactions?date=2024-04-24" \
-H 'Authorization: Bearer X1PTWZre0fnW72l263yrhAWB2FDwx3tg' \
-H 'API-Key: YourApiKeyHere'
Response:
{
"cashTransactions": [
{
"reportDate": "2024-04-24",
"cashAccountNumber": "412833824",
"transactionKey": "5UZ3JCMTM",
"transactionDateTime": "2024-04-24T12:00:00.000Z",
"bookDate": "2024-04-24",
"transactionAmount": 50.11,
"creditDebitIndicator": "DEBIT",
"currencyCode": "EUR",
"balanceAfterTransaction": 93769.11,
"balanceCreditDebitIndicator": "DEBIT",
"valueDate": "2024-04-24",
"counterpartyName": "ING AMSTERDAM",
"counterpartyAccountNumber": "0506417344",
"description": "Generic description example"
}
]
}
/clients/{clientId}/investment-positions
Required Scope: investments:securities-account:read
Request:
curl -X GET "https://api-sandbox.abnamro.com/consumer-investments/investment-asset-report/v3/clients/123e4567-e89b-12d3-a456-426614174000/investment-positions?date=2024-04-24" \
-H 'Authorization: Bearer X1PTWZre0fnW72l263yrhAWB2FDwx3tg' \
-H 'API-Key: YourApiKeyHere'
Response:
{
"investmentPositions": [
{
"reportDate": "2024-04-24",
"code": "009080",
"securitiesAccountNumber": "412833824",
"ISIN": "NL0000009082",
"nameNL": "AAND KON KPN @ EUR 0.04",
"quantity": 1.00
}
]
}
/clients/{clientId}/investment-transactions
Required Scope: investments:securities-transactions:read
Request:
curl -X GET "https://api-sandbox.abnamro.com/consumer-investments/investment-asset-report/v3/clients/123e4567-e89b-12d3-a456-426614174000/investment-transactions?date=2024-04-24" \
-H 'Authorization: Bearer X1PTWZre0fnW72l263yrhAWB2FDwx3tg' \
-H 'API-Key: YourApiKeyHere'
Response:
{
"investmentTransactions": [
{
"reportDate": "2024-04-24",
"transactionTypeId": 1010103,
"transactionTypeIdDescription": "Sell stock exchange",
"transactionDate": "2024-04-24",
"transactionNumber": "469976",
"transactionKey": "5UZ3JCMTM",
"currencyCode": "USD",
"orderStream": "DOMESTIC_CLASSICAL",
"DRIPExecutionPrice": 0.00,
"executionDate": "2024-04-24",
"orderQuantity": 12.0,
"instrument": {
"code": "009080",
"ISIN": "NL0000009082",
"nameNL": "AAND KON KPN @ EUR 0.04",
"shortNameNL": "KPN KON",
"type": "OPTION",
"marketIdentifierCode": "XAMS",
"exchangeCode": "ENA",
"unitOfAdministration": "CURRENCY",
"quote": {
"value": 16.98,
"securityBidOrAskSpread": -19.16,
"securitySwingPrice": 0,
"updateDate": "2015-05-28",
"type": "MONEY"
},
"option": {
"rootSymbol": "AGN",
"contractSize": 100.12345,
"type": "CALL",
"expirationDate": "2022-12-16",
"strikePrice": 4.1234,
"strikePriceCurrency": "EUR",
"dateOfRegistration": "2021-05-10"
}
},
"settlement": {
"securitiesAccountNumber": "412833824",
"accruedInterest": 0,
"commission": 0,
"commissionDiscount": 0,
"stampDuty": 0,
"financialTransactionTax": 0,
"withholdingTax": -313.42,
"additionalAmericanIncomeTax": 15,
"costs": -1969.56,
"costsDiscount": 0,
"fundFee": 0,
"conversionFee": 2089.47,
"conversionRefund": 2089.4,
"emissionPayment": 0,
"correspondentDiscount": 0,
"securityCurrToSettlementCurrExchangeRate": 1,
"currencyCosts": -134.61,
"DRIPCosts": 0,
"netAmount": 1776.05,
"debitCreditIndicator": "CREDIT",
"settlementDate": "2021-05-10",
"currencyCode": "EUR"
}
}
]
}
Need help?