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

Customer Bundle Schema

Schema-ID
customer_bundle
Collection
customer_bundles
Permissions
  • Lesencustomer_bundle_view
  • Anlegencustomer_bundle_create
  • Änderncustomer_bundle_edit
  • Löschencustomer_bundle_delete
Beziehungen

Felder

Customer Bundle Schema

customer_bundles4 Permissions

A named, customer-owned collection of articles. Lets MSPs see at a glance which articles are bundled for customer A vs. customer B.

bundleNumberstringoptional

Auto-generated sequence (e.g. PKG-2026-00042). Server-set, read-only.

max 200 ZeichenDefault: nullread-onlynullable
namestringerforderlich

Bundle name (e.g. "Müller-IT-Setup", "Backup-Plus 2026")

1–300 Zeichen
descriptionstringoptional

Bundle description visible internally

max 4000 ZeichenDefault: nullnullable
shortDescriptionstringoptional

Short description shown on shop cards and list views

max 500 ZeichenDefault: nullnullable
descriptionHtmlstringoptional

Rich marketing description (sanitized HTML) for the customer portal product page

Default: nullnullable
partyIduuiderforderlich

Customer (party) the bundle belongs to (primary owner)

read-only
partyNamestringoptional

Denormalized customer name for list-view perf

max 300 ZeichenDefault: nullnullable
availableForPartyIdsuuid[]optional

Additional parties that see this bundle in the customer-portal shop. Owner partyId is implicit; empty list = only owner.

Default: []
visibleToAllCustomersbooleanoptional

When true, every customer with shop access sees this bundle — overrides the per-party `availableForPartyIds` filter. Use for catalog/teaser bundles.

Default: false
ownerHistoryobject[]optional

Append-only audit log of every owner reassignment. Each entry captures who reassigned the bundle from which customer to which, when, and why. Written exclusively by POST /customer_bundles/:id/reassign-owner — direct PATCHes do not append.

Default: []read-only
fromPartyIduuiderforderlich
fromPartyNamestringoptional
max 300 ZeichenDefault: nullnullable
toPartyIduuiderforderlich
toPartyNamestringoptional
max 300 ZeichenDefault: nullnullable
reasonstringerforderlich
3–500 Zeichen
changedAtdatetimeerforderlich
changedByuuiderforderlich
changedByNamestringoptional
max 300 ZeichenDefault: nullnullable
statusstringoptional

Bundle lifecycle state

DRAFTACTIVEEXPIREDCANCELLED
Default: "DRAFT"
validFromdateoptional

Bundle valid from (YYYY-MM-DD)

Default: nullnullable
validUntildateoptional

Bundle valid until (YYYY-MM-DD)

Default: nullnullable
availableInShopbooleanoptional

When true, the bundle appears in the customer-portal shop for the owner party (and any party in availableForPartyIds).

Default: false
imageFileIdsuuid[]optional

Image gallery (resolved via /api/v1/files/{fileId}/download-url). First entry is the hero/cover image.

Default: []
attachmentFileIdsuuid[]optional

Non-image attachments (datasheets, brochures, …) shown on the shop detail page

Default: []
bundleItemsobject[]optional

The articles bundled together for this customer

Default: []
iduuiderforderlich
articleIduuiderforderlich

Referenced article UUID

articleNamestringoptional

Denormalized article name (snapshot at add time)

max 300 ZeichenDefault: nullnullable
articleNumberstringoptional

Denormalized article number

max 200 ZeichenDefault: nullnullable
quantitystringoptional

Quantity of this article in the bundle

PatternDefault: "1"
unitPriceOverridestringoptional

Override the article default price for this customer (gross or net depending on tenant config)

PatternDefault: nullnullable
discountPercentstringoptional

Optional line-level discount percentage (0..100)

PatternDefault: nullnullable
notestringoptional

Free-text note for this line (e.g. installation context)

max 1000 ZeichenDefault: nullnullable
positionNumberintegererforderlich

Display order within the bundle

≥ 0
markupPercentstringoptional

Optional bundle-level markup applied as a percentage of the line subtotal (0..100). Stacks with markupAmount.

PatternDefault: nullnullable
markupAmountstringoptional

Optional bundle-level flat-fee surcharge added on top of the line subtotal (and after markupPercent).

PatternDefault: nullnullable
priceOnRequestbooleanoptional

When true, the customer-portal shop hides the resolved package price and shows "Preis auf Anfrage" with an "Angebot anfragen" CTA, regardless of the computed line/markup total. Bundle orders then route to inquiry mode (opportunity/LEAD). Mirrors article.priceOnRequest for high-touch B2B packages negotiated per customer.

Default: false
sourceTemplateArticleIdstringoptional

Optional FK to a SALES_BILL_OF_MATERIAL article that was used as a template to seed bundleItems

PatternDefault: nullnullable
contractIdstringoptional

Optional FK to the contract this bundle is contracted under

PatternDefault: nullnullable
salesOrderIdstringoptional

Optional FK to the sales order that created this bundle

PatternDefault: nullnullable
internalNotestringoptional

Internal note (not visible in customer portal)

max 4000 ZeichenDefault: nullnullable
tagsstring[]optional

Tags for categorization

Default: []

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

Suche