Zum Hauptinhalt springen
← API-Referenz

Das Dokument order.v1

Jede Bestellung, die der Configurator erfasst, ist ein signiertes Dokument order.v1: der Workflow, in dem sie entstand, die Zuschnittliste, der Produktionsplan, das bepreiste Angebot mit seinem Token und ihre Herkunft. Es enthält keine personenbezogenen Daten, nur Ihre undurchsichtige customerRef.

Pfade, Feldnamen, Fehlercodes, Header-Namen und Codebeispiele bleiben englisch: Sie sind der Vertrag.

Regeln, die für jede Bestellung gelten

  • Jede Länge ist in Millimetern; unit ist nur die Anzeigeeinheit.
  • Jeder Betrag ist Money in ganzen kleinsten Währungseinheiten, und jede Währung entspricht der currency der Bestellung.
  • Eine Bestellung ist ein Workflow: workflow.mode bestimmt die Form der Zuschnittliste und des Plans (heute panel2d).
  • plan.planHash ist der SHA-256 des kanonischen Plans; das Angebots-Token bindet ihn, sodass ein geänderter Plan erkannt wird.
  • Das Dokument ist geschlossen und innerhalb von v1 nur erweiterbar: Neue Felder sind optional, nichts wird entfernt oder umbenannt.

Felder

Die Tabellen unten werden aus dem JSON Schema selbst erzeugt; dasselbe Schema ist unverändert in das OpenAPI-Dokument eingebettet.

Die Beschreibungen in dieser Tabelle stammen aus dem englischen Vertrag (dem JSON Schema oder dem OpenAPI-Dokument).

Order

FeldTypPflichtBeschreibung
schemaVersion1ja—
idempotencyKeystringjaThe caller's replay key for POST /cfg/v1/order (P2-09): the same key returns the same order.
tenantIdstringja—
configVersionintegerjaThe tenant-config snapshot this order was priced against. Capped at 2^53−1 (one JSON text per integer, so one hash / token claim per version).
workflowWorkflowja—
customerRefstringneinOpaque reference into the merchant's own customer records. Never a name or an address.
customerGroupstringneinThe tenant-config customer group the price list was chosen for.
locale"en" | "de" | "it" | "fr" | "pl" | "cs" | "ro" | "hu" | "es" | "hr"ja—
unit"mm" | "cm" | "in"jaDisplay unit at ordering time; every length in this document is millimetres.
currencystringja—
pricingMode"platform" | "external"ja—
createdAtstringja—
expiresAtstringjaQuote validity; equals the token's exp.
sourceSourceja—
cutListCutPart[]jaMODE-DISCRIMINATED by workflow.mode (Order.allOf). One branch today: panel2d CutPart.
fullSheetsFullSheetItem[]jaFull stock units bought uncut. MODE-DISCRIMINATED; panel2d: whole sheets.
hardwareHardwareLine[]jaMode-independent (catalogue hardware).
bondedPanelsBondedPanel[]neinGlued multi-layer panels (P5-05). MODE-DISCRIMINATED; panel2d only today. Shape may gain optional fields there; this is the v1 minimum.
planPlanjaMODE-DISCRIMINATED; the plan carries its own `mode` tag (= workflow.mode), covered by planHash.
quoteQuoteja—
shippingOrderShippingnein—
filesFileRef[]nein—
signatureSignaturenein—

Workflow

The tenant workflow this order was made in (tenant-config.v1 workflows[].id, or `default` for the implicit workflow). `mode` and `profile` are repeated so a consumer can dispatch without fetching the config; the quote token binds `id` and `mode`.

FeldTypPflichtBeschreibung
idstringja—
mode"panel2d"jaA BUILT mode (x-cfg-modes.built). Reserved ⇒ `mode_unavailable`; unknown ⇒ `enum`.
profile"furniture"ja—

Source

Provenance: which embed build collected the list, which engine version produced the plan, which config snapshot priced it.

FeldTypPflichtBeschreibung
embedVersionstringja—
engineVersionstringja= plan.engineVersion (the Engine API's engineVersion).
configVersionintegerja= $.configVersion.

CutPart

panel2d cut-list row = Engine API ApiPart2D (name, w, h, qty, rotatable, grain, grainGroup, priority, edgeBanding, material, meta) + the order's own id, group and machining. name/qty/material are REQUIRED here (optional on the API).

FeldTypPflichtBeschreibung
idstringja—
namestringjaNo C0/C1 control characters (audit P7-01 F1: a newline in a name wrote DXF entities).
wnumberjaThe size the engine was given (after the tenant's dimension convention / edging deduction were applied).
hnumberja—
qtyintegerja—
materialstringjaCatalogue MaterialItem.id (the API's material partition key).
rotatablebooleannein—
grain"w" | "h"nein—
grainGroupstringnein—
prioritybooleannein—
edgeBandingEdgeBandingnein—
metaobjectneinOpaque passthrough (= ApiPart2D.meta), ≤ 2048 bytes canonical.
groupstringneinRoom / cabinet / project the customer assigned; printed on labels and exports.
machiningMachiningOp[]nein—

EdgeBanding

Per-edge banding TYPE references (catalogue EdgingItem.id); an absent side is not banded (= ApiPart2D.edgeBanding).

FeldTypPflichtBeschreibung
topstringnein—
rightstringnein—
bottomstringnein—
leftstringnein—

MachiningOp

A machining operation on the part (catalogue MachiningType.id). `params` stays open in v1; P5-04 types its known keys additively (see params).

FeldTypPflichtBeschreibung
typeIdstringja—
qtyintegerja—
paramsobjectneinOpen object; the KNOWN keys are typed (P5-04, additive): corner, measure, xMm, yMm, diameterMm, radiusMm, lengthMm, widthMm, depthMm. Per catalogue kind: hole/hinge = corner+measure+xMm+yMm+diameterMm[+depthMm]; groove = corner(top-left|top-right)+xMm+lengthMm[+widthMm+depthMm]; radius = corner+radiusMm. Any other key stays valid.

FullSheetItem

FeldTypPflichtBeschreibung
materialIdstringja—
wnumberja—
hnumberja—
qtyintegerja—

HardwareLine

FeldTypPflichtBeschreibung
hardwareIdstringja—
qtyintegerja—

BondedPanel

FeldTypPflichtBeschreibung
idstringja—
wnumberja—
hnumberja—
qtyintegerja—
layersBondedLayer[]ja—
namestringnein—

BondedLayer

FeldTypPflichtBeschreibung
materialIdstringja—
thicknessMmnumberja—

Plan

The panel2d production plan as the Engine API returned it (ApiOptimize2DResponse fields), plus the `mode` tag and planHash. Numbers are the engine's own, in millimetres; sheets[].price / metrics.totalPrice are the engine's unit-less price fields, NOT money (prices live in `quote`).

FeldTypPflichtBeschreibung
mode"panel2d"jaThe mode tag — INSIDE the plan so planHash covers it; must equal $.workflow.mode (D15).
engine"heuristic" | "balanced" | "max"ja—
engineVersionstringja—
deterministicbooleanja—
sheetsSheet[]ja—
metricsMetrics2Dja—
cutPlanarray | nulljanull when the layout is not guillotine.
unplacedUnplaced2D[]ja—
warningsstring[]ja—
guillotineValidbooleanja—
planHashstringjasha256 hex of canonicalize(plan without planHash) — RFC 8785; covers `mode`.

Sheet

= ApiSheet (types.ts).

FeldTypPflichtBeschreibung
wnumberja—
hnumberja—
pricenumber | nulljaThe engine's unit-less per-sheet price; the issuer passes null.
partsPlacedPart2D[]ja—
offcutsRect[]nein—
materialstringnein—
grain"w" | "h"nein—
metaobjectnein—

PlacedPart2D

= ApiPlacedPart2D (types.ts).

FeldTypPflichtBeschreibung
namestringja—
xnumberja—
ynumberja—
wnumberja—
hnumberja—
rotatedbooleanja—
metaobjectnein—

Rect

= ApiRect (types.ts).

FeldTypPflichtBeschreibung
xnumberja—
ynumberja—
wnumberja—
hnumberja—

Metrics2D

= ApiMetrics2D (types.ts), unchanged: cutLines (collinear cuts merged), sawPasses (every strip crossed), cutLength (mm, convention-independent).

FeldTypPflichtBeschreibung
sheetCountintegerja—
yieldPctnumberja—
placedintegerja—
totalintegerja—
cutLinesintegerja—
sawPassesintegerja—
cutLengthnumberja—
totalPricenumberja—

CutStep

= ApiCutStep (types.ts): sheet is the 0-based index into plan.sheets, step restarts at 1 per sheet, stage is the 1-based machine pass.

FeldTypPflichtBeschreibung
sheetintegerja—
stepintegerja—
axis"h" | "v"ja—
posnumberja—
lengthnumberja—
stageintegerja—

Unplaced2D

= ApiUnplaced2D (types.ts).

FeldTypPflichtBeschreibung
namestringja—
wnumberja—
hnumberja—
qtyintegerja—

Quote

FeldTypPflichtBeschreibung
pricedbooleanjafalse under pricingMode = external: lines carry quantities, every amount is 0.
linesQuoteLine[]ja—
totalsTotalsja—
quoteTokenstringjaSee x-cfg-quote-token. The merchant's server verifies it with the tenant's key (P4-02 /quote/verify).

QuoteLine

FeldTypPflichtBeschreibung
idstringja—
type"cutPart" | "fullSheet" | "hardware" | "machining" | "bondedPanel" | "edging" | "surcharge" | "shipping" | "tax"ja—
labelstringja—
qtynumberjaPieces, sheets, metres (edging) — the line's own unit.
unitAmountMoneyja—
amountMoneyjaLine total after the tenant's rounding. Σ non-tax amounts = totals.net.
refLineRefnein—
metaobjectnein—

LineRef

What the line prices. At least one id when present.

FeldTypPflichtBeschreibung
partIdstringnein—
materialIdstringnein—
edgingIdstringnein—
hardwareIdstringnein—
machiningIdstringnein—
zoneIdstringnein—
ruleIdstringnein—
bondedPanelIdstringnein—

Totals

FeldTypPflichtBeschreibung
netMoneyja—
taxMoneyja—
grossMoneyja—

Money

FeldTypPflichtBeschreibung
amountMinorintegerja—
currencystringja—

OrderShipping

Ids only — the delivery address is the merchant shop's data, not the contract's.

FeldTypPflichtBeschreibung
method"delivery" | "pickup"ja—
zoneIdstringnein—
pickupLocationIdstringnein—

FileRef

FeldTypPflichtBeschreibung
kind"pdf" | "labels" | "csv" | "dxf" | "svg" | "xlsx" | "json"ja—
urlstringja—
sha256stringnein—
bytesintegernein—

Signature

HMAC-SHA256 over canonicalize(order without signature). keyId names the tenant key (P2-07: derived from a master, the DB holds only the id).

FeldTypPflichtBeschreibung
alg"HMAC-SHA256"ja—
keyIdstringja—
valuestringja—

Eine Schaltfläche "Ausprobieren" gibt es hier mit Absicht nicht: Der geheime Schlüssel gehört auf Ihren Server, nie in einen Browser. Der Demo-Shop zeigt Einbettung und Bestellübergabe von Anfang bis Ende.

RechtlichesKonfigurator-Bedingungen (EN) ·Auftragsverarbeitungsvertrag (EN) ·Datenschutzhinweis für Käufer ·Drittanbieter-Lizenzen (EN)