Aanleveren Portaal supports two authentication methods:
- OAuth 2.0 in combination with eHerkenning
- PKIoverheid Certificate (Mutual TLS)
-
Software vendors can use either authentication method to request permission from Aanleveren Portaal users to act on their behalf. This enables applications to securely exchange data with the requesting party.
The selected authentication method also determines which API endpoints must be used.
You find the documentation related to the authentication here: Aanleveren Portaal authentication At the bottom of this page, you will find an example Postman Collection (.json) containing all API calls supported by the Aanleveren Portaal API.
The Swagger/OpenAPI specification for the Aanleveren Portaal API is also available on this page.
API Endpoints
| Environment | OAuth 2.0 Authentication | PKIoverheid (Mutual TLS) Authentication |
|---|---|---|
| Test | https://test-aanleverenapi.sbrnexus.nl | https://test-aanleverenapi-pki.sbrnexus.nl |
| Acceptance | https://acc-aanleverenapi.sbrnexus.nl | https://acc-aanleverenapi-pki.sbrnexus.nl |
| Production | https://aanleverenapi.sbrnexus.nl | https://aanleverenapi-pki.sbrnexus.nl |
Sending a report
Sending a report consists of three steps/API calls:
- Uploading the XBRL file (max 25 mb)
- Uploading attachments optionally (maximum 25 MB per attachment with a maximum of 150 MB in total incl. XBRL)
- Submitting the report
Uploading the XBRL file
For uploading the XBRL file, we use an HTTP multipart POST.
| Request |
|
curl -i -X POST \ - H "x-api-key: $token" \ - H "Content-Type: multipart/form-data" \ - F "file=@valid.xbrl" \ https://acc-aanleverenapi.sbrnexus.nl/api/reports |
| Response |
|
{ "guid": "AMX5LQjUSyGhlFdIe71f-g", "filename": "valid.xbrl", "checksum": "14293581bf91d848a811708e7e120a9b87c389595e9752ded054fdc0c9b924e4", "cocNumber": null, "cocOrganizationName": null, "entryPoint": { "guid": "XSCXnm5nShutabIKHbcaPQ", "uri": "https://www.sbrnexus.nl/ft15/frc/20201211/entrypoints/frc-rpt-nt-inrichtingsjaarrekening-2020.xsd", "name": "FT15 nt-inrichtingsjaarrekening-2020" }, "sizeInBytes": 184831, "version": 0 } |
As a result, you will receive the generated report. This report includes the schema reference (entryPoint) of the file and the Chamber of Commerce number (cocNumber), once the coc is successfully validated. When submitting, reference to this report can be made by using the GUID from the result.
Uploading attachments
For certain message types, it's possible or necessary to include attachments as part of the submission. To determine which types and quantities are allowed, the message types need to be retrieved (see "Submitting Reports to the BIV").
Similar to the report submission, we use an HTTP multipart POST for uploading attachments.
| Request |
|
curl -i -X POST \ -H "x-api-key: $token" \ -H "Content-Type: multipart/form-data" \ -F "file=@attachment.xbrl" \ https://acc-aanleverenapi.sbrnexus.nl/api/attachments |
| Response |
|
{ "guid": "--K3tyNmQ2mqEWZTWMMhiQ", "filename": "attachment.xbrl", "mimeType": "application/xml", "checksum": "14293581bf91d848a811708e7e120a9b87c389595e9752ded054fdc0c9b924e4", "version": 0, "sizeInBytes": 184831 } |
When submitting, reference to this attachment can be made using the GUID from the result.
Submitting the report
Submit Portal uses message types to indicate which type of report is sent to which receiving party. Message types represent different types of reports and are linked to allowed schema references (allowedEntryPoints) and receiving parties (allowedReceivers). This prevents accidentally submitting a report type to a receiving party that doesn't support it. Additionally, each message type has a maximum number of attachments that can be included in a submission (maximumNumberOfAttachments), and there are restrictions on the allowed types and quantities of attachments (allowedAttachments).
We retrieve the available message types using a GET request.
| Request |
| curl -i -H "x-api-key: $token" https://acc-aanleverenapi.sbrnexus.nl/api/message-types |
| Response |
|
[ { "guid": "fSXzCi52QrSWiwJv4DH7wg", "name": "Jaarrekening", "description": "Jaarrekening met OIN routering", "maximumNumberOfAttachments": 4, "allowedReceivers": [ { "receiver": { "guid": "AwvHWCDjQ3WmD7KCqRiZjA", "name": "Test Bank", "identityNumber": "00000000123456780000" }, "active": true }, (...) ], "allowedEntryPoints": [ { "entryPoint": { "guid": "XSCXnm5nShutabIKHbcaPQ", "uri": "https://www.sbrnexus.nl/ft15/frc/20201211/entrypoints/frc-rpt-nt-inrichtingsjaarrekening-2020.xsd", "name": "FT15 nt-inrichtingsjaarrekening-2020" }, "active": true }, (...) ], "allowedAttachments": [ { "dataType": "XBRL", "minimumNumberOfAttachments": 0, "maximumNumberOfAttachments": 4, "active": true }, (...) ], "active": true }, (...) ] |
The result contains many message types. This list will be updated at most once a day and can be cached for that period.
Now it is possible to send the message. We do this by creating a submission, called filing, with a POST request. Provide the submission reference using filing Reference.
| Request |
|
curl -i -X POST -H "x-api-key: $token" -H "Content-Type: application/json" -d '{ "report": { "guid": "AMX5LQjUSyGhlFdIe71f-g" }, "attachments": [ { "guid": "--K3tyNmQ2mqEWZTWMMhiQ" } ], "filingReference": "Test aanlevering", "messageTypeGuid": "fSXzCi52QrSWiwJv4DH7wg", "receiver": { "guid": "AwvHWCDjQ3WmD7KCqRiZjA" } }' https://acc-aanleverenapi.sbrnexus.nl/api/filings |
| Response |
|
{ "guid": "mMeaU7cJR5C0LM8E80ZVKA", "report": { "guid": "AMX5LQjUSyGhlFdIe71f-g", "filename": "valid.xbrl", "checksum": "14293581bf91d848a811708e7e120a9b87c389595e9752ded054fdc0c9b924e4", "cocNumber": "30267975", "cocOrganizationName": null, "entryPoint": { "guid": "XSCXnm5nShutabIKHbcaPQ", "uri": "https://www.sbrnexus.nl/ft15/frc/20201211/entrypoints/frc-rpt-nt-inrichtingsjaarrekening-2020.xsd", "name": "FT15 nt-inrichtingsjaarrekening-2020" }, "sizeInBytes": 184831, "version": 1 }, "attachments": [ { "guid": "--K3tyNmQ2mqEWZTWMMhiQ", "filename": "attachment.xbrl", "mimeType": "application/xml", "checksum": "14293581bf91d848a811708e7e120a9b87c389595e9752ded054fdc0c9b924e4", "version": 0, "sizeInBytes": 184831 } ], "filingReference": "Test aanlevering", "receiver": { "guid": "AwvHWCDjQ3WmD7KCqRiZjA", "name": "Test Bank", "identityNumber": "00000000123456780000" }, "messageTypeGuid": "fSXzCi52QrSWiwJv4DH7wg", "createdBy": { "guid": "UZtTj1cATj6paTFfh0y1OQ", "organization": { "guid": "hX2SxdOaQpuFgbfPe9CLtg", "name": "Financiële Rapportages Coöperatief B.A.", "cocNumber": "34375187", "receiverGuid": null }, "firstName": "Test", "familyName": "Gebruiker", "email": "test.gebruiker@example.com", "termsAndConditionsAccepted": true, "receiveUpdates": false, "version": 0 }, "sentAt": "2021-02-24T09:24:29.107428Z", "externalReference": "BTA-210224-0000003", "bivFiledAt": "2021-02-24T10:24:28.986+01:00", "statusCode": "100", "statusType": "PENDING", "errorCode": null, "errorDescription": null, "version": 0 } |
The field externalReference contains the submission reference, and statusType indicates whether the submission has been successfully processed. The fields errorCode and errorDescription are filled if we cannot process the submission successfully.
The initial status of the submission will be returned as PENDING. With the following call, you can retrieve the current status. The response will correspond to the previous response.
| curl -i -H "x-api-key: $token" https://acc-aanleverenapi.sbrnexus.nl/api/filings/mMeaU7cJR5C0LM8E80ZVKA |
Below you will find an example Postman collection (.json) containing the API calls supported by Submit Portal: