Article Schema
Felder
Article Schema
Schema for validating article entities (products, services, bundles, BOM)
articleNumber
Internal sequenced article number (e.g. A-2026-00042)
name
Article name
matchCode
Quick search code / abbreviation
description
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.
descriptionHtml
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.
longText
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.
shortDescription
Short description for list views and shop cards
shortDescription2
Secondary short description line
sku
External article number / EAN (legacy field)
ean
EAN/GTIN barcode
barcode
Generic barcode payload (Code128, QR, …)
manufacturerPartNumber
Manufacturer part number (Herstellernummer)
articleType
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_MATERIALarticleCategoryId
Article category UUID
weclappArticleCategoryId
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.
articleCategoryName
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.
productId
Product UUID (links article to a product in the portfolio)
status
Lifecycle status of the article
nullDRAFTACTIVEDISCONTINUEDDEPRECATEDtags
Tags for categorization
manufacturer
Manufacturer / brand (free text). Optional override for OEM cases — when empty, the linked product.manufacturer is used. See ADR 0094a.
manufacturerId
Optional FK to manufacturer party (vendor)
taxRateType
VAT category — maps to current rate via tax-config
nullSTANDARDREDUCEDSUPER_REDUCEDZEROunitId
Reference to units collection (Stück, h, kg, …)
unitLabel
Unit label (e.g. "pro Benutzer", "pro Gerät") — fallback for unitId
minQuantity
Minimum sales order quantity
maxQuantity
Maximum sales order quantity (null = unlimited)
quantityStep
Order quantity step (e.g. 5-packs)
minimumPurchaseQuantity
Minimum purchase order quantity
fixedPurchaseQuantity
Fixed purchase quantity — orders must be exactly this value
packagingQuantity
Quantity per packaging unit (VPE)
quantityConversions
Unit conversions (e.g. 1 carton = 12 pcs)
articlePrices
Article prices with optional customer/tier/date specificity
price
Price value
priceScaleType
UNIT=per unit, FIXED=fixed total, TIERED/SCALE_FROM=tier from quantity, SCALE_TO=tier up to quantity
UNITFIXEDTIEREDSCALE_FROMSCALE_TOpriceScaleValue
Quantity threshold for tiered pricing
currencyCode
ISO 4217 currency code
partyId
Customer-specific price (null = default price)
description
Price description (e.g. "Enterprise discount")
startDate
Price valid from (YYYY-MM-DD)
endDate
Price valid until (YYYY-MM-DD)
salesChannel
Sales channel code (free-form, e.g. "WEB", "B2B", "RETAIL")
sortOrder
articleCalculationPrices
Calculation prices (Kalkulationspreise + UVP) over time
type
Calculation price (Kalkulationspreis) or RRP (UVP)
CALCULATION_PRICERECOMMENDED_RETAIL_PRICEprice
currencyCode
startDate
endDate
salesChannel
purchasePrice
Purchase / cost price (EK-Preis, internal only)
recommendedRetailPrice
Recommended retail price (UVP) — quick top-level value
priceOnRequest
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.
defaultPriceCalculationType
Which price source is used as the default in offers
nullPURCHASESALESMARGIN_CALCULATIONRECOMMENDED_RETAIL_PRICEmarginCalculationPriceType
Cost basis for margin calculation
nullPURCHASE_PRICE_PRODUCTION_COSTMOVING_AVERAGEARTICLE_CALCULATION_PRICEEMPLOYEE_COSTcommissionRate
Commission rate in percent
applyCashDiscount
Whether cash discount (Skonto) applies
billingInterval
Default billing interval (for recurring services)
MONTHLYQUARTERLYSEMI_ANNUALYEARLYONE_TIMEtracksInPortfolio
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.
setupFee
One-time setup fee
invoicingType
EFFORT = invoice by effort, FIXED_PRICE = fixed quote
nullEFFORTFIXED_PRICEactive
Whether article is active
availableInSale
Available in portal / sales
availableForPartyIds
Restrict to specific customers (null = all)
requiresApproval
Order requires MSP approval
leadTimeDays
Estimated delivery time in days
salesChannels
Free-form sales channel codes the article is available in
useAvailableForSalesChannels
Whether `salesChannels` should be enforced
showOnDeliveryNote
Whether the article appears on the delivery note
recordItemGroupName
Document item group (Belegpositionsgruppe, e.g. "Hardware", "Service")
defineIndividualTaskTemplates
Whether the article uses individual task templates
minimumStockQuantity
Minimum stock level (Mindestbestand)
targetStockQuantity
Target stock level (Sollbestand)
safetyStockDays
Safety stock in days of consumption
procurementLeadDays
Procurement lead time in days (Wiederbeschaffungszeit)
averageDeliveryTime
Average delivery time in days
serialNumberRequired
Whether serial numbers are mandatory for this article
batchNumberRequired
Whether batch/lot numbers are mandatory
articleAlternativeQuantities
Per-warehouse stock thresholds
minimumOrderQuantity
minimumStockQuantity
targetStockQuantity
defaultStoragePlaceIds
Default storage places (Lagerplätze) for replenishment
supplySources
Supply sources (Bezugsquellen)
supplierId
FK to party (vendor)
supplierName
Denormalized supplier name
supplierArticleNumber
Supplier’s article number
purchasePrice
currencyCode
minimumPurchaseQuantity
leadTimeDays
isPrimary
sortOrder
primarySupplySourceId
FK to the primary supplySource entry
purchaseCostCenter
Purchase cost center label
salesBillOfMaterialItems
Sales bill of material items (bundle components)
articleName
quantity
isOptional
isIncluded
unitPriceOverride
discountPercent
useSalesBillOfMaterialItemPrices
true: bundle price = sum of item prices, false: own price from articlePrices
useSalesBillOfMaterialItemPricesForPurchase
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.
useSalesBillOfMaterialSubitemCosts
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.
productionBillOfMaterialItems
Production bill of material items
productionArticle
Whether the article is produced in-house
productionConfigurationRule
How BOM components are configured at order time
nullALL_COMPONENTSAT_LEAST_ONE_COMPONENTAT_LEAST_ONE_COMPONENT_WITH_VARIABLE_QUANTITYONE_COMPONENTONE_COMPONENT_WITH_VARIABLE_QUANTITYlowLevelCode
BOM nesting depth (computed, read-only)
plannedWorkingTimePerUnit
Planned working time per produced unit (minutes)
producerType
Producer type / classification
articleNetWeight
Net weight
articleGrossWeight
Gross weight
weightUnit
Weight unit
nullKGGLBOZarticleLength
articleWidth
articleHeight
dimensionUnit
Length / width / height unit
nullCMMMMINCHcountryOfOriginCode
ISO 3166-1 alpha-2 country code
customsTariffNumber
Customs tariff number (Zolltarifnummer)
customsDescription
Customs description
revenueAccountCode
Revenue account code for DATEV (Erlöskonto, e.g. "8400")
expenseAccountCode
Expense account code for DATEV (Aufwandskonto, e.g. "4900")
accountingCode
Accounting code / Buchungskreis
salesCostCenter
Sales cost center label
launchDate
Launch date / market introduction (YYYY-MM-DD)
sellFromDate
Available for sale from this date
sellByDate
Available for sale until this date
supportUntilDate
Support / maintenance end date (relevant for licenses & hardware)
expirationDays
Shelf life in days from procurement
imageS3Key
DEPRECATED — primary product image S3 key (legacy single-image field). Use imageFileIds; will be removed in a future release.
imageFileIds
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.
attachmentFileIds
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.
customerArticleNumbers
Customer-specific article numbers (B2B)
internalNote
Internal note (not visible in portal)
sortOrder
Display sort order
Keine Felder passen zum Filter.
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 + filterbarGET /api/v1/articles/<id>— Einzelne EntityPOST /api/v1/articles— AnlegenPATCH /api/v1/articles/<id>— Teil-UpdateDELETE /api/v1/articles/<id>— Soft-DeleteGET /api/v1/articles/<id>/timeline— Audit + Aktivitäten