Voucher Statements
A voucher statement records structured metadata about a voucher (an uploaded accounting document). It captures business context that cannot be read directly from the file itself — the purpose of the expense, who participated, how it was paid, the payor, and any project, category, or tags it relates to. Statements are commonly used to document representation and entertainment expenses where Norwegian accounting rules require the purpose and participants to be recorded.
Voucher statements are nested under a voucher. The voucher_id in the path is the ID of the voucher (an uploaded file).
Endpoints
| Method |
Endpoint |
Description |
| GET |
/vouchers/{voucher_id}/statements |
List the statements attached to a voucher |
| POST |
/vouchers/{voucher_id}/statements |
Create a statement on a voucher |
Authentication
All requests require a valid Authorization: Bearer token. The authenticated user must have access to the client account that owns the voucher; otherwise the request is rejected with 403 Forbidden.
List Voucher Statements
GET /api/v2/vouchers/{voucher_id}/statements
Returns the voucher statements belonging to the given voucher. The response is paginated.
Query Parameters
| Parameter |
Type |
Required |
Description |
| page |
integer |
No |
Page number for pagination (default: 1) |
| per_page |
integer |
No |
Number of items per page (default: 100) |
| with |
string |
No |
Comma-separated list of relations to include. Supported: created_by, payor, project, collection, tags |
Example Request
curl "https://api.snapbooks.no/v2/vouchers/4567/statements?with=payor,project" \
-H "Authorization: Bearer YOUR_TOKEN"
Create Voucher Statement
POST /api/v2/vouchers/{voucher_id}/statements
Creates a statement on the voucher. The voucher_id and client_account_id are taken from the voucher in the path, and created_by_id and user_id are set to the authenticated user — any values for these fields in the request body are ignored.
Request Body
| Field |
Type |
Required |
Description |
| voucher_category_id |
integer |
No |
ID of the voucher category |
| item_categories |
string |
No |
One or more item category enum values, separated by commas, semicolons, or spaces (max 255 characters). See Item Categories |
| purpose |
string |
No |
Purpose of the expense (enum value, max 100 characters). See Purposes |
| participant_information |
string |
No |
Participants involved, e.g. for representation expenses (max 500 characters) |
| additional_information |
string |
No |
Any additional notes (max 500 characters) |
| payment_method |
string |
No |
How the voucher was paid. See Payment Methods |
| payor_id |
integer |
No |
ID of the business partner that paid |
| project_id |
integer |
No |
ID of the project this statement relates to |
| collection_id |
integer |
No |
ID of the voucher collection this statement belongs to |
| tags |
array |
No |
Array of tag objects identified by id, e.g. [{ "id": 12 }] |
Payment Methods
| Value |
Description |
PRIVATE_ACCOUNT |
Paid from a private bank account |
PRIVATE_CARD |
Paid with a private card |
BUSINESS_ACCOUNT |
Paid from a business bank account |
BUSINESS_CARD |
Paid with a business card |
NOT_PAID |
Not yet paid |
NOT_PAYABLE |
Nothing to pay |
OTHER |
Other payment method |
Purposes
The purpose field accepts a single enum value. Any other value is rejected with 400 Invalid purpose.
| Value |
Description |
MAINTENANCE_OF_OWN_ASSETS |
Maintenance of the company’s own assets |
BUILD_PHYSICAL_PRODUCT |
Used to build a physical product |
USED_IN_CUSTOMER_PROJECTS |
Used in customer projects |
FOR_RESALE |
Purchased for resale |
WORKPLACE_EQUIPMENT |
Workplace equipment |
INCREASE_SALES |
To increase sales |
INTERNAL_EMPLOYEE_EVENTS |
Internal employee events |
OVERTIME_TRAVEL_INCONVENIENT_WORKING_HOURS |
Overtime, travel, or inconvenient working hours |
Item Categories
The item_categories field accepts one or more enum values separated by commas, semicolons, or whitespace (e.g. "ELECTRONICS, OFFICE_OR_WAREHOUSE_SPACE"). Any value not in the list below is rejected with 400 Invalid item category.
| Value |
Description |
ELECTRONICS |
Electronics |
FOOD |
Food |
HOUSEHOLD_ITEMS |
Household items |
OFFICE_OR_WAREHOUSE_SPACE |
Office or warehouse space |
FUEL |
Fuel |
VEHICLES |
Vehicles |
HIRED_LABOR_CONSULTANCY |
Hired labor or consultancy |
BROADBAND_TELEPHONY |
Broadband or telephony |
ELECTRICITY |
Electricity |
BUILDING_MATERIALS |
Building materials |
SOFTWARE_CLOUD_SERVICES |
Software or cloud services |
CLOTHING |
Clothing |
TRANSPORT_TRAVEL |
Transport or travel |
TOOLS |
Tools |
FURNITURE_INTERIOR |
Furniture or interior |
CLEANING_EQUIPMENT |
Cleaning equipment |
WELLNESS_ITEMS |
Wellness items |
ADVERTISING |
Advertising |
SHIPPING_POSTAGE_CUSTOMS |
Shipping, postage, or customs |
INSURANCE |
Insurance |
PAYMENT_SERVICES_FEES |
Payment services or fees |
MEDICAL_SUPPLIES |
Medical supplies |
BOOKS_MAGAZINES |
Books or magazines |
EDUCATION_TRAINING |
Education or training |
ENTERTAINMENT |
Entertainment |
GIFTS_NOVELTIES |
Gifts or novelties |
HARDWARE |
Hardware |
LEGAL_SERVICES |
Legal services |
OUTDOOR_GARDEN |
Outdoor or garden |
PET_SUPPLIES |
Pet supplies |
SPORTS_FITNESS |
Sports or fitness |
TOYS_GAMES |
Toys or games |
TRAVEL_ACCOMMODATION |
Travel or accommodation |
Example Request
curl -X POST "https://api.snapbooks.no/v2/vouchers/4567/statements" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"purpose": "INTERNAL_EMPLOYEE_EVENTS",
"item_categories": "FOOD, ENTERTAINMENT",
"participant_information": "Jane Doe (Acme AS), John Smith (Snapbooks AS)",
"payment_method": "BUSINESS_CARD",
"payor_id": 56,
"project_id": 8,
"tags": [{ "id": 12 }]
}'
Example Response (201 Created)
{
"id": 9001,
"created_at": "2026-06-02T10:15:00Z",
"created_by_id": 7,
"client_account_id": 7,
"voucher_id": 4567,
"voucher_category_id": null,
"item_categories": "FOOD, ENTERTAINMENT",
"purpose": "INTERNAL_EMPLOYEE_EVENTS",
"participant_information": "Jane Doe (Acme AS), John Smith (Snapbooks AS)",
"additional_information": null,
"payment_method": "BUSINESS_CARD",
"payor_id": 56,
"project_id": 8,
"collection_id": null
}
Attributes
| Attribute |
Type |
Description |
| id |
integer |
The unique ID of the statement (read-only) |
| created_at |
datetime |
When the statement was created (read-only) |
| created_by_id |
integer |
ID of the user that created the statement (read-only) |
| client_account_id |
integer |
ID of the client account the statement belongs to |
| voucher_id |
integer |
ID of the voucher (uploaded file) the statement is attached to |
| voucher_category_id |
integer |
ID of the voucher category |
| item_categories |
string |
One or more item category enum values, separated by commas, semicolons, or spaces. See Item Categories |
| purpose |
string |
Purpose of the expense (enum value). See Purposes |
| participant_information |
string |
Participants involved |
| additional_information |
string |
Additional notes |
| payment_method |
string |
Payment method. See Payment Methods |
| payor_id |
integer |
ID of the business partner that paid |
| project_id |
integer |
ID of the related project |
| collection_id |
integer |
ID of the related voucher collection |
Relations
| Relation |
Type |
Description |
| created_by |
User |
The user that created the statement |
| payor |
Business Partner |
The business partner that paid |
| project |
Project |
The related project |
| collection |
Voucher Collection |
The voucher collection the statement belongs to |
| tags |
Tag[] |
Tags applied to the statement |
Relations are opt-in. Request them through with, e.g. ?with=payor,project,tags.
Error Responses
| Status |
Description |
| 400 |
Validation error — Invalid purpose, Invalid item category, or a tag that does not exist or belongs to a different client account |
| 403 |
Voucher belongs to a client account the user cannot access |
| 404 |
Voucher not found |