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 | | RECONCILING | The document’s reconciliation lines are being reconciled with the books | | CANCELLED | Workflow has been cancelled | | FAILED | Workflow failed and requires manual intervention | | 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
has_open_question boolean Filter vouchers with/without an open accounting question (see Questions)
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)

Dot-notation aliases

The parameters that filter on the voucher’s document or on its journal entry lines also accept a prefixed form. When both are sent, the prefixed one wins.

Parameter Prefixed alias
document_type document.document_type
document_status document.document_status
payment_status document.payment_status
document_date_from document.document_date_from
document_date_to document.document_date_to
due_date_from document.due_date_from
due_date_to document.due_date_to
account_code journal_entry.lines.account_code
tax_code journal_entry.lines.tax_code
posting_date_from journal_entry.lines.posting_date_from
posting_date_to journal_entry.lines.posting_date_to

Document payment filters

These filter on the voucher’s document and are only available in the prefixed form. See Documents for what each flag means.

Parameter Type Description
document.pending_payment_amount decimal Filter by the document’s pending payment-request amount — an exact match, so 0 finds documents with nothing pending
document.is_payable boolean Filter by whether the document can be paid
document.is_unpaid boolean Filter by whether the document has an outstanding balance
document.is_available_for_payment boolean Filter by whether the document is available for payment
document.is_being_paid boolean Filter by whether the document has a pending payment request

Response Fields

A voucher is an uploaded file, so every response also includes the base uploaded-file fields in addition to the voucher-specific ones below.

Field Type Description
id integer Unique identifier
created_at datetime Creation timestamp
created_by_id integer User who created the voucher
updated_at datetime Last update timestamp
updated_by_id integer User who last updated the voucher
client_account_id integer The client account this voucher belongs to
type string The document type (see Document Types tables above)
file_name string Original file name
content_type string MIME type of the file
channel string How the file was received (e.g. email, upload)
processing_track string Processing pipeline track for the file
size integer File size in bytes
is_active boolean Whether the voucher is active
thumbnail_url string or null Presigned URL to a thumbnail image
preview_url string or null Presigned URL to a high-resolution preview image
download_url string or null Presigned URL to download the (optimized) file
original_url string or null Presigned URL to download the original, unmodified file
page_images array Per-page preview images: {page_number, preview_url}
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)

The following related objects can be included using the with parameter:

  • attachments: Associated file attachments
  • documents: Linked commercial documents
  • document: Primary document
  • journal_entries: Associated journal entries
  • journal_entry: Primary journal entry
  • statements: Associated statements
  • statement: Primary statement
  • tasks: Related worker tasks
  • questions: Associated accounting questions
  • collection: Associated voucher collection
  • project: Associated project

Example Request

GET /api/v2/vouchers?status=PENDING&document_date_from=2024-01-01&with=documents,journal_entries

Array-valued parameters (status, document_type, with, etc.) take a single query value with items separated by comma, semicolon, or space — not repeated key[]= params.

Example Response

{
  "data": [
    {
      "id": 1234,
      "created_at": "2024-01-15T10:30:00Z",
      "client_account_id": 7,
      "type": "APINV",
      "file_name": "invoice.pdf",
      "content_type": "application/pdf",
      "channel": "email",
      "size": 84213,
      "is_active": true,
      "thumbnail_url": "https://...",
      "preview_url": "https://...",
      "download_url": "https://...",
      "original_url": "https://...",
      "page_images": [],
      "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
  }
}

Error Responses

Code HTTP Status Description
voucher.source_missing_embedding 400 The similar_to voucher has no embedding, so similarity search is unavailable for it
voucher.client_account_access_denied 403 A requested client_account_id is outside your eligible accounts
voucher.source_access_denied 403 No access to the similar_to voucher
voucher.source_not_found 404 The similar_to voucher was not found

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",
  "client_account_id": 7,
  "type": "APINV",
  "file_name": "invoice.pdf",
  "content_type": "application/pdf",
  "channel": "email",
  "size": 84213,
  "is_active": true,
  "thumbnail_url": "https://...",
  "preview_url": "https://...",
  "download_url": "https://...",
  "original_url": "https://...",
  "page_images": [],
  "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

Code HTTP Status Description
voucher.access_denied 403 No access to voucher
voucher.not_found 404 Voucher not found

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.
  • Its documents have reconciliation lines referenced by a live (non-archived) external reconciliation record.
  • 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 the standard v2 error envelope ({"error": {"code", "message", "request_id"}}), with message describing the relation that blocked the deletion.

Path Parameters

Parameter Type Description
id integer Voucher ID

Error Responses

Code HTTP Status Description
common.validation_error 400 Voucher cannot be deleted because of relations to posted journal entries, documents, or reconciliations
voucher.access_denied 403 No access to voucher
voucher.not_found 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)

Returns the merged voucher with the same shape as Get Single Voucher (abbreviated here):

{
  "id": 200,
  "created_at": "2026-04-10T08:30:00Z",
  "type": "APINV",
  "document_date": "2026-04-10",
  "status": "PENDING",
  "collection_id": null,
  "project_id": null,
  "workflow_status": null
}

Error Responses

Code HTTP Status Description
voucher.invalid_voucher_ids 400 voucher_ids missing or not a list
voucher.invalid_source_action 400 Invalid source_action value
voucher.merge_failed 400 The merge was rejected: fewer than 2 IDs, sources in different client accounts, source_action is DELETE but a source has posted journal entries, or no PDF-able files were found
voucher.access_denied 403 No access to one of the specified vouchers — details.voucher_id identifies it
voucher.not_found 404 A voucher ID was not found — details.voucher_id identifies it

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 (same shape as Get Single Voucher, abbreviated here), 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

Code HTTP Status Description
voucher.invalid_voucher_id 400 voucher_id missing or not an integer
voucher.invalid_page_ranges 400 page_ranges missing, not a list, or a range is not a list of exactly 2 integers — details.index identifies the offending range
voucher.invalid_source_action 400 Invalid source_action value
voucher.split_failed 400 The split was rejected: fewer than 2 ranges, voucher is not a PDF or has only one page, a range is out of bounds, starts after it ends or overlaps another, or source_action is DELETE but the voucher has posted journal entries
voucher.access_denied 403 No access to the voucher — details.voucher_id identifies it
voucher.not_found 404 Voucher not found — details.voucher_id identifies it

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

Code HTTP Status Description
voucher.access_denied 403 No access to the voucher’s client account
voucher.not_found 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

Code HTTP Status Description
common.validation_error 400 Invalid item category, purpose, or tag validation failure
voucher.access_denied 403 No access to the voucher’s client account
voucher.not_found 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
NOT_PAID Not yet paid
NOT_PAYABLE Not payable (e.g. no cost to reimburse)
OTHER Paid by another method

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

The item_categories field accepts one or more of the following enum values, separated by commas. Any other value is rejected with 400 Invalid item category. See Voucher Statements for the full reference.

ELECTRONICS, FOOD, HOUSEHOLD_ITEMS, OFFICE_OR_WAREHOUSE_SPACE, FUEL, VEHICLES, HIRED_LABOR_CONSULTANCY, BROADBAND_TELEPHONY, ELECTRICITY, BUILDING_MATERIALS, SOFTWARE_CLOUD_SERVICES, CLOTHING, TRANSPORT_TRAVEL, TOOLS, FURNITURE_INTERIOR, CLEANING_EQUIPMENT, WELLNESS_ITEMS, ADVERTISING, SHIPPING_POSTAGE_CUSTOMS, INSURANCE, PAYMENT_SERVICES_FEES, MEDICAL_SUPPLIES, BOOKS_MAGAZINES, EDUCATION_TRAINING, ENTERTAINMENT, GIFTS_NOVELTIES, HARDWARE, LEGAL_SERVICES, OUTDOOR_GARDEN, PET_SUPPLIES, SPORTS_FITNESS, TOYS_GAMES, TRAVEL_ACCOMMODATION