Download OpenAPI specification:Download
Welcome to the Tidely Partner API v2. This API enables white-label partners to integrate with Tidely's financial planning and cash flow management platform on behalf of their customers.
The Partner API uses OAuth 2.0 for authentication. Two flows are supported:
Contact partnerships@tidely.com to obtain your client credentials.
All Partner API requests require the X-Account-Id header to specify which customer account
the request applies to. This allows partners to operate on behalf of multiple customers using
a single set of credentials.
For technical support, integration questions, or to report issues:
Endpoints supporting the Embedded Integration: Obtain short-lived init tokens that
log a Tidely user into the embedded Tidely frontend without showing them a login
screen. See the Embedded Integration guide for the
full flow, including the postMessage protocol between the parent page and the
iframe.
Obtains a short-lived, single-use init token that the partner's frontend hands to
the embedded Tidely iframe via postMessage. The Tidely frontend then exchanges
the init token on Tidely's backend for a regular access + refresh token pair,
logging the user in.
The init token is bound to the Tidely user identified by userId and to the
account given via the X-Account-Id header. It expires after 30–60 seconds and
cannot be reused once it has been exchanged.
See the Partner SSO guide for the full end-to-end flow.
POST /users.Errors carry a stable, machine-readable code in the error field of the
ExceptionDetails body so partners can react programmatically; message is a
human-readable description (do not match on it):
| HTTP | error |
Meaning |
|---|---|---|
| 400 | INVALID_REQUEST |
Body malformed or userId missing/non-numeric. |
| 400 | MISSING_ACCOUNT_HEADER |
X-Account-Id header is missing. |
| 401 | INVALID_CREDENTIALS |
Partner access token missing, expired, or invalid. |
| 403 | SSO_NOT_ENABLED |
The partner does not have the embedded SSO feature enabled. |
| 404 | USER_NOT_FOUND |
The userId does not exist, or the account/user is not accessible to the partner. |
| 409 | USER_INACTIVE |
The user exists but is disabled, deleted, or otherwise blocked from login. |
| 500 | INTERNAL_ERROR |
Unexpected server error. |
| X-Account-Id required | integer <int64> Example: 12345 The unique identifier of the customer account to operate on. Required for all partner API requests. |
| userId required | integer <int64> ID of the Tidely user to log in. |
{- "userId": 67890
}{- "initToken": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI2Nzg5MCIsImFjY291bnRJZCI6MTIzNDUsImlzcyI6Imh0dHBzOi8vYXV0aC50aWRlbHkuY29tIiwiYXVkIjoidGlkZWx5LWZyb250ZW5kIiwiaWF0IjoxNzMwOTk5OTk5LCJleHAiOjE3MzEwMDAwNTksImp0aSI6IjAxOTI4ZTUwLTAwMDAtNzAwMC04MDAwLWFiY2RlZjAxMjM0NSJ9.signature",
- "expiresIn": 60,
- "expiresAt": "2026-05-08T12:34:56Z"
}Manage customer accounts accessible by the partner. Accounts represent the end customers that the partner serves.
Creates a new account with a default company and an initial admin user.
| HTTP | error |
Meaning |
|---|---|---|
| 400 | INVALID_REQUEST |
Request body is malformed or fails validation. |
| 401 | INVALID_CREDENTIALS |
Partner access token missing, expired, or invalid. |
| 403 | INSUFFICIENT_SCOPE |
Access token lacks the required account/write scope. |
| 409 | ACCOUNT_EXTERNAL_ID_ALREADY_EXISTS |
An account with the given externalId already exists for this partner. |
| 409 | USER_EMAIL_ALREADY_EXISTS |
The initial user's email address is already in use. |
| 500 | INTERNAL_ERROR |
Unexpected server error. |
| externalId required | string External identifier specified by the partner |
| companyName required | string Name of the main company to be created for this account |
required | object (InitialUserCreateRequest) Initial admin user created alongside a new account. Account/company are created implicitly and the role is ADMIN. |
{- "externalId": "partner-newclient-003",
- "companyName": "New Client GmbH",
- "user": {
- "externalId": "user-john-001",
- "email": "john.doe@newclient.com",
- "firstName": "John",
- "lastName": "Doe"
}
}{- "success": true,
- "message": "Account created successfully",
- "account": {
- "id": 12347,
- "externalId": "partner-newclient-003",
- "createdAt": "2024-04-10T08:52:00Z",
- "updatedAt": "2024-04-10T08:52:00Z",
- "status": "IN_TRIAL",
- "plan": "PROFESSIONAL"
}, - "user": {
- "id": 56789,
- "accountId": 12347,
- "companyId": 12348,
- "role": "ADMIN",
- "externalId": "user-john-001",
- "email": "john.doe@newclient.com",
- "firstName": "John",
- "lastName": "Doe",
- "createdAt": "2024-04-10T08:52:00Z",
- "status": "ACTIVE"
}, - "company": {
- "id": 12348,
- "accountId": 12345,
- "name": "New Client Inc.",
- "createdAt": "2024-04-10T08:52:00Z",
- "updatedAt": "2024-04-10T08:52:00Z"
}
}Get all accounts accessible by the partner.
| HTTP | error |
Meaning |
|---|---|---|
| 400 | INVALID_REQUEST |
A query parameter is invalid. |
| 401 | INVALID_CREDENTIALS |
Partner access token missing, expired, or invalid. |
| 403 | INSUFFICIENT_SCOPE |
Access token lacks the required account/read scope. |
| 500 | INTERNAL_ERROR |
Unexpected server error. |
| page | integer >= 0 Default: 0 Page number (0-based) |
| pageSize | integer [ 1 .. 1000 ] Default: 50 Number of accounts per page |
| status | string Enum: "ACTIVE" "IN_TRIAL" "CANCELLED" "NON_RENEWING" Filter accounts by status |
{- "success": true,
- "message": "Accounts retrieved successfully",
- "number": 0,
- "size": 20,
- "totalElements": 125,
- "totalPages": 8,
- "data": [
- {
- "id": 12345,
- "externalId": "partner-acme-001",
- "createdAt": "2024-01-15T10:30:00Z",
- "updatedAt": "2024-03-20T15:22:00Z",
- "status": "ACTIVE",
- "plan": "PROFESSIONAL"
}, - {
- "id": 12346,
- "externalId": "partner-tech-002",
- "createdAt": "2024-02-20T14:45:00Z",
- "updatedAt": "2024-02-20T14:45:00Z",
- "status": "IN_TRIAL",
- "plan": "trial"
}
]
}Get account by id. Requires the X-Account-Id header.
| HTTP | error |
Meaning |
|---|---|---|
| 400 | MISSING_ACCOUNT_HEADER |
X-Account-Id header is missing. |
| 401 | INVALID_CREDENTIALS |
Partner access token missing, expired, or invalid. |
| 403 | INSUFFICIENT_SCOPE |
Access token lacks the required account/read scope. |
| 404 | ACCOUNT_NOT_FOUND |
No account exists with the given id, or it is not accessible to the partner. |
| 500 | INTERNAL_ERROR |
Unexpected server error. |
| id required | integer <int64> The ID of the account |
{- "success": true,
- "message": "Account retrieved successfully",
- "data": {
- "id": 12345,
- "externalId": "partner-acme-001",
- "createdAt": "2024-01-15T10:30:00Z",
- "updatedAt": "2024-03-20T15:22:00Z",
- "status": "ACTIVE",
- "plan": "PROFESSIONAL"
}
}Partially updates an account. Only the company name is currently partner-mutable.
Requires the X-Account-Id header.
| HTTP | error |
Meaning |
|---|---|---|
| 400 | INVALID_REQUEST |
Request body is malformed or fails validation. |
| 400 | MISSING_ACCOUNT_HEADER |
X-Account-Id header is missing. |
| 401 | INVALID_CREDENTIALS |
Partner access token missing, expired, or invalid. |
| 403 | INSUFFICIENT_SCOPE |
Access token lacks the required account/write scope. |
| 404 | ACCOUNT_NOT_FOUND |
No account exists with the given id, or it is not accessible to the partner. |
| 500 | INTERNAL_ERROR |
Unexpected server error. |
| id required | integer <int64> The ID of the account |
| companyName | string New name for the account's main company |
{- "companyName": "string"
}{- "success": true,
- "message": "Account updated successfully",
- "data": {
- "id": 12345,
- "externalId": "partner-acme-001",
- "createdAt": "2024-01-15T10:30:00Z",
- "updatedAt": "2024-04-10T12:00:00Z",
- "status": "ACTIVE",
- "plan": "PROFESSIONAL"
}
}Deletes account by id. Requires the X-Account-Id header.
| HTTP | error |
Meaning |
|---|---|---|
| 400 | MISSING_ACCOUNT_HEADER |
X-Account-Id header is missing. |
| 401 | INVALID_CREDENTIALS |
Partner access token missing, expired, or invalid. |
| 403 | INSUFFICIENT_SCOPE |
Access token lacks the required account/write scope. |
| 404 | ACCOUNT_NOT_FOUND |
No account exists with the given id, or it is not accessible to the partner. |
| 500 | INTERNAL_ERROR |
Unexpected server error. |
| id required | integer <int64> The ID of the account |
{- "success": true,
- "message": "Account deleted successfully",
- "id": 12345
}Get companies
| page | integer >= 0 Default: 0 Page number (0-based) |
| pageSize | integer [ 1 .. 1000 ] Default: 50 Number of balances per page |
{- "success": true,
- "message": "Companies retrieved successfully",
- "number": 0,
- "size": 20,
- "totalElements": 125,
- "totalPages": 8,
- "data": [
- {
- "id": 1,
- "parentId": 3,
- "name": "Test GmbH",
- "currency": "EUR",
- "country": "Germany",
- "industry": "ECOMMERCE"
}, - {
- "id": 2,
- "parentId": 4,
- "name": "Test2 GmbH",
- "currency": "EUR",
- "country": "Germany",
- "industry": "PUBLIC_SECTOR"
}
]
}Get company by id
| id required | integer <int64> The ID of the company |
{- "success": true,
- "message": "string",
- "data": {
- "id": 0,
- "parentId": 0,
- "name": "string",
- "currency": "EUR",
- "country": "string",
- "industry": "ECOMMERCE"
}
}Creates a user in the specified account and company with the given role.
Requires the X-Account-Id header.
| HTTP | error |
Meaning |
|---|---|---|
| 400 | INVALID_REQUEST |
Request body is malformed or fails validation. |
| 400 | MISSING_ACCOUNT_HEADER |
X-Account-Id header is missing. |
| 400 | MAX_USERS_REACHED |
The account has reached the user limit for its current plan. |
| 401 | INVALID_CREDENTIALS |
Partner access token missing, expired, or invalid. |
| 403 | INSUFFICIENT_SCOPE |
Access token lacks the required user/write scope. |
| 404 | ACCOUNT_NOT_FOUND |
No account exists for the X-Account-Id header. |
| 404 | COMPANY_NOT_FOUND |
No company with the given companyId exists in the account. |
| 409 | USER_EXTERNAL_ID_ALREADY_EXISTS |
A user with the given externalId already exists in the account. |
| 409 | USER_EMAIL_ALREADY_EXISTS |
A user with the given email address already exists. |
| 500 | INTERNAL_ERROR |
Unexpected server error. |
| X-Account-Id required | integer <int64> Example: 12345 The unique identifier of the customer account to operate on. Required for all partner API requests. |
| companyId required | integer <int64> ID of the company within the account the user is placed in |
| role required | string (UserRole) Enum: "ADMIN" "USER" "CONTRIBUTOR" "INVESTOR" Role granted to the user within the account/company |
| externalId required | string External identifier for the user specified by the partner |
| email required | string <email> Email address of the user |
| firstName required | string First name of the user |
| lastName required | string Last name of the user |
| language | string (UserLanguage) Enum: "en-US" "de-DE" Preferred UI language of the user. |
{- "companyId": 67890,
- "role": "USER",
- "externalId": "user-jane-002",
- "email": "jane.smith@newclient.com",
- "firstName": "Jane",
- "lastName": "Smith"
}{- "success": true,
- "message": "User created successfully",
- "data": {
- "id": 56790,
- "accountId": 12345,
- "companyId": 67890,
- "role": "USER",
- "externalId": "user-jane-002",
- "email": "jane.smith@newclient.com",
- "firstName": "Jane",
- "lastName": "Smith",
- "createdAt": "2024-04-10T09:15:00Z",
- "status": "ACTIVE"
}
}Lists users belonging to the specified account. Requires the X-Account-Id header.
| HTTP | error |
Meaning |
|---|---|---|
| 400 | INVALID_REQUEST |
A query parameter is invalid. |
| 400 | MISSING_ACCOUNT_HEADER |
X-Account-Id header is missing. |
| 401 | INVALID_CREDENTIALS |
Partner access token missing, expired, or invalid. |
| 403 | INSUFFICIENT_SCOPE |
Access token lacks the required user/read scope. |
| 404 | ACCOUNT_NOT_FOUND |
No account exists for the X-Account-Id header, or it is not accessible to the partner. |
| 500 | INTERNAL_ERROR |
Unexpected server error. |
| page | integer >= 0 Default: 0 Page number (0-based) |
| pageSize | integer [ 1 .. 1000 ] Default: 50 Number of users per page |
| X-Account-Id required | integer <int64> Example: 12345 The unique identifier of the customer account to operate on. Required for all partner API requests. |
{- "success": true,
- "message": "Users retrieved successfully",
- "number": 0,
- "size": 50,
- "totalElements": 2,
- "totalPages": 1,
- "data": [
- {
- "id": 56789,
- "accountId": 12345,
- "companyId": 67890,
- "role": "ADMIN",
- "externalId": "user-john-001",
- "email": "john.doe@newclient.com",
- "firstName": "John",
- "lastName": "Doe",
- "createdAt": "2024-04-10T08:52:00Z",
- "status": "ACTIVE"
}, - {
- "id": 56790,
- "accountId": 12345,
- "companyId": 67890,
- "role": "USER",
- "externalId": "user-jane-002",
- "email": "jane.smith@newclient.com",
- "firstName": "Jane",
- "lastName": "Smith",
- "createdAt": "2024-04-10T09:15:00Z",
- "status": "ACTIVE"
}
]
}Retrieve a specific user by id. Requires the X-Account-Id header.
| HTTP | error |
Meaning |
|---|---|---|
| 400 | MISSING_ACCOUNT_HEADER |
X-Account-Id header is missing. |
| 401 | INVALID_CREDENTIALS |
Partner access token missing, expired, or invalid. |
| 403 | INSUFFICIENT_SCOPE |
Access token lacks the required user/read scope. |
| 404 | ACCOUNT_NOT_FOUND |
The account does not exist or is not accessible to the partner. |
| 404 | USER_NOT_FOUND |
No user exists with the given id in this account. |
| 500 | INTERNAL_ERROR |
Unexpected server error. |
| userId required | integer <int64> The ID of the user |
| X-Account-Id required | integer <int64> Example: 12345 The unique identifier of the customer account to operate on. Required for all partner API requests. |
{- "success": true,
- "message": "User retrieved successfully",
- "data": {
- "id": 56789,
- "accountId": 12345,
- "companyId": 67890,
- "role": "ADMIN",
- "externalId": "user-john-001",
- "email": "john.doe@newclient.com",
- "firstName": "John",
- "lastName": "Doe",
- "createdAt": "2024-04-10T08:52:00Z",
- "status": "ACTIVE"
}
}Partially updates a user. Only firstName and lastName are currently partner-mutable.
Requires the X-Account-Id header.
| HTTP | error |
Meaning |
|---|---|---|
| 400 | INVALID_REQUEST |
Request body is malformed or fails validation. |
| 400 | MISSING_ACCOUNT_HEADER |
X-Account-Id header is missing. |
| 401 | INVALID_CREDENTIALS |
Partner access token missing, expired, or invalid. |
| 403 | INSUFFICIENT_SCOPE |
Access token lacks the required user/write scope. |
| 404 | ACCOUNT_NOT_FOUND |
The account does not exist or is not accessible to the partner. |
| 404 | USER_NOT_FOUND |
No user exists with the given id in this account. |
| 500 | INTERNAL_ERROR |
Unexpected server error. |
| userId required | integer <int64> The ID of the user |
| X-Account-Id required | integer <int64> Example: 12345 The unique identifier of the customer account to operate on. Required for all partner API requests. |
| firstName | string First name of the user |
| lastName | string Last name of the user |
{- "firstName": "string",
- "lastName": "string"
}{- "success": true,
- "message": "User updated successfully",
- "data": {
- "id": 56789,
- "accountId": 12345,
- "companyId": 67890,
- "role": "ADMIN",
- "externalId": "user-john-001",
- "email": "john.doe@newclient.com",
- "firstName": "Jonathan",
- "lastName": "Doe",
- "createdAt": "2024-04-10T08:52:00Z",
- "status": "ACTIVE"
}
}Deletes a user. Requires the X-Account-Id header.
| HTTP | error |
Meaning |
|---|---|---|
| 400 | MISSING_ACCOUNT_HEADER |
X-Account-Id header is missing. |
| 401 | INVALID_CREDENTIALS |
Partner access token missing, expired, or invalid. |
| 403 | INSUFFICIENT_SCOPE |
Access token lacks the required user/write scope. |
| 404 | ACCOUNT_NOT_FOUND |
The account does not exist or is not accessible to the partner. |
| 404 | USER_NOT_FOUND |
No user exists with the given id in this account. |
| 409 | USER_CANNOT_BE_DELETED |
The user is the only remaining user in the account. |
| 409 | LAST_ADMIN_CANNOT_BE_DELETED |
The user is the only remaining admin in the account. |
| 500 | INTERNAL_ERROR |
Unexpected server error. |
| userId required | integer <int64> The ID of the user |
| X-Account-Id required | integer <int64> Example: 12345 The unique identifier of the customer account to operate on. Required for all partner API requests. |
{- "success": true,
- "message": "User deleted successfully",
- "id": 56789
}Retrieve financial categories for organizing transactions and plans. Categories are hierarchical and classified by type (income/expense, operational/investment/financing).
Creates a new financial category, type is ignored if parentId is specified
| name required | string Name of the category |
| type required | string (CategoryType) Enum: "INCOME_OPERATIONAL" "INCOME_INVESTMENT" "INCOME_FINANCING" "EXPENSE_OPERATIONAL" "EXPENSE_INVESTMENT" "EXPENSE_FINANCING" Type of category indicating income or expense classification |
| parentId | integer or null <int64> ID of the parent category for hierarchical categorization |
{- "name": "E-Commerce Revenue",
- "type": "INCOME_OPERATIONAL",
- "parentId": 100
}{- "id": 123,
- "name": "E-Commerce Revenue",
- "type": "INCOME_OPERATIONAL",
- "parentId": 100,
- "enabledForPlannedTransactions": true
}Retrieves a single category by ID
| id required | integer <int64> The ID of the category |
{- "id": 123,
- "name": "E-Commerce Revenue",
- "type": "INCOME_OPERATIONAL",
- "parentId": 100,
- "enabledForPlannedTransactions": true
}Updates an existing category
| id required | integer <int64> The ID of the category |
| name | string Name of the category |
| type | string (CategoryType) Enum: "INCOME_OPERATIONAL" "INCOME_INVESTMENT" "INCOME_FINANCING" "EXPENSE_OPERATIONAL" "EXPENSE_INVESTMENT" "EXPENSE_FINANCING" Type of category indicating income or expense classification |
{- "name": "E-Commerce Revenue Updated",
- "type": "INCOME_OPERATIONAL"
}{- "id": 123,
- "name": "E-Commerce Revenue Updated",
- "type": "INCOME_OPERATIONAL",
- "parentId": 100,
- "enabledForPlannedTransactions": true
}Create, update, and delete financial plans for cash flow forecasting. Plans can be created for different periods (daily, weekly, monthly) and scenarios. Supports both single and bulk plan creation.
Creates a new financial plan for a specific category and scenario
| categoryId | integer <int64> Unique identifier of the category. If neither categoryId nor categoryName is specified, plan will go to uncategorized expenses for negative amounts and uncategorized income for positive amounts. |
| categoryName | string Category path as a string (e.g., 'Einzahlungen aus Geschäftstätigkeit->E-COMMERCE->Plattform 1'). Used if categoryId is not provided. |
| amount required | number [ -10000000000000000 .. 10000000000000000 ] Amount of the plan (negative for expenses, positive for income) |
| period required | string Enum: "DAILY" "WEEKLY" "MONTHLY" Period for which the plan value applies |
| date required | string <date> The date of the plan in ISO 8601 format (yyyy-MM-dd). For MONTHLY period, use the first day of the month. For WEEKLY period, use the first day of the week. |
| type required | string Value: "ONE_TIME" Type of the plan |
| name required | string [ 1 .. 100 ] characters Name of the plan |
| scenarioId | integer <int64> Identifier of the scenario. If not specified, the plan will be created for the Base scenario. |
| scenarioName | string Name of the scenario. Used if scenarioId is not provided. If neither is specified, the Base scenario is used. |
| replaceCurrentValuesForThePeriod | boolean Default: false If true, replaces existing values for the period. If false, adds to existing values. |
{- "categoryId": 123,
- "amount": 5000,
- "period": "MONTHLY",
- "date": "2024-10-01",
- "type": "ONE_TIME",
- "name": "October Revenue Plan",
- "scenarioId": 1,
- "replaceCurrentValuesForThePeriod": false
}{- "success": true,
- "message": "string",
- "planId": 0
}Deletes all plans for a specific category and scenario combination
| categoryId required | integer <int64> Example: categoryId=123 The ID of the category |
| scenarioId required | integer <int64> Example: scenarioId=1 The ID of the scenario |
{- "success": true,
- "message": "string",
- "deletedCount": 0
}Creates multiple financial plans in a single request
| categoryId | integer <int64> Unique identifier of the category. If neither categoryId nor categoryName is specified, plan will go to uncategorized expenses for negative amounts and uncategorized income for positive amounts. |
| categoryName | string Category path as a string (e.g., 'Einzahlungen aus Geschäftstätigkeit->E-COMMERCE->Plattform 1'). Used if categoryId is not provided. |
| amount required | number [ -10000000000000000 .. 10000000000000000 ] Amount of the plan (negative for expenses, positive for income) |
| period required | string Enum: "DAILY" "WEEKLY" "MONTHLY" Period for which the plan value applies |
| date required | string <date> The date of the plan in ISO 8601 format (yyyy-MM-dd). For MONTHLY period, use the first day of the month. For WEEKLY period, use the first day of the week. |
| type required | string Value: "ONE_TIME" Type of the plan |
| name required | string [ 1 .. 100 ] characters Name of the plan |
| scenarioId | integer <int64> Identifier of the scenario. If not specified, the plan will be created for the Base scenario. |
| scenarioName | string Name of the scenario. Used if scenarioId is not provided. If neither is specified, the Base scenario is used. |
| replaceCurrentValuesForThePeriod | boolean Default: false If true, replaces existing values for the period. If false, adds to existing values. |
[- {
- "categoryId": 123,
- "amount": 5000,
- "period": "MONTHLY",
- "date": "2024-10-01",
- "type": "ONE_TIME",
- "name": "October Revenue Plan"
}, - {
- "categoryId": 124,
- "amount": -2000,
- "period": "MONTHLY",
- "date": "2024-10-01",
- "type": "ONE_TIME",
- "name": "October Expense Plan"
}
]{- "success": true,
- "message": "string",
- "createdCount": 0,
- "planIds": [
- 0
]
}Import invoices from external systems into Tidely. Supports sales invoices, purchase invoices, and credit notes. Automatically categorizes and integrates with cash flow planning.
Get all invoices
| invoiceTypeFilter required | string (InvoiceTypeFilter) Enum: "SALE" "PURCHASE" Type of invoices to retrieve |
| externalId | Array of strings <= 100 items [ items <= 255 characters ] Filter invoices by external identifier. Repeat the parameter to filter by multiple external IDs (e.g. |
| page | integer >= 0 Default: 0 Page number (0-based) |
| pageSize | integer [ 1 .. 1000 ] Default: 50 Number of invoices per page |
{- "success": true,
- "message": "Invoices retrieved successfully",
- "number": 0,
- "size": 50,
- "totalElements": 2,
- "totalPages": 1,
- "data": [
- {
- "id": 1,
- "externalId": "INV-2024-001",
- "invoiceDate": "2024-10-15",
- "dueDate": "2024-11-15",
- "invoiceNumber": "2024-001",
- "contactName": "ACME Corp",
- "invoiceType": "SALES_INVOICE",
- "totalGrossAmount": 11900,
- "openAmount": 11900,
- "invoiceStatus": "OPEN",
- "note": "sale invoice",
- "categoryId": 1
}, - {
- "id": 2,
- "externalId": "INV-2024-002",
- "invoiceDate": "2024-10-20",
- "dueDate": "2024-11-20",
- "invoiceNumber": "2024-002",
- "contactName": "Beta GmbH",
- "invoiceType": "SALES_INVOICE",
- "totalGrossAmount": 5950,
- "openAmount": 5950,
- "invoiceStatus": "OPEN",
- "note": "invoice",
- "categoryId": 1
}
]
}Creates a new invoice
| invoiceDate | string <date> Invoice date in ISO 8601 format |
| dueDate | string <date> Due date of the invoice in ISO 8601 format |
| paidDate | string or null <date> Invoice payment date and time in ISO 8601 format |
| invoiceNumber required | string non-empty Invoice number |
| contactName required | string non-empty Recipient name of the invoice |
| totalGrossAmount required | number [ -10000000000000000 .. 10000000000000000 ] Total gross amount including tax |
| invoiceStatus | string Enum: "DRAFT" "OPEN" "PAID" "PARTIALLY_PAID" "CANCELED" "WITHHELD" "OFFER" "ORDER" "PLANNED" "RELEASED" Status of the invoice |
| openAmount | number or null [ -10000000000000000 .. 10000000000000000 ] Open (unpaid) amount of the invoice |
| note | string or null Description or notes for the invoice |
| categoryId | integer or null <int64> Unique identifier of the category |
| externalId | string External identifier of the invoice, used for integration with external systems |
| invoiceType required | string (InvoiceTypeEnum) Enum: "SALES_INVOICE" "SALES_CREDIT_NOTE" "PURCHASE_INVOICE" "PURCHASE_CREDIT_NOTE" Type of invoice |
{- "externalId": "INV-2024-001",
- "invoiceDate": "2024-10-15",
- "dueDate": "2024-11-15",
- "invoiceNumber": "2024-001",
- "contactName": "ACME Corp",
- "invoiceType": "SALES_INVOICE",
- "totalGrossAmount": 11900,
- "openAmount": 11900,
- "invoiceStatus": "OPEN"
}{- "success": true,
- "message": "string",
- "data": {
- "invoiceDate": "2019-08-24",
- "dueDate": "2019-08-24",
- "paidDate": "2019-08-24",
- "invoiceNumber": "string",
- "contactName": "string",
- "totalGrossAmount": -10000000000000000,
- "invoiceStatus": "DRAFT",
- "openAmount": -10000000000000000,
- "note": "string",
- "categoryId": 0,
- "externalId": "string",
- "invoiceType": "SALES_INVOICE",
- "id": 0
}
}Creates multiple invoices in a single request. A maximum of 1000 invoices per request is allowed. Requests exceeding this limit will be rejected with a 400 Bad Request response.
required | Array of objects (InvoiceCreateRequest) [ 1 .. 1000 ] items | ||||||||||||||||||||||||
Array ([ 1 .. 1000 ] items)
| |||||||||||||||||||||||||
{- "invoices": [
- {
- "invoiceNumber": "2024-001",
- "externalId": "1",
- "invoiceDate": "2024-10-15",
- "dueDate": "2024-11-15",
- "contactName": "ACME Corp",
- "invoiceType": "SALES_INVOICE",
- "totalGrossAmount": 11900,
- "openAmount": 11900,
- "invoiceStatus": "OPEN",
- "note": "simple note",
- "categoryId": null
}, - {
- "invoiceNumber": "2024-002",
- "externalId": "1",
- "invoiceDate": "2024-10-20",
- "dueDate": "2024-11-20",
- "contactName": "Beta GmbH",
- "invoiceType": "PURCHASE_INVOICE",
- "totalGrossAmount": 5950,
- "openAmount": 5950,
- "invoiceStatus": "OPEN",
- "note": "simple note",
- "categoryId": 1
}
]
}{- "success": true,
- "message": "string",
- "createdCount": 0,
- "invoiceIds": [
- 0
], - "failedCount": 0,
- "errors": [
- {
- "index": 0,
- "reason": "string"
}
]
}Get invoice by id
| id required | integer <int64> The ID of the invoice |
| invoiceTypeFilter required | string (InvoiceTypeFilter) Enum: "SALE" "PURCHASE" Type of invoices to retrieve |
{- "success": true,
- "message": "string",
- "data": {
- "invoiceDate": "2019-08-24",
- "dueDate": "2019-08-24",
- "paidDate": "2019-08-24",
- "invoiceNumber": "string",
- "contactName": "string",
- "totalGrossAmount": -10000000000000000,
- "invoiceStatus": "DRAFT",
- "openAmount": -10000000000000000,
- "note": "string",
- "categoryId": 0,
- "externalId": "string",
- "invoiceType": "SALES_INVOICE",
- "id": 0
}
}Updates an invoice. Invoices that originate from an ERP integration are read-only — update and delete operations are not allowed.
| id required | integer <int64> The ID of the invoice |
| invoiceTypeFilter required | string (InvoiceTypeFilter) Enum: "SALE" "PURCHASE" Type of invoices to retrieve |
| invoiceDate | string <date> Invoice date in ISO 8601 format |
| dueDate | string <date> Due date of the invoice in ISO 8601 format |
| paidDate | string or null <date> Invoice payment date and time in ISO 8601 format |
| invoiceNumber | string non-empty Invoice number |
| contactName | string non-empty Recipient name of the invoice |
| totalGrossAmount | number [ -10000000000000000 .. 10000000000000000 ] Total gross amount including tax |
| invoiceStatus | string Enum: "DRAFT" "OPEN" "PAID" "PARTIALLY_PAID" "CANCELED" "WITHHELD" "OFFER" "ORDER" "PLANNED" "RELEASED" Status of the invoice |
| openAmount | number or null [ -10000000000000000 .. 10000000000000000 ] Open (unpaid) amount of the invoice |
| note | string or null Description or notes for the invoice |
| categoryId | integer or null <int64> Unique identifier of the category |
{- "invoiceDate": "2024-10-15",
- "dueDate": "2024-11-15",
- "invoiceNumber": "2024-001",
- "contactName": "ACME Corp",
- "totalGrossAmount": 11900,
- "openAmount": 11900,
- "invoiceStatus": "PAID",
- "currency": "EUR",
- "paidDate": "2024-11-10"
}{- "success": true,
- "message": "string",
- "data": {
- "invoiceDate": "2019-08-24",
- "dueDate": "2019-08-24",
- "paidDate": "2019-08-24",
- "invoiceNumber": "string",
- "contactName": "string",
- "totalGrossAmount": -10000000000000000,
- "invoiceStatus": "DRAFT",
- "openAmount": -10000000000000000,
- "note": "string",
- "categoryId": 0,
- "externalId": "string",
- "invoiceType": "SALES_INVOICE",
- "id": 0
}
}Deletes an invoice by id. Invoices that originate from an ERP integration are read-only — update and delete operations are not allowed.
| id required | integer <int64> The ID of the invoice |
| invoiceTypeFilter required | string (InvoiceTypeFilter) Enum: "SALE" "PURCHASE" Type of invoices to retrieve |
{- "success": true,
- "message": "string",
- "id": 0
}Access financial planning scenarios for what-if analysis. Each account has a base scenario and can create additional scenarios for comparison.
{- "success": true,
- "message": "Bank accounts retrieved successfully",
- "data": [
- {
- "id": 1,
- "externalId": "123",
- "iban": "DE89370400440532113000",
- "accountNumber": "1234567891",
- "accountCurrency": "EUR",
- "accountName": "First Bank Account",
- "bankName": "Deutsche Bank",
- "accountType": "CHECKING",
- "provider": "ONLINE",
- "balanceReference": 2400,
- "balanceDate": "2025-03-10"
}, - {
- "id": 2,
- "externalId": "124",
- "iban": "DE89370400440532214000",
- "accountNumber": "1234567892",
- "accountCurrency": "EUR",
- "accountName": "Second Bank Account",
- "bankName": "Deutsche Bank",
- "accountType": "CHECKING",
- "provider": "OFFLINE",
- "balanceReference": 2500,
- "balanceDate": "2025-03-10"
}
]
}Creates a new bank account. The account counts towards the subscription's bank-account limit.
| HTTP | error |
Meaning |
|---|---|---|
| 400 | INVALID_REQUEST |
Request body is malformed or fails validation. |
| 400 | MAX_BANK_ACCOUNTS_REACHED |
The subscription's bank-account limit has been reached. |
| 401 | INVALID_CREDENTIALS |
Access token missing, expired, or invalid. |
| 403 | INSUFFICIENT_SCOPE |
Access token lacks the required scope. |
| 404 | COMPANY_NOT_FOUND |
The referenced company does not exist or is not accessible. |
| 500 | INTERNAL_ERROR |
Unexpected server error. |
| companyId | integer <int64> ID of the company the bank account belongs to |
| iban | string International Bank Account Number |
| accountNumber | string Local account number |
| accountCurrency required | string (Currency) Default: "EUR" Enum: "AED" "AFN" "ALL" "AMD" "ANG" "AOA" "ARS" "AUD" "AWG" "AZN" "BAM" "BBD" "BDT" "BGN" "BHD" "BIF" "BMD" "BND" "BOB" "BOV" "BRL" "BSD" "BTC" "BTN" "BWP" "BYR" "BYN" "BZD" "CAD" "CDF" "CHE" "CHF" "CHN" "CHW" "CLF" "CLP" "CNY" "COP" "COU" "CRC" "CUC" "CUP" "CVE" "CZK" "DJF" "DKK" "DOP" "DZD" "EGP" "ERN" "ETB" "EUR" "FJD" "FKP" "GBP" "GEL" "GGP" "GHS" "GIP" "GMD" "GNF" "GTQ" "GYD" "HKD" "HNL" "HRK" "HTG" "HUF" "IDR" "ILS" "IMP" "INR" "IQD" "IRR" "ISK" "JEP" "JMD" "JOD" "JPY" "KES" "KGS" "KHR" "KID" "KMF" "KPW" "KRW" "KWD" "KYD" "KZT" "LAK" "LBP" "LKR" "LRD" "LSL" "LTL" "LVL" "LYD" "MAD" "MDL" "MGA" "MKD" "MMK" "MNT" "MOP" "MRO" "MRU" "MUR" "MVR" "MWK" "MXN" "MXV" "MYR" "MZN" "NAD" "NGN" "NIO" "NIS" "NOK" "NPR" "NTD" "NZD" "OMR" "PAB" "PEN" "PGK" "PHP" "PKR" "PLN" "PRB" "PYG" "QAR" "RMB" "RON" "RSD" "RUB" "RWF" "SAR" "SBD" "SCR" "SDG" "SEK" "SGD" "SHP" "SLL" "SLS" "SOS" "SRD" "SSP" "STD" "STN" "SVC" "SYP" "SZL" "THB" "TJS" "TMT" "TND" "TOP" "TRY" "TTD" "TVD" "TWD" "TZS" "UAH" "UGX" "USD" "USN" "UYI" "UYU" "UYW" "UZS" "VEF" "VES" "VND" "VUV" "WST" "XAF" "XAG" "XAU" "XBA" "XBB" "XBC" "XBD" "XCD" "XDR" "XOF" "XPD" "XPF" "XPT" "XSU" "XTS" "XUA" "XXX" "YER" "ZAR" "ZMK" "ZMW" "ZWB" "ZWL" ISO 4217 currency codes |
| accountName required | string Name of the account |
| bankName required | string <= 255 characters Bank of the account |
| balanceReference | number [ -1000000000000 .. 1000000000000 ] Start-of-day balance of the bank account on the date specified in balanceDate. This balance will be used as a reference for calculating past and future balances based on the bank account's transactions. |
| balanceDate | string <date> The date of the balance specified in balanceReference in ISO 8601 format (yyyy-MM-dd). |
| accountType required | string (AccountType) Enum: "CHECKING" "SAVINGS" "CREDITCARD" "SECURITY" "LOAN" "POCKET" "MEMBERSHIP" "BAUSPAREN" Type of account |
| externalId | string External identifier for the bank account, used for integration with external systems |
| visible | boolean Whether the bank account is visible and active. Defaults to |
{- "externalId": "123",
- "iban": "DE89370400440532013000",
- "accountNumber": "1234567890",
- "accountCurrency": "EUR",
- "accountName": "Main Business Account",
- "bankName": "Deutsche Bank",
- "companyId": 1,
- "accountType": "CHECKING",
- "balanceReference": 2100,
- "balanceDate": "2025-03-10"
}{- "success": true,
- "message": "string",
- "data": {
- "companyId": 0,
- "iban": "string",
- "accountNumber": "string",
- "accountCurrency": "AED",
- "accountName": "string",
- "bankName": "string",
- "balanceReference": -1000000000000,
- "balanceDate": "2019-08-24",
- "accountType": "CHECKING",
- "externalId": "string",
- "visible": true,
- "id": 0,
- "provider": "OFFLINE"
}
}Get bank account by id
| id required | integer <int64> The ID of the bank account |
{- "success": true,
- "message": "string",
- "data": {
- "companyId": 0,
- "iban": "string",
- "accountNumber": "string",
- "accountCurrency": "AED",
- "accountName": "string",
- "bankName": "string",
- "balanceReference": -1000000000000,
- "balanceDate": "2019-08-24",
- "accountType": "CHECKING",
- "externalId": "string",
- "visible": true,
- "id": 0,
- "provider": "OFFLINE"
}
}Updates a bank account.
A bank account may only be modified through the surface that manages its provider: the public API
may modify API accounts, the partner API may modify PARTNER accounts. Requests targeting an
account managed by another surface (e.g. an OFFLINE, ONLINE, or PARTNER account via the
public API) are rejected with 409 BANK_ACCOUNT_NOT_MODIFIABLE. To manage an OFFLINE account
through the public API, convert it to API first (see the convert endpoint).
| HTTP | error |
Meaning |
|---|---|---|
| 400 | INVALID_REQUEST |
Request body is malformed or fails validation. |
| 401 | INVALID_CREDENTIALS |
Access token missing, expired, or invalid. |
| 403 | INSUFFICIENT_SCOPE |
Access token lacks the required scope. |
| 404 | BANK_ACCOUNT_NOT_FOUND |
The bank account does not exist or is not accessible. |
| 409 | BANK_ACCOUNT_NOT_MODIFIABLE |
The bank account is partner-managed and cannot be modified. |
| 500 | INTERNAL_ERROR |
Unexpected server error. |
| id required | integer <int64> The ID of the bank account |
| companyId | integer <int64> ID of the company the bank account belongs to |
| iban | string International Bank Account Number |
| accountNumber | string Local account number |
| accountCurrency | string (Currency) Default: "EUR" Enum: "AED" "AFN" "ALL" "AMD" "ANG" "AOA" "ARS" "AUD" "AWG" "AZN" "BAM" "BBD" "BDT" "BGN" "BHD" "BIF" "BMD" "BND" "BOB" "BOV" "BRL" "BSD" "BTC" "BTN" "BWP" "BYR" "BYN" "BZD" "CAD" "CDF" "CHE" "CHF" "CHN" "CHW" "CLF" "CLP" "CNY" "COP" "COU" "CRC" "CUC" "CUP" "CVE" "CZK" "DJF" "DKK" "DOP" "DZD" "EGP" "ERN" "ETB" "EUR" "FJD" "FKP" "GBP" "GEL" "GGP" "GHS" "GIP" "GMD" "GNF" "GTQ" "GYD" "HKD" "HNL" "HRK" "HTG" "HUF" "IDR" "ILS" "IMP" "INR" "IQD" "IRR" "ISK" "JEP" "JMD" "JOD" "JPY" "KES" "KGS" "KHR" "KID" "KMF" "KPW" "KRW" "KWD" "KYD" "KZT" "LAK" "LBP" "LKR" "LRD" "LSL" "LTL" "LVL" "LYD" "MAD" "MDL" "MGA" "MKD" "MMK" "MNT" "MOP" "MRO" "MRU" "MUR" "MVR" "MWK" "MXN" "MXV" "MYR" "MZN" "NAD" "NGN" "NIO" "NIS" "NOK" "NPR" "NTD" "NZD" "OMR" "PAB" "PEN" "PGK" "PHP" "PKR" "PLN" "PRB" "PYG" "QAR" "RMB" "RON" "RSD" "RUB" "RWF" "SAR" "SBD" "SCR" "SDG" "SEK" "SGD" "SHP" "SLL" "SLS" "SOS" "SRD" "SSP" "STD" "STN" "SVC" "SYP" "SZL" "THB" "TJS" "TMT" "TND" "TOP" "TRY" "TTD" "TVD" "TWD" "TZS" "UAH" "UGX" "USD" "USN" "UYI" "UYU" "UYW" "UZS" "VEF" "VES" "VND" "VUV" "WST" "XAF" "XAG" "XAU" "XBA" "XBB" "XBC" "XBD" "XCD" "XDR" "XOF" "XPD" "XPF" "XPT" "XSU" "XTS" "XUA" "XXX" "YER" "ZAR" "ZMK" "ZMW" "ZWB" "ZWL" ISO 4217 currency codes |
| accountName | string Name of the account |
| bankName | string <= 255 characters Bank of the account |
| balanceReference | number [ -1000000000000 .. 1000000000000 ] Start-of-day balance of the bank account on the date specified in balanceDate. This balance will be used as a reference for calculating past and future balances based on the bank account's transactions. |
| balanceDate | string <date> The date of the balance specified in balanceReference in ISO 8601 format (yyyy-MM-dd). |
| accountType | string (AccountType) Enum: "CHECKING" "SAVINGS" "CREDITCARD" "SECURITY" "LOAN" "POCKET" "MEMBERSHIP" "BAUSPAREN" Type of account |
| externalId | string External identifier for the bank account, used for integration with external systems |
| visible | boolean Whether the bank account is visible and active. Defaults to |
{- "externalId": "123",
- "iban": "DE89370400440532213000",
- "accountNumber": "1234567890",
- "accountCurrency": "EUR",
- "accountName": "Test bank account",
- "bankName": "Deutsche Bank",
- "accountType": "CHECKING",
- "balanceDate": "2026-03-11",
- "companyId": 1,
- "balanceReference": 2400
}{- "success": true,
- "message": "string",
- "data": {
- "companyId": 0,
- "iban": "string",
- "accountNumber": "string",
- "accountCurrency": "AED",
- "accountName": "string",
- "bankName": "string",
- "balanceReference": -1000000000000,
- "balanceDate": "2019-08-24",
- "accountType": "CHECKING",
- "externalId": "string",
- "visible": true,
- "id": 0,
- "provider": "OFFLINE"
}
}Deletes a bank account by id.
A bank account may only be deleted through the surface that manages its provider: the public API
may delete API accounts, the partner API may delete PARTNER accounts. Requests targeting an
account managed by another surface are rejected with 409 BANK_ACCOUNT_NOT_MODIFIABLE.
| HTTP | error |
Meaning |
|---|---|---|
| 401 | INVALID_CREDENTIALS |
Access token missing, expired, or invalid. |
| 403 | INSUFFICIENT_SCOPE |
Access token lacks the required scope. |
| 404 | BANK_ACCOUNT_NOT_FOUND |
The bank account does not exist or is not accessible. |
| 409 | BANK_ACCOUNT_NOT_MODIFIABLE |
The bank account is partner-managed and cannot be deleted. |
| 500 | INTERNAL_ERROR |
Unexpected server error. |
| id required | integer <int64> The ID of the bank account |
{- "success": true,
- "message": "string",
- "id": 0
}Converts a bank account between API (managed through the public API) and OFFLINE (managed
manually). Only these two providers can be converted into one another — bank-synced (ONLINE)
accounts and partner-managed (PARTNER) accounts cannot be converted.
A conversion into API makes the account count towards the subscription's bank account limit.
An account can be converted at most once every 30 days.
| HTTP | error |
Meaning |
|---|---|---|
| 400 | INVALID_REQUEST |
Request body is malformed or targetProvider is missing/invalid. |
| 400 | PROVIDER_CONVERSION_TOO_SOON |
The account can only be converted once every 30 days and was converted recently. |
| 400 | MAX_BANK_ACCOUNTS_REACHED |
Converting to API would exceed the subscription's bank-account limit. |
| 401 | INVALID_CREDENTIALS |
Access token missing, expired, or invalid. |
| 403 | INSUFFICIENT_SCOPE |
Access token lacks the required scope. |
| 404 | BANK_ACCOUNT_NOT_FOUND |
The bank account does not exist or is not accessible. |
| 409 | PROVIDER_CONVERSION_NOT_ALLOWED |
The account's current or target provider is not API/OFFLINE. |
| 500 | INTERNAL_ERROR |
Unexpected server error. |
| id required | integer <int64> The ID of the bank account |
| targetProvider required | string Enum: "API" "OFFLINE" The provider to convert the bank account to. Only conversions between |
{- "targetProvider": "OFFLINE"
}{- "success": true,
- "message": "string",
- "data": {
- "companyId": 0,
- "iban": "string",
- "accountNumber": "string",
- "accountCurrency": "AED",
- "accountName": "string",
- "bankName": "string",
- "balanceReference": -1000000000000,
- "balanceDate": "2019-08-24",
- "accountType": "CHECKING",
- "externalId": "string",
- "visible": true,
- "id": 0,
- "provider": "OFFLINE"
}
}Get all balances for a bank account
| id required | integer <int64> ID of the bank account |
| page | integer >= 0 Default: 0 Page number (0-based) |
| pageSize | integer [ 1 .. 1000 ] Default: 50 Number of balances per page |
{- "success": true,
- "message": "Bank account balances retrieved successfully",
- "number": 0,
- "size": 20,
- "totalElements": 125,
- "totalPages": 8,
- "data": [
- {
- "date": "2024-10-15",
- "amount": 2500
}, - {
- "date": "2024-10-16",
- "amount": 2700
}
]
}Get all bank account transactions
| bankAccountId required | integer <int64> ID of the bank account to filter transactions |
| page | integer >= 0 Default: 0 Page number (0-based) |
| pageSize | integer [ 1 .. 1000 ] Default: 50 Number of transactions per page |
{- "success": true,
- "message": "Transactions retrieved successfully",
- "number": 0,
- "size": 20,
- "totalElements": 125,
- "totalPages": 8,
- "data": [
- {
- "id": 1001,
- "externalId": "1234",
- "bankAccountId": 10,
- "categoryId": 5,
- "bookingDate": "2024-10-15",
- "amount": -120.5,
- "counterpartName": "Amazon EU",
- "counterpartAccountNumber": "9876543210",
- "counterpartIban": "DE44500105175407324931",
- "purpose": "Office supplies purchase",
- "counterpartCustomerReference": "reference"
}, - {
- "id": 1002,
- "externalId": "1235",
- "bankAccountId": 10,
- "categoryId": 2,
- "bookingDate": "2024-10-16",
- "amount": 2500,
- "counterpartName": "Client ABC GmbH",
- "counterpartAccountNumber": "1231231230",
- "counterpartIban": "DE89370400440532013000",
- "purpose": "Invoice payment INV-2024-10",
- "counterpartCustomerReference": "reference"
}
]
}Creates a new bank account transaction.
Transactions may only be written to an account managed by the calling surface: the public API to
API accounts, the partner API to PARTNER accounts. Writes targeting an account managed by
another surface are rejected with 409 BANK_ACCOUNT_NOT_MODIFIABLE.
| bankAccountId required | integer <int64> |
required | object Bank account transaction base model |
{- "bankAccountId": 10,
- "transaction": {
- "externalId": "1234",
- "categoryId": 5,
- "bookingDate": "2024-10-15",
- "amount": -120.5,
- "counterpartName": "Amazon EU",
- "counterpartAccountNumber": "9876543210",
- "counterpartIban": "DE44500105175407324931",
- "purpose": "Office supplies purchase",
- "counterpartCustomerReference": "reference"
}
}{- "success": true,
- "message": "string",
- "data": {
- "categoryId": 0,
- "bookingDate": "2019-08-24",
- "amount": -10000000000000000,
- "counterpartName": "string",
- "counterpartAccountNumber": "string",
- "counterpartIban": "string",
- "purpose": "string",
- "counterpartCustomerReference": "string",
- "externalId": "string",
- "id": 0,
- "bankAccountId": 0
}
}Creates multiple bank account transactions in a single request.
A maximum of 1000 transactions per bank account entry is allowed per request.
Requests exceeding this limit will be rejected with a 400 Bad Request response.
Transactions may only be written to an account managed by the calling surface: the public API to
API accounts, the partner API to PARTNER accounts. Writes targeting an account managed by
another surface are rejected with 409 BANK_ACCOUNT_NOT_MODIFIABLE.
| bankAccountId required | integer <int64> |
required | Array of objects [ 1 .. 1000 ] items |
{- "bankAccountId": 10,
- "transactions": [
- {
- "categoryId": 5,
- "externalId": "1234",
- "bookingDate": "2024-10-15",
- "amount": -120.5,
- "counterpartName": "Amazon EU",
- "counterpartAccountNumber": "9876543210",
- "counterpartIban": "DE44500105175407324931",
- "purpose": "Office supplies purchase",
- "counterpartCustomerReference": "REF-001"
}, - {
- "categoryId": 2,
- "externalId": "1235",
- "bookingDate": "2024-10-16",
- "amount": 2500,
- "counterpartName": "Client ABC GmbH",
- "counterpartAccountNumber": "1231231230",
- "counterpartIban": "DE89370400440532013000",
- "purpose": "Invoice payment INV-2024-10",
- "counterpartCustomerReference": "REF-002"
}, - {
- "categoryId": 5,
- "externalId": "1236",
- "bookingDate": "2024-10-17",
- "amount": -85,
- "counterpartName": "Office Depot",
- "counterpartAccountNumber": "5555555555",
- "counterpartIban": "DE12500105170648489890",
- "purpose": "Stationery supplies",
- "counterpartCustomerReference": "REF-003"
}
]
}{- "success": true,
- "message": "string",
- "createdCount": 0,
- "created": [
- {
- "index": 0,
- "externalId": "string",
- "transactionId": 0
}
], - "failedCount": 0,
- "errors": [
- {
- "index": 0,
- "reason": "string"
}
], - "skippedCount": 0,
- "skipped": [
- {
- "index": 0,
- "externalId": "string"
}
]
}Checks whether transactions with the given external IDs already exist for a bank account. Useful for deduplication checks before a bulk create, or for inline reconciliation after a resend. A maximum of 1000 external IDs per request is allowed.
| bankAccountId required | integer <int64> ID of the bank account to check against |
| externalIds required | Array of strings [ 1 .. 1000 ] items External IDs to check |
{- "bankAccountId": 10,
- "externalIds": [
- "1234",
- "1235",
- "1236"
]
}{- "success": true,
- "data": [
- {
- "externalId": "1234",
- "exists": true
}, - {
- "externalId": "1235",
- "exists": false
}, - {
- "externalId": "1236",
- "exists": true
}
]
}Get bank account transaction by id
| id required | integer <int64> The ID of the bank account transaction |
{- "success": true,
- "message": "string",
- "data": {
- "categoryId": 0,
- "bookingDate": "2019-08-24",
- "amount": -10000000000000000,
- "counterpartName": "string",
- "counterpartAccountNumber": "string",
- "counterpartIban": "string",
- "purpose": "string",
- "counterpartCustomerReference": "string",
- "externalId": "string",
- "id": 0,
- "bankAccountId": 0
}
}Updates a bank account transaction.
A transaction may only be modified through the surface that manages its account's provider (public
API for API accounts, partner API for PARTNER accounts). Requests targeting an account managed
by another surface are rejected with 409 BANK_ACCOUNT_NOT_MODIFIABLE.
| id required | integer <int64> The ID of the bank account transaction |
| categoryId | integer <int64> ID of the category |
| bookingDate | string <date> Booking date in ISO 8601 format |
| amount | number [ -10000000000000000 .. 10000000000000000 ] Transaction amount in bank account currency |
| counterpartName | string Counterpart of the transaction |
| counterpartAccountNumber | string Counterpart account number of the transaction |
| counterpartIban | string Counterpart iban of the transaction |
| purpose | string Description of the transaction |
| counterpartCustomerReference | string Counterpart customer reference |
| externalId | string <= 255 characters External identifier for the transaction, used for integration with external systems |
{- "categoryId": 5,
- "externalId": "1234",
- "bookingDate": "2024-10-15",
- "amount": -120.5,
- "counterpartName": "Amazon EU",
- "counterpartAccountNumber": "9876543210",
- "counterpartIban": "DE44500105175407324931",
- "purpose": "Office supplies purchase",
- "counterpartCustomerReference": "reference"
}{- "success": true,
- "message": "string",
- "data": {
- "categoryId": 0,
- "bookingDate": "2019-08-24",
- "amount": -10000000000000000,
- "counterpartName": "string",
- "counterpartAccountNumber": "string",
- "counterpartIban": "string",
- "purpose": "string",
- "counterpartCustomerReference": "string",
- "externalId": "string",
- "id": 0,
- "bankAccountId": 0
}
}Deletes a bank account transaction by id.
A transaction may only be deleted through the surface that manages its account's provider (public
API for API accounts, partner API for PARTNER accounts). Requests targeting an account managed
by another surface are rejected with 409 BANK_ACCOUNT_NOT_MODIFIABLE.
| id required | integer <int64> The ID of the bank account transaction |
{- "success": true,
- "message": "string",
- "id": 0
}Retrieves the cashflow of the authenticated company aggregated per period.
Each period bucket contains the opening and closing balances (actual, prognosed, total
and plan), the sales and purchases totals, the amounts per category, the aggregated
income and expense details, and any non-financial KPIs. Per-period overdraft and
liquidity figures are returned alongside, keyed by the same period start dates.
All amounts are returned with two decimals. Only periods within the resolved
from/to range are returned.
When scenarioId is omitted, the base forecast scenario is used.
When from/to are omitted, the range defaults to 6 periods in the past and 18 periods
in the future. The range between from and to must not exceed 36 periods.
| scenarioId | integer <int64> Example: scenarioId=1 ID of the scenario to calculate the cashflow for. Defaults to the base forecast scenario. |
| period | string (CashflowPeriod) Default: "MONTH" Enum: "MONTH" "WEEK" "DAY" Aggregation period of the cashflow buckets. |
| from | string <date> Example: from=2025-01-01 Start of the range in ISO 8601 format (yyyy-MM-dd). Must be the first day of the
requested period (first day of the month for MONTH, Monday for WEEK).
When omitted it defaults to 6 periods before |
| to | string <date> Example: to=2025-12-31 End of the range in ISO 8601 format (yyyy-MM-dd). Must be the last day of the
requested period (last day of the month for MONTH, Sunday for WEEK) and not before |
{- "cashflow": {
- "data": {
- "2025-06-01": {
- "totalSales": 0,
- "totalPurchases": 0,
- "startBalance": 0,
- "planStartBalance": 0,
- "amountPerCategory": {
- "1163025": {
- "sumOfBankTransactions": -7455.9,
- "sumOfInvoices": 0,
- "sumOfPlannedValues": 0,
- "amount": -7455.9,
- "remainingAmount": 0,
- "planDeviation": -7455.9
}
}, - "incomeDetails": {
- "sumOfBankTransactions": 211941.3,
- "sumOfInvoices": 0,
- "sumOfPlannedValues": 72850,
- "prognosed": 211941.3,
- "remainingAmount": 0,
- "planDeviation": 139091.3,
- "planAchievementPct": 291
}, - "expenseDetails": {
- "sumOfBankTransactions": -83574.9,
- "sumOfInvoices": 0,
- "sumOfPlannedValues": -32575.5,
- "prognosed": -113427.9,
- "remainingAmount": -29853,
- "planDeviation": -50999.4,
- "planAchievementPct": 257
}, - "actualEndBalance": 128366,
- "prognosedEndBalance": 98513,
- "totalEndBalance": 128366,
- "planEndBalance": 40275,
- "nfKpis": { },
- "categoriesWithNotes": { }
}
}, - "overdraftData": {
- "2025-06-01": {
- "overdraftLimit": 100000,
- "totalLiquidity": 228366.4,
- "totalPlannedLiquidity": 198513.4
}
}
}
}