API · v1 · stabil
CODEMETA OSDeveloper Center
Konsole öffnen
Entity · articles

Article Schema

Schema-ID
article
Collection
articles
Permissions
  • Lesenarticle_view
  • Anlegenarticle_create
  • Ändernarticle_edit
  • Löschenarticle_delete

Felder

Article Schema

articles4 Permissions

Schema for validating article entities (products, services, bundles, BOM)

articleNumberstringoptional

Internal sequenced article number (e.g. A-2026-00042)

max 1000 ZeichenDefault: nullnullable
namestringerforderlich

Article name

1–300 Zeichen
matchCodestringoptional

Quick search code / abbreviation

max 1000 ZeichenDefault: nullnullable
descriptionstringoptional

Article description (plain text). Used as legacy fallback when no linked product description exists. New marketing copy belongs on the linked product. See ADR 0094c.

max 4000 Zeichennullable
descriptionHtmlstringoptional

DEPRECATED — long marketing descriptions are sourced from product.descriptionHtml in the customer-portal shop. Kept as a legacy fallback for articles without a linked product; will be removed in a future release. See ADR 0094c.

nullable
longTextstringoptional

DEPRECATED — long marketing descriptions are sourced from product.descriptionHtml in the customer-portal shop. Kept as a legacy fallback; will be removed in a future release. See ADR 0094c.

Default: nullnullable
shortDescriptionstringoptional

Short description for list views and shop cards

max 500 ZeichenDefault: nullnullable
shortDescription2stringoptional

Secondary short description line

max 500 ZeichenDefault: nullnullable
skustringoptional

External article number / EAN (legacy field)

max 50 Zeichennullable
eanstringoptional

EAN/GTIN barcode

max 18 ZeichenDefault: nullnullable
barcodestringoptional

Generic barcode payload (Code128, QR, …)

max 4000 ZeichenDefault: nullnullable
manufacturerPartNumberstringoptional

Manufacturer part number (Herstellernummer)

max 300 ZeichenDefault: nullnullable
articleTypestringerforderlich

Article type. STOCK_TRACKED = Bestandsführend (warehouse stock managed), BASIC = Basisartikel (no stock tracking), SERVICE = Dienstleistung, SHIPPING_COST = Versandkosten, SALES_BILL_OF_MATERIAL = Verkaufsstückliste

STOCK_TRACKEDBASICSERVICESHIPPING_COSTSALES_BILL_OF_MATERIAL
articleCategoryIduuidoptional

Article category UUID

nullable
weclappArticleCategoryIdstringoptional

weclapp's own article-category id, copied verbatim from the source article. Deliberately NOT stored in `articleCategoryId`: that field holds a local `article_categories` UUID, and a weclapp id (e.g. "7035") fails its UUID pattern. Order-intake rules (ADR 0285) match against this field for weclapp-sourced articles.

max 64 Zeichennullable
articleCategoryNamestringoptional

Human-readable name of the source system's article category (weclapp `articleCategory.name`, max 120 there). Denormalized for display and so a category stays identifiable if the source id is ever re-keyed.

max 120 Zeichennullable
productIduuidoptional

Product UUID (links article to a product in the portfolio)

nullable
statusstringoptional

Lifecycle status of the article

nullDRAFTACTIVEDISCONTINUEDDEPRECATED
Default: nullnullable
tagsstring[]optional

Tags for categorization

Default: []
manufacturerstringoptional

Manufacturer / brand (free text). Optional override for OEM cases — when empty, the linked product.manufacturer is used. See ADR 0094a.

max 300 ZeichenDefault: nullnullable
manufacturerIdstringoptional

Optional FK to manufacturer party (vendor)

PatternDefault: nullnullable
taxRateTypestringoptional

VAT category — maps to current rate via tax-config

nullSTANDARDREDUCEDSUPER_REDUCEDZERO
Default: nullnullable
unitIdstringoptional

Reference to units collection (Stück, h, kg, …)

PatternDefault: nullnullable
unitLabelstringoptional

Unit label (e.g. "pro Benutzer", "pro Gerät") — fallback for unitId

max 100 Zeichennullable
minQuantityintegeroptional

Minimum sales order quantity

≥ 1Default: 1
maxQuantityintegeroptional

Maximum sales order quantity (null = unlimited)

≥ 1nullable
quantityStepintegeroptional

Order quantity step (e.g. 5-packs)

≥ 1Default: 1
minimumPurchaseQuantitystringoptional

Minimum purchase order quantity

PatternDefault: nullnullable
fixedPurchaseQuantitystringoptional

Fixed purchase quantity — orders must be exactly this value

PatternDefault: nullnullable
packagingQuantityintegeroptional

Quantity per packaging unit (VPE)

≥ 1Default: nullnullable
quantityConversionsobject[]optional

Unit conversions (e.g. 1 carton = 12 pcs)

Default: []
iduuiderforderlich
fromUnitIduuiderforderlich
toUnitIduuiderforderlich
factorstringerforderlich
Pattern
oppositeDirectionbooleanoptional
Default: false
articlePricesobject[]optional

Article prices with optional customer/tier/date specificity

Default: []
iduuiderforderlich
pricestringerforderlich

Price value

Pattern
priceScaleTypestringoptional

UNIT=per unit, FIXED=fixed total, TIERED/SCALE_FROM=tier from quantity, SCALE_TO=tier up to quantity

UNITFIXEDTIEREDSCALE_FROMSCALE_TO
Default: "UNIT"
priceScaleValuestringoptional

Quantity threshold for tiered pricing

PatternDefault: "1"
currencyCodestringoptional

ISO 4217 currency code

PatternDefault: "EUR"
partyIduuidoptional

Customer-specific price (null = default price)

nullable
descriptionstringoptional

Price description (e.g. "Enterprise discount")

max 255 Zeichennullable
startDatedateoptional

Price valid from (YYYY-MM-DD)

nullable
endDatedateoptional

Price valid until (YYYY-MM-DD)

nullable
salesChannelstringoptional

Sales channel code (free-form, e.g. "WEB", "B2B", "RETAIL")

max 50 ZeichenDefault: nullnullable
reductionAdditionsobject[]optional

Surcharges / reductions applied on top of price

Default: []
iduuiderforderlich
namestringerforderlich
max 1000 Zeichen
typestringerforderlich
ADDITION_PERCENTADDITION_ABSOLUTEREDUCTION_PERCENTREDUCTION_ABSOLUTE
valuestringerforderlich
Pattern
sortOrderintegeroptional
≥ 0Default: 0
articleCalculationPricesobject[]optional

Calculation prices (Kalkulationspreise + UVP) over time

Default: []
iduuiderforderlich
typestringerforderlich

Calculation price (Kalkulationspreis) or RRP (UVP)

CALCULATION_PRICERECOMMENDED_RETAIL_PRICE
pricestringerforderlich
Pattern
currencyCodestringoptional
PatternDefault: "EUR"
startDatedateoptional
Default: nullnullable
endDatedateoptional
Default: nullnullable
salesChannelstringoptional
max 50 ZeichenDefault: nullnullable
purchasePricestringoptional

Purchase / cost price (EK-Preis, internal only)

PatternDefault: nullnullable
recommendedRetailPricestringoptional

Recommended retail price (UVP) — quick top-level value

PatternDefault: nullnullable
priceOnRequestbooleanoptional

When true, the customer-portal shop hides the resolved price and shows "Preis auf Anfrage" with a "Angebot anfragen" CTA, regardless of articlePrices/recommendedRetailPrice. Use this for high-touch B2B SKUs where pricing is negotiated per customer.

Default: false
defaultPriceCalculationTypestringoptional

Which price source is used as the default in offers

nullPURCHASESALESMARGIN_CALCULATIONRECOMMENDED_RETAIL_PRICE
Default: nullnullable
marginCalculationPriceTypestringoptional

Cost basis for margin calculation

nullPURCHASE_PRICE_PRODUCTION_COSTMOVING_AVERAGEARTICLE_CALCULATION_PRICEEMPLOYEE_COST
Default: nullnullable
commissionRatestringoptional

Commission rate in percent

PatternDefault: nullnullable
applyCashDiscountbooleanoptional

Whether cash discount (Skonto) applies

Default: true
billingIntervalstringoptional

Default billing interval (for recurring services)

MONTHLYQUARTERLYSEMI_ANNUALYEARLYONE_TIME
nullable
tracksInPortfoliobooleanoptional

Whether sales of this article should be reflected in the customer portfolio (party_product). null = inferred at runtime (true when billingInterval is set and not ONE_TIME, or articleType=SERVICE; false otherwise). Explicit true/false overrides the heuristic. See portfolio reconcile worker.

Default: nullnullable
setupFeestringoptional

One-time setup fee

Patternnullable
invoicingTypestringoptional

EFFORT = invoice by effort, FIXED_PRICE = fixed quote

nullEFFORTFIXED_PRICE
Default: nullnullable
activebooleanoptional

Whether article is active

Default: true
availableInSalebooleanoptional

Available in portal / sales

Default: false
availableForPartyIdsuuid[]optional

Restrict to specific customers (null = all)

nullable
requiresApprovalbooleanoptional

Order requires MSP approval

Default: false
leadTimeDaysintegeroptional

Estimated delivery time in days

≥ 0nullable
salesChannelsstring[]optional

Free-form sales channel codes the article is available in

Default: []
useAvailableForSalesChannelsbooleanoptional

Whether `salesChannels` should be enforced

Default: false
showOnDeliveryNotebooleanoptional

Whether the article appears on the delivery note

Default: true
recordItemGroupNamestringoptional

Document item group (Belegpositionsgruppe, e.g. "Hardware", "Service")

max 1000 ZeichenDefault: nullnullable
defineIndividualTaskTemplatesbooleanoptional

Whether the article uses individual task templates

Default: false
minimumStockQuantitystringoptional

Minimum stock level (Mindestbestand)

PatternDefault: nullnullable
targetStockQuantitystringoptional

Target stock level (Sollbestand)

PatternDefault: nullnullable
safetyStockDaysintegeroptional

Safety stock in days of consumption

≥ 0Default: nullnullable
procurementLeadDaysintegeroptional

Procurement lead time in days (Wiederbeschaffungszeit)

≥ 0Default: nullnullable
averageDeliveryTimeintegeroptional

Average delivery time in days

≥ 0Default: nullnullable
serialNumberRequiredbooleanoptional

Whether serial numbers are mandatory for this article

Default: false
batchNumberRequiredbooleanoptional

Whether batch/lot numbers are mandatory

Default: false
articleAlternativeQuantitiesobject[]optional

Per-warehouse stock thresholds

Default: []
iduuiderforderlich
warehouseIduuiderforderlich
minimumOrderQuantitystringoptional
PatternDefault: nullnullable
minimumStockQuantitystringoptional
PatternDefault: nullnullable
targetStockQuantitystringoptional
PatternDefault: nullnullable
defaultStoragePlaceIdsuuid[]optional

Default storage places (Lagerplätze) for replenishment

Default: []
supplySourcesobject[]optional

Supply sources (Bezugsquellen)

Default: []
iduuiderforderlich
supplierIdstringoptional

FK to party (vendor)

PatternDefault: nullnullable
supplierNamestringoptional

Denormalized supplier name

max 300 ZeichenDefault: nullnullable
supplierArticleNumberstringoptional

Supplier’s article number

max 200 ZeichenDefault: nullnullable
purchasePricestringoptional
PatternDefault: nullnullable
currencyCodestringoptional
PatternDefault: "EUR"
minimumPurchaseQuantitystringoptional
PatternDefault: nullnullable
leadTimeDaysintegeroptional
≥ 0Default: nullnullable
isPrimarybooleanoptional
Default: false
sortOrderintegeroptional
≥ 0Default: 0
primarySupplySourceIdstringoptional

FK to the primary supplySource entry

PatternDefault: nullnullable
purchaseCostCenterstringoptional

Purchase cost center label

max 100 ZeichenDefault: nullnullable
salesBillOfMaterialItemsobject[]optional

Sales bill of material items (bundle components)

Default: []
iduuiderforderlich
articleIduuiderforderlich
articleNamestringoptional
nullable
quantitystringoptional
PatternDefault: "1"
isOptionalbooleanoptional
Default: false
isIncludedbooleanoptional
Default: true
unitPriceOverridestringoptional
Patternnullable
discountPercentstringoptional
Patternnullable
positionNumberintegererforderlich
≥ 0
useSalesBillOfMaterialItemPricesbooleanoptional

true: bundle price = sum of item prices, false: own price from articlePrices

Default: false
useSalesBillOfMaterialItemPricesForPurchasebooleanoptional

true: bundle purchase price = sum of subitem purchase prices, false: own purchasePrice. Mirrors weclapp `useSalesBillOfMaterialItemPricesForPurchase` — applies to procurement (EK), independent of the sales-side flag above.

Default: false
useSalesBillOfMaterialSubitemCostsbooleanoptional

true: include subitem costs (margin calculation, costing) when computing this bundle’s cost basis. Mirrors weclapp `useSalesBillOfMaterialSubitemCosts`. When false, the bundle’s own purchasePrice / calculation price is used as cost basis.

Default: false
productionBillOfMaterialItemsobject[]optional

Production bill of material items

Default: []
iduuiderforderlich
articleIduuiderforderlich
articleNamestringoptional
nullable
quantitystringoptional
PatternDefault: "1"
positionNumberintegererforderlich
≥ 0
productionArticlebooleanoptional

Whether the article is produced in-house

Default: false
productionConfigurationRulestringoptional

How BOM components are configured at order time

nullALL_COMPONENTSAT_LEAST_ONE_COMPONENTAT_LEAST_ONE_COMPONENT_WITH_VARIABLE_QUANTITYONE_COMPONENTONE_COMPONENT_WITH_VARIABLE_QUANTITY
Default: nullnullable
lowLevelCodeintegeroptional

BOM nesting depth (computed, read-only)

≥ 0Default: nullread-onlynullable
plannedWorkingTimePerUnitintegeroptional

Planned working time per produced unit (minutes)

≥ 0Default: nullnullable
producerTypestringoptional

Producer type / classification

max 63 ZeichenDefault: nullnullable
articleNetWeightstringoptional

Net weight

PatternDefault: nullnullable
articleGrossWeightstringoptional

Gross weight

PatternDefault: nullnullable
weightUnitstringoptional

Weight unit

nullKGGLBOZ
Default: "KG"nullable
articleLengthstringoptional
PatternDefault: nullnullable
articleWidthstringoptional
PatternDefault: nullnullable
articleHeightstringoptional
PatternDefault: nullnullable
dimensionUnitstringoptional

Length / width / height unit

nullCMMMMINCH
Default: "CM"nullable
countryOfOriginCodestringoptional

ISO 3166-1 alpha-2 country code

PatternDefault: nullnullable
customsTariffNumberstringoptional

Customs tariff number (Zolltarifnummer)

max 50 ZeichenDefault: nullnullable
customsDescriptionstringoptional

Customs description

max 256 ZeichenDefault: nullnullable
revenueAccountCodestringoptional

Revenue account code for DATEV (Erlöskonto, e.g. "8400")

max 20 ZeichenDefault: nullnullable
expenseAccountCodestringoptional

Expense account code for DATEV (Aufwandskonto, e.g. "4900")

max 20 ZeichenDefault: nullnullable
accountingCodestringoptional

Accounting code / Buchungskreis

max 50 ZeichenDefault: nullnullable
salesCostCenterstringoptional

Sales cost center label

max 100 ZeichenDefault: nullnullable
launchDatedateoptional

Launch date / market introduction (YYYY-MM-DD)

Default: nullnullable
sellFromDatedateoptional

Available for sale from this date

Default: nullnullable
sellByDatedateoptional

Available for sale until this date

Default: nullnullable
supportUntilDatedateoptional

Support / maintenance end date (relevant for licenses & hardware)

Default: nullnullable
expirationDaysintegeroptional

Shelf life in days from procurement

≥ 0Default: nullnullable
imageS3Keystringoptional

DEPRECATED — primary product image S3 key (legacy single-image field). Use imageFileIds; will be removed in a future release.

nullable
imageFileIdsuuid[]optional

Variant-specific image file IDs (resolved via /api/v1/files/{fileId}/download-url). When non-empty, these override the linked product.imageFileIds in the customer-portal gallery. Leave empty to inherit the product gallery. See ADR 0094a.

Default: []
attachmentFileIdsuuid[]optional

Variant-specific non-image attachments. Cluster-wide datasheets, manuals and certificates belong on product.documents (richer metadata) or product.attachmentFileIds. In the customer-portal Downloads tab these are rendered as a separate "variant-specific" section. See ADR 0094a.

Default: []
attributesobject[]optional

Flexible variant-specific key-value attributes (e.g. RAM, display size). Cluster-wide grouped specs belong on product.technicalSpecs. See ADR 0094a.

Default: []
keystringerforderlich
max 100 Zeichen
labelstringerforderlich
max 200 Zeichen
valuestringerforderlich
max 500 Zeichen
customerArticleNumbersobject[]optional

Customer-specific article numbers (B2B)

Default: []
iduuiderforderlich
partyIduuiderforderlich
articleNumberstringerforderlich
max 200 Zeichen
descriptionstringoptional
max 500 ZeichenDefault: nullnullable
internalNotestringoptional

Internal note (not visible in portal)

max 4000 Zeichennullable
sortOrderintegeroptional

Display sort order

≥ 0Default: 0

Standard-Endpoints

Diese Resource folgt dem generischen CRUD-Vertrag der Plattform. Lesen Sie die Konventionen für Pagination, Idempotenz, Optimistic Locking und Audit. Die wichtigsten Endpoints:

  • GET /api/v1/articles — Liste, paginiert + filterbar
  • GET /api/v1/articles/<id> — Einzelne Entity
  • POST /api/v1/articles — Anlegen
  • PATCH /api/v1/articles/<id> — Teil-Update
  • DELETE /api/v1/articles/<id> — Soft-Delete
  • GET /api/v1/articles/<id>/timeline — Audit + Aktivitäten

Suche