Vouchers
Vouchers represent financial documents in the system that can be linked to various entities such as documents, journal entries, and collections. They form a crucial part of the financial document management system.
Status Values
Voucher Status
| Value | Description |
|——-|————-|
| PENDING | Initial state, voucher awaiting processing |
| DRAFT | Voucher is being worked on, can be modified |
| ARCHIVED | Voucher has been archived and is no longer active |
| BOOKED | Voucher has been posted to the accounting system |
| DELETED | Voucher has been marked as deleted |
Document Types
Accounts Receivable Documents
| Value | Description |
|——-|————-|
| ARINV | AR Invoice - Customer invoice |
| ARCRN | AR Credit Note - Customer credit note |
| ARCIN | AR Cash Invoice - Customer cash invoice |
| ARPIN | AR Proforma Invoice - Customer proforma invoice |
| ARDEB | AR Debt Collection - Customer debt collection document |
Accounts Payable Documents
| Value | Description |
|——-|————-|
| APINV | AP Invoice - Supplier invoice |
| APCRN | AP Credit Note - Supplier credit note |
| RECPT | AP Receipt - Supplier receipt |
| APCIN | AP Cash Invoice - Supplier cash invoice |
| APPIN | AP Proforma Invoice - Supplier proforma invoice |
| APDEB | AP Debt Collection - Supplier debt collection document |
Settlement Documents
| Value | Description |
|——-|————-|
| PAYSR | Payment Settlement Report |
| SALSM | Sales Summary |
| VATST | VAT Settlement - For payment of VAT |
| VATRP | VAT Report - For reporting VAT |
Payroll Documents
| Value | Description |
|——-|————-|
| PRRUN | Payroll Run |
| PRPAY | Payroll Payment List |
| PRTAX | Payroll Tax Settlement |
Workflow Status
| Value | Description |
|——-|————-|
| IMAGE_PROCESSING | Document image is being processed and text extracted |
| STARTING_WORKFLOW | Initial workflow setup is in progress |
| CLASSIFICATION | Document type is being determined |
| DATA_EXTRACTION | Relevant data is being extracted from the document |
| WAITING_FOR_ANSWER | Workflow is paused waiting for user input |
| DUPLICATE_CHECK | Checking for duplicate documents |
| BOOKING | Document is being posted to the accounting system |
| CANCELLED | Workflow has been cancelled |
| COMPLETED | Workflow has completed successfully |
List Vouchers
GET /api/v2/vouchers
Retrieves a paginated list of vouchers based on specified filters.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| client_account_id | integer[] | Filter by specific client account IDs |
| status | string[] | Filter by voucher status (see Voucher Status table above) |
| document_type | string[] | Filter by document type (see Document Types tables above) |
| document_status | string[] | Filter by document status |
| payment_status | string[] | Filter by payment status |
| document_date_from | date | Filter by document date range start (YYYY-MM-DD) |
| document_date_to | date | Filter by document date range end (YYYY-MM-DD) |
| due_date_from | date | Filter by due date range start (YYYY-MM-DD) |
| due_date_to | date | Filter by due date range end (YYYY-MM-DD) |
| business_partner_id | integer[] | Filter by business partner IDs |
| collection_id | integer[] | Filter by collection IDs |
| project_id | integer[] | Filter by project IDs |
| account_code | string[] | Filter by GL account codes on the voucher’s journal entry lines |
| tax_code | string[] | Filter by tax codes on the voucher’s journal entry lines |
| posting_date_from | date | Filter by journal entry posting date range start (YYYY-MM-DD) |
| posting_date_to | date | Filter by journal entry posting date range end (YYYY-MM-DD) |
| free_text | string | Search across voucher fields and related documents |
| similar_to | integer | Find vouchers similar to the given voucher ID (vector similarity search; the source voucher must have an embedding) |
| has_project | boolean | Filter vouchers with/without projects |
| has_collection | boolean | Filter vouchers with/without collections |
| has_journal_entry | boolean | Filter vouchers with/without journal entries |
| has_document | boolean | Filter vouchers with/without documents |
| has_attachment | boolean | Filter vouchers with/without attachments |
| order_by | string | Sort field and direction (e.g., “created_at desc”) |
| with | string[] | Include related objects in response |
| page | integer | Page number for pagination (default: 1) |
| per_page | integer | Items per page (default: 100) |
Response Fields
| Field | Type | Description |
|---|---|---|
| id | integer | Unique identifier |
| created_at | datetime | Creation timestamp |
| document_date | date | Date of the voucher document |
| status | string | Current status of the voucher (see Voucher Status table above) |
| collection_id | integer | ID of associated collection |
| project_id | integer | ID of associated project |
| workflow_status | string | Current workflow status (see Workflow Status table above) |
Related Objects
The following related objects can be included using the with parameter:
attachments: Associated file attachmentsdocuments: Linked commercial documentsdocument: Primary documentjournal_entries: Associated journal entriesjournal_entry: Primary journal entrystatements: Associated statementsstatement: Primary statementtasks: Related worker tasksquestions: Associated accounting questionscollection: Associated voucher collectionproject: Associated project
Example Request
GET /api/v2/vouchers?status[]=PENDING&document_date_from=2024-01-01&with[]=documents&with[]=journal_entries
Example Response
{
"data": [
{
"id": 1234,
"created_at": "2024-01-15T10:30:00Z",
"document_date": "2024-01-15",
"status": "PENDING",
"collection_id": 567,
"project_id": 890,
"workflow_status": "DATA_EXTRACTION",
"documents": [
{
"id": 456,
"type": "APINV",
"status": "PENDING"
}
],
"journal_entries": [
{
"id": 789,
"posting_date": "2024-01-15",
"status": "DRAFT"
}
]
}
],
"meta": {
"records": 45,
"per_page": 100,
"page": 1,
"pages": 1
}
}
Get Single Voucher
GET /api/v2/vouchers/{id}
Retrieves a specific voucher by ID.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
| id | integer | Voucher ID |
Example Request
GET /api/v2/vouchers/1234?with[]=documents&with[]=journal_entries
Example Response
{
"id": 1234,
"created_at": "2024-01-15T10:30:00Z",
"document_date": "2024-01-15",
"status": "PENDING",
"collection_id": 567,
"project_id": 890,
"workflow_status": "DATA_EXTRACTION",
"documents": [
{
"id": 456,
"type": "APINV",
"status": "PENDING"
}
],
"journal_entries": [
{
"id": 789,
"posting_date": "2024-01-15",
"status": "DRAFT"
}
]
}
Error Responses
| Status Code | Description |
|---|---|
| 404 | Voucher not found |
| 403 | No access to voucher |
Delete Voucher
DELETE /api/v2/vouchers/{id}
Permanently deletes a voucher along with its draft journal entries and draft documents. Returns 204 No Content on success.
Deletion is rejected when the voucher still has accounting relations that must be preserved:
- It has posted (non-cancelled) journal entries.
- It has posted (non-cancelled) documents.
- It has accounts-receivable documents created in-app (sendable documents).
In these cases the request fails with 400 Bad Request and an error_message describing the relation that blocked the deletion.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
| id | integer | Voucher ID |
Error Responses
| Status Code | Description |
|---|---|
| 400 | Voucher cannot be deleted because of relations to posted journal entries or documents |
| 403 | No access to voucher |
| 404 | Voucher not found |
Endpoints
| Method | Endpoint | Description |
|---|---|---|
| GET | /vouchers | List vouchers |
| GET | /vouchers/{id} | Get a single voucher |
| DELETE | /vouchers/{id} | Delete a voucher |
| POST | /vouchers/merge | Merge multiple vouchers into one |
| POST | /vouchers/split | Split a multi-page voucher |
| GET | /vouchers/{id}/statements | List statements for a voucher |
| POST | /vouchers/{id}/statements | Create a statement for a voucher |
Merge Vouchers
POST /api/v2/vouchers/merge
Merges multiple vouchers into a single PDF voucher. PDFs and images from the source vouchers are combined into one document. Non-PDF files (Word, Excel, etc.) are transferred as attachments on the merged voucher. The page order in the merged PDF follows the order of the voucher_ids array.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| voucher_ids | integer[] | Yes | List of voucher IDs to merge. Must contain at least 2 IDs. Order determines page order in the merged PDF |
| source_action | string | No | What to do with source vouchers after merge. Default: NONE |
Source Action Values
| Value | Description |
|---|---|
NONE |
Keep source vouchers unchanged |
ARCHIVE |
Archive the documents associated with the source vouchers |
DELETE |
Delete the source vouchers. Fails if any source voucher has posted journal entries |
Example Request
{
"voucher_ids": [101, 102, 103],
"source_action": "ARCHIVE"
}
Example Response (201 Created)
{
"id": 200,
"created_at": "2026-04-10T08:30:00Z",
"document_date": "2026-04-10",
"status": "PENDING",
"collection_id": null,
"project_id": null,
"workflow_status": null
}
Error Responses
| Status | Description |
|---|---|
| 400 | voucher_ids missing, not a list, or contains fewer than 2 IDs |
| 400 | Invalid source_action value |
| 400 | Source vouchers belong to different client accounts |
| 400 | source_action is DELETE but a source voucher has posted journal entries |
| 400 | No PDF-able files found in the selected vouchers |
| 403 | No access to one of the specified vouchers |
| 404 | A voucher ID was not found |
Split Voucher
POST /api/v2/vouchers/split
Splits a multi-page PDF voucher into multiple vouchers by page ranges. Each page range produces a new voucher. Pages are 1-indexed and ranges are inclusive. If the source voucher has a statement, it is copied to all new vouchers.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| voucher_id | integer | Yes | ID of the PDF voucher to split |
| page_ranges | integer[][] | Yes | List of [start_page, end_page] pairs. Must contain at least 2 ranges. Pages are 1-indexed and inclusive |
| source_action | string | No | What to do with the source voucher after split. Default: NONE |
The source_action values are the same as for Merge Vouchers.
Example Request
{
"voucher_id": 456,
"page_ranges": [[1, 2], [3, 5], [6, 6]],
"source_action": "DELETE"
}
Example Response (201 Created)
Returns an array of newly created vouchers, one per page range:
[
{
"id": 457,
"created_at": "2026-04-10T09:00:00Z",
"document_date": "2026-04-10",
"status": "PENDING",
"collection_id": null,
"project_id": null,
"workflow_status": null
},
{
"id": 458,
"created_at": "2026-04-10T09:00:00Z",
"document_date": "2026-04-10",
"status": "PENDING",
"collection_id": null,
"project_id": null,
"workflow_status": null
},
{
"id": 459,
"created_at": "2026-04-10T09:00:00Z",
"document_date": "2026-04-10",
"status": "PENDING",
"collection_id": null,
"project_id": null,
"workflow_status": null
}
]
Error Responses
| Status | Description |
|---|---|
| 400 | voucher_id missing or not an integer |
| 400 | page_ranges missing, not a list, or contains fewer than 2 ranges |
| 400 | A page range is not a list of exactly 2 integers |
| 400 | Invalid source_action value |
| 400 | Voucher is not a PDF |
| 400 | Voucher has only one page |
| 400 | Page range is out of bounds |
| 400 | Start page is greater than end page in a range |
| 400 | Page ranges overlap |
| 400 | source_action is DELETE but voucher has posted journal entries |
| 403 | No access to the voucher |
| 404 | Voucher not found |
Voucher Statements
Voucher statements capture user-provided metadata about a voucher, such as the expense purpose, item categories, payment method, and payor. They are used during the document processing workflow to enrich vouchers with accounting-relevant information. Creating or updating a statement can trigger automatic updates to the linked journal entry (e.g. setting the project dimension) and influence the document posting workflow.
List Voucher Statements
GET /api/v2/vouchers/{id}/statements
Returns a paginated list of statements for a specific voucher, ordered by creation date (newest first).
Path Parameters
| Parameter | Type | Description |
|---|---|---|
| id | integer | Voucher ID |
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| page | integer | No | Page number (default: 1) |
| per_page | integer | No | Items per page (default: 100) |
| with | string | No | Include related resources (supported: created_by, payor, project, collection, tags) |
Response
{
"data": [
{
"id": 10,
"created_by_id": 7,
"created_at": "2026-04-10T09:15:00Z",
"client_account_id": 7,
"voucher_id": 1234,
"voucher_category_id": 2,
"item_categories": "ELECTRONICS,SOFTWARE_CLOUD_SERVICES",
"purpose": "WORKPLACE_EQUIPMENT",
"participant_information": null,
"additional_information": "New laptop for development team",
"payment_method": "BUSINESS_CARD",
"payor_id": null,
"project_id": 5,
"collection_id": null
}
],
"meta": {
"page": 1,
"pages": 1,
"per_page": 100,
"records": 1
}
}
Error Responses
| Status | Description |
|---|---|
| 403 | No access to the voucher’s client account |
| 404 | Voucher not found |
Create Voucher Statement
POST /api/v2/vouchers/{id}/statements
Creates a new statement for a voucher. When a statement is created, the system may automatically update the linked journal entry’s project dimension and manage document posting workflow tasks.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
| id | integer | Voucher ID |
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| voucher_category_id | integer | No | Voucher category ID |
| item_categories | string | No | Comma-separated item categories (see Item Categories below) |
| purpose | string | No | Expense purpose (see Purpose Values below) |
| participant_information | string | No | Details about event participants (max 500 characters) |
| additional_information | string | No | Additional notes (max 500 characters) |
| payment_method | string | No | How the expense was paid (see Payment Methods below) |
| payor_id | integer | No | Business partner ID of the person who paid |
| project_id | integer | No | Project to associate with this expense |
| collection_id | integer | No | Voucher collection ID |
| tags | array | No | Array of tag objects with id field, e.g. [{"id": 1}, {"id": 2}] |
Example Request
{
"item_categories": "ELECTRONICS",
"purpose": "WORKPLACE_EQUIPMENT",
"payment_method": "BUSINESS_CARD",
"project_id": 5,
"additional_information": "New laptop for development team",
"tags": [{"id": 1}]
}
Response (201 Created)
Returns the created statement object (same shape as list response items).
Error Responses
| Status | Description |
|---|---|
| 400 | Invalid item category, purpose, or tag validation failure |
| 403 | No access to the voucher’s client account |
| 404 | Voucher not found |
Statement Attributes
| Attribute | Type | Description |
|---|---|---|
| id | integer | Unique identifier (read-only) |
| created_by_id | integer | User who created the statement (read-only) |
| created_at | datetime | Creation timestamp (read-only) |
| client_account_id | integer | The client account ID |
| voucher_id | integer | The voucher this statement belongs to |
| voucher_category_id | integer | Voucher category reference |
| item_categories | string | Comma-separated list of item category codes |
| purpose | string | Expense purpose code |
| participant_information | string | Details about participants (for entertainment/events) |
| additional_information | string | Free-text notes |
| payment_method | string | How the expense was paid |
| payor_id | integer | Business partner ID of the payor |
| project_id | integer | Associated project |
| collection_id | integer | Associated voucher collection |
Relationships
| Relationship | Description |
|---|---|
| created_by | The user who created the statement |
| payor | The business partner who paid |
| project | The associated project |
| collection | The associated voucher collection |
| tags | Tags attached to the statement |
Payment Methods
| Value | Description |
|---|---|
PRIVATE_ACCOUNT |
Paid from a personal bank account |
PRIVATE_CARD |
Paid with a personal card |
BUSINESS_ACCOUNT |
Paid from the company bank account |
BUSINESS_CARD |
Paid with a company card |
Purpose Values
| Value | Description |
|---|---|
MAINTENANCE_OF_OWN_ASSETS |
Maintenance or repair of company assets |
BUILD_PHYSICAL_PRODUCT |
Materials for building physical products |
USED_IN_CUSTOMER_PROJECTS |
Expense related to customer project work |
FOR_RESALE |
Goods purchased for resale |
WORKPLACE_EQUIPMENT |
Office and workplace equipment |
INCREASE_SALES |
Marketing, sales, or promotional expenses |
INTERNAL_EMPLOYEE_EVENTS |
Internal events, team activities |
OVERTIME_TRAVEL_INCONVENIENT_WORKING_HOURS |
Travel, overtime, or inconvenient working hours |
Item Categories
Common item category values include: ELECTRONICS, FOOD, FUEL, VEHICLES, BROADBAND_TELEPHONY, SOFTWARE_CLOUD_SERVICES, OFFICE_SUPPLIES, MARKETING, TRAVEL, ACCOMMODATION, CLOTHING, CLEANING, INSURANCE, RENT, PROFESSIONAL_SERVICES, EQUIPMENT, and others. Multiple categories can be combined with commas.