Articles
Contains data on Articles (products). Articles are structured hierarchically as:
- Article Group
- Article Sub Group
- Article
- Article Sub Group
Storage Location
{customer_id}-article.jsonFields
| Field | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Unique ID. Is integer but stored as string. |
name | string | Yes | Article name. |
customer_id | integer | Yes | Relationship to Customer owning the Article. |
article_num | string | Yes | External reference number, PLU or similar. |
group_id | integer | Yes | Identifier for Article Group. |
group_name | string | Yes | Name of Article Group (denormalized). |
sub_group_id | integer | Yes | Identifier for Article Sub Group. |
sub_group_name | string | Yes | Name of Article Sub Group (denormalized). |
parent_article_id | string | No | v1.1. Reference to parent article (for variant/child articles). |
display_name | string | No | v1.1. Optional display name used on receipts etc. |
article_type | string | No | v1.2. Article type: regular_article, booking_no_show_fee, or bundle. |
bundle_display_mode | string | No | v1.2. Bundle only: how components display (expanded/collapsed). |
bundle_discoverable | boolean | No | v1.2. Bundle only: whether the bundle can be suggested when a component is added. |
prices | array | No | v1.2. Currently-active price rows for the article (see below). Absent when the article has no active price. |
Prices (v1.2)
Each element of prices is an active price row for the article:
| Field | Type | Description |
|---|---|---|
tax_code_id | integer | Tax code identifier. |
tax_pct | integer | Tax (VAT) percentage for the tax code. |
net_price | float | Net price (excluding tax). |
gross_price | float | Gross price (including tax). |
account_id | integer | GL account this price books revenue to. |
saft_basic_id | string | SAF-T classification code of the account (absent when untagged). |
last_modified_at | datetime | When this price row was last changed. |
json
{
"id": "584758",
"customer_id": 10352,
"name": "Latte",
"article_type": "regular_article",
"prices": [
{ "tax_code_id": 2, "tax_pct": 15, "net_price": 54.78, "gross_price": 63,
"account_id": 35116, "saft_basic_id": "04012", "last_modified_at": "2026-05-01T12:00:00" }
]
}Article Hierarchy
Articles are organized in a two-level hierarchy:
Article Group (e.g., "Boller")
└── Article Sub Group (e.g., "Bakst", "Boller")
└── Article (e.g., "Kanelsnurr", "Croissant")This hierarchy enables reporting and analytics at different levels of aggregation.
Example
json
{
"id": "584734",
"customer_id": 10352,
"group_id": 44664,
"group_name": "Boller",
"sub_group_id": 79131,
"sub_group_name": "Boller",
"article_num": "1103",
"name": "Kanelsnurr s"
}Example - Article with Display Name
json
{
"id": "644572",
"customer_id": 10352,
"group_id": 44664,
"group_name": "Boller",
"sub_group_id": 79131,
"sub_group_name": "Boller",
"article_num": "34353",
"name": "Fastelavensbolle med solbær",
"display_name": "Fastelavensbolle med solbær"
}Example - Multiple Articles
json
[
{
"id": "584732",
"customer_id": 10352,
"group_id": 44664,
"group_name": "Boller",
"sub_group_id": 79131,
"sub_group_name": "Boller",
"article_num": "1101",
"name": "Bringebærsnurr"
},
{
"id": "584733",
"customer_id": 10352,
"group_id": 44664,
"group_name": "Boller",
"sub_group_id": 79131,
"sub_group_name": "Boller",
"article_num": "1102",
"name": "Croissant"
},
{
"id": "584758",
"customer_id": 10352,
"group_id": 44665,
"group_name": "Drikke",
"sub_group_id": 79140,
"sub_group_name": "Kaffe",
"article_num": "4202",
"name": "Latte"
}
]Related Entities
- Customers - Parent customer/tenant
- Lines - Order lines reference articles via
article_id - ArticleWaste - Waste records reference articles
- ArticleDynamicStatuses - Article availability status