Integrations
The integrations API lets you connect client accounts to external services such as Altinn (government services), Norwegian banks, Peppol (e-invoicing), ID-Porten (identity verification), and Dialogporten (government dialog platform). Each integration can be enabled or disabled per client account.
Endpoints
Altinn
| Method | Endpoint | Description |
|---|---|---|
| GET | /integrations/altinn/status | Check Altinn connection status |
| POST | /integrations/altinn/authorize | Get authorization URL |
| GET | /integrations/altinn/reportees | List Altinn reportees |
| GET | /integrations/altinn/parties | Get authorized parties |
| GET | /integrations/altinn/system-users | List system users |
| POST | /integrations/altinn/system-users | Request a system user |
| GET | /integrations/altinn/system-users/{id} | Get system user status |
Banks
| Method | Endpoint | Description |
|---|---|---|
| GET | /integrations/banks | List supported banks |
| GET | /integrations/banks/{bic}/status | Get bank integration status |
| PATCH | /integrations/banks/{bic}/status | Enable or disable bank integration |
| GET | /integrations/banks/{bic}/pdf-forms/{form_type} | Download pre-filled bank form |
Peppol
| Method | Endpoint | Description |
|---|---|---|
| GET | /integrations/peppol/status | Get Peppol status |
| PATCH | /integrations/peppol/status | Enable or disable Peppol |
ID-Porten
| Method | Endpoint | Description |
|---|---|---|
| GET | /integrations/id-porten/status | Check ID-Porten connection status |
| POST | /integrations/id-porten/authorize | Get authorization URL |
Dialogporten
| Method | Endpoint | Description |
|---|---|---|
| GET | /integrations/dialogporten/dialogs | Search Dialogporten dialogs |
ZData (Aritma)
| Method | Endpoint | Description |
|---|---|---|
| GET | /integrations/aritma/status | Get ZData integration status |
Altinn
Altinn is Norway’s platform for government digital services. The Snapbooks integration uses ID-Porten for authentication and supports both Altinn 2 reportees and Altinn 3 system users.
Check Altinn Status
GET /api/v2/integrations/altinn/status
Returns whether the user has an active Altinn connection via ID-Porten.
Response
{
"connected": true,
"end_session_url": "https://login.idporten.no/logout?..."
}
The end_session_url is null when not connected.
Authorize with Altinn
POST /api/v2/integrations/altinn/authorize
Returns an ID-Porten authorization URL. Redirect the user to this URL to initiate the login flow.
Response
{
"authorization_url": "https://login.idporten.no/authorize?..."
}
List Reportees
GET /api/v2/integrations/altinn/reportees
Lists the organizations and persons the authenticated user can act on behalf of in Altinn 2. Requires an active Altinn connection.
Response
Returns the Altinn HAL+JSON response with the list of reportees.
Error Responses
| Status | Description |
|---|---|
| 403 | No valid Altinn access token |
Get Authorized Parties
GET /api/v2/integrations/altinn/parties
Returns the organizations and persons the user can represent via the Altinn 3 AccessManagement API. Requires an active Altinn connection.
Response
Returns the Altinn 3 authorized parties response.
Error Responses
| Status | Description |
|---|---|
| 403 | No valid Altinn access token |
| 500 | Error fetching parties from Altinn |
List System Users
GET /api/v2/integrations/altinn/system-users
Returns a paginated list of Altinn system user requests.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| client_account_id | integer | No | Filter by client account. When provided, syncs status with Altinn |
| page | integer | No | Page number (default: 1) |
| per_page | integer | No | Items per page (default: 100) |
Response
{
"items": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"external_ref": "ref-123",
"system_id": "snapbooks-prod",
"org_number": "123456789",
"client_account_id": 7,
"status": "Active",
"confirm_url": "https://altinn.no/...",
"redirect_url": "https://api.snapbooks.no/...",
"rights": [],
"created_at": "2026-03-15T10:00:00Z",
"updated_at": "2026-03-15T10:05:00Z"
}
],
"page": 1,
"per_page": 100,
"total": 1
}
System User Status Values
| Value | Description |
|---|---|
New |
Request created, awaiting user action |
Pending |
User has initiated confirmation |
Active |
System user is approved and active |
Request a System User
POST /api/v2/integrations/altinn/system-users
Creates a system user request for a client account’s organization in Altinn.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| client_account_id | integer | Yes | The client account ID |
Response
Returns the created system user object (same shape as list items).
Error Responses
| Status | Description |
|---|---|
| 400 | Missing client_account_id, client account has no organization, or request failed |
| 403 | No access to the client account |
| 404 | Client account not found |
Get System User Status
GET /api/v2/integrations/altinn/system-users/{id}
Returns the current status of a system user request. Syncs the status from Altinn on each call.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
| id | string | System user UUID |
Response
Returns a single system user object.
Error Responses
| Status | Description |
|---|---|
| 400 | Failed to get status from Altinn |
| 403 | No access to this system user |
| 404 | System user not found |
Banks
Connect to Norwegian banks for automatic transaction imports. Supported providers include TietoEvry (preferred) and ZData.
List Supported Banks
GET /api/v2/integrations/banks
Returns all banks supported by Snapbooks across all providers.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| client_account_id | integer | No | If provided, includes integration status and filters to banks the client uses |
Response
[
{
"bic": "SPAVNOBB",
"organization": {
"id": 101,
"name": "Sparebanken Vest",
"logo": "https://...",
"website": "https://spv.no",
"country": "NO"
},
"status": {
"is_active": true,
"is_connected": true,
"integration_config": {}
}
}
]
The status field is only included when client_account_id is provided.
Get Bank Integration Status
GET /api/v2/integrations/banks/{bic}/status
Returns the integration status for a specific bank.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
| bic | string | BIC/SWIFT code (e.g. SPAVNOBB) |
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| client_account_id | integer | Yes | The client account ID |
Response
{
"is_active": true,
"is_connected": true,
"integration_config": {},
"onboarding_information": {}
}
Error Responses
| Status | Description |
|---|---|
| 400 | Missing client_account_id or invalid BIC |
| 403 | No access to the client account |
| 404 | Bank not supported by any provider |
Enable or Disable Bank Integration
PATCH /api/v2/integrations/banks/{bic}/status
Enables or disables the bank integration for a client account.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
| bic | string | BIC/SWIFT code |
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| client_account_id | integer | Yes | The client account ID |
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| is_active | boolean | Yes | Whether to enable or disable the integration |
| integration_config | object | No | Provider-specific configuration |
For DNB (DNBANOKK), the integration_config must include:
| Field | Type | Required | Description |
|---|---|---|---|
| division_number | string | Yes | DNB division number |
| division_name | string | Yes | DNB division name |
Example Request
{
"is_active": true,
"integration_config": {
"division_number": "001",
"division_name": "Hovedavdeling"
}
}
Response
{
"is_active": true,
"is_connected": true,
"integration_config": {
"division_number": "001",
"division_name": "Hovedavdeling"
}
}
Side Effects
- Enabling: Adds the
BANK_INTEGRATIONbilling add-on if not already present. Requires an active bank account with the matching BIC. - Disabling: Removes the
BANK_INTEGRATIONbilling add-on if no other banks are active.
Error Responses
| Status | Description |
|---|---|
| 400 | Missing required fields, invalid config, or no active bank account with this BIC |
| 403 | No access to the client account |
| 404 | Bank not supported |
Download Bank Integration Form
GET /api/v2/integrations/banks/{bic}/pdf-forms/{form_type}
Downloads a pre-filled PDF form for bank integration agreements.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
| bic | string | BIC/SWIFT code |
| form_type | string | Form type. Currently only integration-agreement |
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| client_account_id | integer | Yes | The client account ID |
Response
Returns a PDF file download.
Error Responses
| Status | Description |
|---|---|
| 400 | Missing parameters or unknown form type |
| 403 | No access to the client account |
| 404 | Client account, contact user, or bank accounts not found |
Peppol
Peppol is the pan-European e-invoicing network. Snapbooks supports sending and receiving invoices via Peppol.
Get Peppol Status
GET /api/v2/integrations/peppol/status
Returns the Peppol integration status. If no client_account_id is provided, returns status for all eligible client accounts.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| client_account_id | integer | No | The client account ID. If omitted, returns status for all accounts |
Response (Single Client)
{
"is_active": true,
"connected": true
}
Response (All Clients)
{
"statuses": [
{
"client_account_id": 7,
"is_active": true,
"connected": true
},
{
"client_account_id": 23,
"is_active": false,
"connected": false
}
]
}
Enable or Disable Peppol
PATCH /api/v2/integrations/peppol/status
Enables or disables Peppol e-invoicing for a client account.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| client_account_id | integer | Yes | The client account ID |
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| is_active | boolean | Yes | Whether to enable or disable Peppol |
Example Request
{
"is_active": true
}
Response
{
"is_active": true,
"connected": true
}
Error Responses
| Status | Description |
|---|---|
| 400 | Missing client_account_id or is_active |
| 403 | No access to the client account |
| 500 | Server error |
ID-Porten
ID-Porten is Norway’s national login service. The Snapbooks integration is used to authenticate users with Altinn and other government services.
Check ID-Porten Status
GET /api/v2/integrations/id-porten/status
Returns whether the user has an active ID-Porten session.
Response
{
"connected": true,
"end_session_url": "https://login.idporten.no/logout?..."
}
The end_session_url is null when not connected.
Authorize with ID-Porten
POST /api/v2/integrations/id-porten/authorize
Returns an ID-Porten authorization URL for the OAuth2 flow. Redirect the user to this URL to start the authentication.
Response
{
"authorization_url": "https://login.idporten.no/authorize?..."
}
ZData (Aritma)
ZData provides bank integration services for some Norwegian banks. TietoEvry is the preferred provider for new integrations.
Get ZData Status
GET /api/v2/integrations/aritma/status
Returns the ZData integration status for a client account or specific bank account.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| client_account_id | integer | No | The client account ID |
| bank_account_id | integer | No | A specific bank account ID. If provided, client_account_id is derived from it |
At least one of client_account_id or bank_account_id must be provided.
Response
{
"is_active": true,
"is_connected": true,
"onboarding_information": {}
}
Error Responses
| Status | Description |
|---|---|
| 400 | Neither client_account_id nor bank_account_id provided |
| 403 | No access to the client account |
| 404 | Bank account not found |
| 500 | Service error |
Dialogporten
Dialogporten is Altinn’s dialog platform for structured communication between government agencies and organizations. The Snapbooks integration lets you search dialogs for a client account’s organization in real time.
Search Dialogs
GET /api/v2/integrations/dialogporten/dialogs
Searches Dialogporten dialogs for the organization linked to a client account. Results are fetched live from the Dialogporten API and are not cached locally. Requires that the client account has an active Altinn system user.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| client_account_id | integer | Yes | The client account ID |
| status | string | No | Filter by dialog status (e.g. InProgress, Completed) |
| service_resource | string | No | Filter by service resource identifier |
Response
{
"items": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "InProgress",
"extendedStatus": null,
"serviceResource": "urn:altinn:resource:skd-amelding-tilbakemelding",
"party": "urn:altinn:organization:identifier-no:123456789",
"org": "skd",
"createdAt": "2026-03-01T10:00:00Z",
"updatedAt": "2026-03-15T14:30:00Z"
}
]
}
When the search cannot be performed (e.g. missing system user or organization number), the endpoint returns 200 with an empty list and an error field:
{
"items": [],
"error": "No organization number"
}
Error Responses
| Status | Description |
|---|---|
| 400 | Client account not found |
| 403 | No access to the client account |
Related Resources
- Client Accounts — the accounts integrations are configured for
- Bank Accounts — bank accounts used with bank integrations
- Authentication — OAuth2 authentication used by some integrations