Sari la conținutul principal
← Referință API

Documentul order.v1

Fiecare comandă înregistrată de Configurator este un document order.v1 semnat: fluxul în care a fost făcută, lista de tăiere, planul de producție, oferta cu preț și tokenul ei și de unde provine. Nu conține date personale, doar customerRef-ul dumneavoastră opac.

Căile, numele câmpurilor, codurile de eroare, numele anteturilor și exemplele de cod rămân în engleză: ele sunt contractul.

Reguli valabile pentru fiecare comandă

  • Fiecare lungime este în milimetri; unit este doar unitatea de afișare.
  • Fiecare sumă este Money în unități minore întregi, iar fiecare monedă este egală cu currency a comenzii.
  • O comandă înseamnă un singur flux: workflow.mode alege forma listei de tăiere și a planului (astăzi panel2d).
  • plan.planHash este SHA-256 al planului canonic; tokenul ofertei îl leagă, astfel că un plan modificat este detectat.
  • Documentul este închis și doar aditiv în v1: câmpurile noi sunt opționale, nimic nu este eliminat sau redenumit.

Câmpuri

Tabelele de mai jos sunt generate chiar din schema JSON; aceeași schemă este încorporată, neschimbată, în documentul OpenAPI.

Descrierile din acest tabel provin din contractul în engleză (schema JSON sau documentul OpenAPI).

Order

CâmpTipObligatoriuDescriere
schemaVersion1da—
idempotencyKeystringdaThe caller's replay key for POST /cfg/v1/order (P2-09): the same key returns the same order.
tenantIdstringda—
configVersionintegerdaThe 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).
workflowWorkflowda—
customerRefstringnuOpaque reference into the merchant's own customer records. Never a name or an address.
customerGroupstringnuThe tenant-config customer group the price list was chosen for.
locale"en" | "de" | "it" | "fr" | "pl" | "cs" | "ro" | "hu" | "es" | "hr"da—
unit"mm" | "cm" | "in"daDisplay unit at ordering time; every length in this document is millimetres.
currencystringda—
pricingMode"platform" | "external"da—
createdAtstringda—
expiresAtstringdaQuote validity; equals the token's exp.
sourceSourceda—
cutListCutPart[]daMODE-DISCRIMINATED by workflow.mode (Order.allOf). One branch today: panel2d CutPart.
fullSheetsFullSheetItem[]daFull stock units bought uncut. MODE-DISCRIMINATED; panel2d: whole sheets.
hardwareHardwareLine[]daMode-independent (catalogue hardware).
bondedPanelsBondedPanel[]nuGlued multi-layer panels (P5-05). MODE-DISCRIMINATED; panel2d only today. Shape may gain optional fields there; this is the v1 minimum.
planPlandaMODE-DISCRIMINATED; the plan carries its own `mode` tag (= workflow.mode), covered by planHash.
quoteQuoteda—
shippingOrderShippingnu—
filesFileRef[]nu—
signatureSignaturenu—

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`.

CâmpTipObligatoriuDescriere
idstringda—
mode"panel2d"daA BUILT mode (x-cfg-modes.built). Reserved ⇒ `mode_unavailable`; unknown ⇒ `enum`.
profile"furniture"da—

Source

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

CâmpTipObligatoriuDescriere
embedVersionstringda—
engineVersionstringda= plan.engineVersion (the Engine API's engineVersion).
configVersionintegerda= $.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).

CâmpTipObligatoriuDescriere
idstringda—
namestringdaNo C0/C1 control characters (audit P7-01 F1: a newline in a name wrote DXF entities).
wnumberdaThe size the engine was given (after the tenant's dimension convention / edging deduction were applied).
hnumberda—
qtyintegerda—
materialstringdaCatalogue MaterialItem.id (the API's material partition key).
rotatablebooleannu—
grain"w" | "h"nu—
grainGroupstringnu—
prioritybooleannu—
edgeBandingEdgeBandingnu—
metaobjectnuOpaque passthrough (= ApiPart2D.meta), ≤ 2048 bytes canonical.
groupstringnuRoom / cabinet / project the customer assigned; printed on labels and exports.
machiningMachiningOp[]nu—

EdgeBanding

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

CâmpTipObligatoriuDescriere
topstringnu—
rightstringnu—
bottomstringnu—
leftstringnu—

MachiningOp

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

CâmpTipObligatoriuDescriere
typeIdstringda—
qtyintegerda—
paramsobjectnuOpen 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

CâmpTipObligatoriuDescriere
materialIdstringda—
wnumberda—
hnumberda—
qtyintegerda—

HardwareLine

CâmpTipObligatoriuDescriere
hardwareIdstringda—
qtyintegerda—

BondedPanel

CâmpTipObligatoriuDescriere
idstringda—
wnumberda—
hnumberda—
qtyintegerda—
layersBondedLayer[]da—
namestringnu—

BondedLayer

CâmpTipObligatoriuDescriere
materialIdstringda—
thicknessMmnumberda—

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`).

CâmpTipObligatoriuDescriere
mode"panel2d"daThe mode tag — INSIDE the plan so planHash covers it; must equal $.workflow.mode (D15).
engine"heuristic" | "balanced" | "max"da—
engineVersionstringda—
deterministicbooleanda—
sheetsSheet[]da—
metricsMetrics2Dda—
cutPlanarray | nulldanull when the layout is not guillotine.
unplacedUnplaced2D[]da—
warningsstring[]da—
guillotineValidbooleanda—
planHashstringdasha256 hex of canonicalize(plan without planHash) — RFC 8785; covers `mode`.

Sheet

= ApiSheet (types.ts).

CâmpTipObligatoriuDescriere
wnumberda—
hnumberda—
pricenumber | nulldaThe engine's unit-less per-sheet price; the issuer passes null.
partsPlacedPart2D[]da—
offcutsRect[]nu—
materialstringnu—
grain"w" | "h"nu—
metaobjectnu—

PlacedPart2D

= ApiPlacedPart2D (types.ts).

CâmpTipObligatoriuDescriere
namestringda—
xnumberda—
ynumberda—
wnumberda—
hnumberda—
rotatedbooleanda—
metaobjectnu—

Rect

= ApiRect (types.ts).

CâmpTipObligatoriuDescriere
xnumberda—
ynumberda—
wnumberda—
hnumberda—

Metrics2D

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

CâmpTipObligatoriuDescriere
sheetCountintegerda—
yieldPctnumberda—
placedintegerda—
totalintegerda—
cutLinesintegerda—
sawPassesintegerda—
cutLengthnumberda—
totalPricenumberda—

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.

CâmpTipObligatoriuDescriere
sheetintegerda—
stepintegerda—
axis"h" | "v"da—
posnumberda—
lengthnumberda—
stageintegerda—

Unplaced2D

= ApiUnplaced2D (types.ts).

CâmpTipObligatoriuDescriere
namestringda—
wnumberda—
hnumberda—
qtyintegerda—

Quote

CâmpTipObligatoriuDescriere
pricedbooleandafalse under pricingMode = external: lines carry quantities, every amount is 0.
linesQuoteLine[]da—
totalsTotalsda—
quoteTokenstringdaSee x-cfg-quote-token. The merchant's server verifies it with the tenant's key (P4-02 /quote/verify).

QuoteLine

CâmpTipObligatoriuDescriere
idstringda—
type"cutPart" | "fullSheet" | "hardware" | "machining" | "bondedPanel" | "edging" | "surcharge" | "shipping" | "tax"da—
labelstringda—
qtynumberdaPieces, sheets, metres (edging) — the line's own unit.
unitAmountMoneyda—
amountMoneydaLine total after the tenant's rounding. Σ non-tax amounts = totals.net.
refLineRefnu—
metaobjectnu—

LineRef

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

CâmpTipObligatoriuDescriere
partIdstringnu—
materialIdstringnu—
edgingIdstringnu—
hardwareIdstringnu—
machiningIdstringnu—
zoneIdstringnu—
ruleIdstringnu—
bondedPanelIdstringnu—

Totals

CâmpTipObligatoriuDescriere
netMoneyda—
taxMoneyda—
grossMoneyda—

Money

CâmpTipObligatoriuDescriere
amountMinorintegerda—
currencystringda—

OrderShipping

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

CâmpTipObligatoriuDescriere
method"delivery" | "pickup"da—
zoneIdstringnu—
pickupLocationIdstringnu—

FileRef

CâmpTipObligatoriuDescriere
kind"pdf" | "labels" | "csv" | "dxf" | "svg" | "xlsx" | "json"da—
urlstringda—
sha256stringnu—
bytesintegernu—

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).

CâmpTipObligatoriuDescriere
alg"HMAC-SHA256"da—
keyIdstringda—
valuestringda—

Aici nu există intenționat un buton „încearcă”: cheia secretă aparține serverului dumneavoastră, niciodată unui browser. Magazinul demo arată integrarea și predarea comenzii funcționând de la cap la coadă.

JuridicTermenii configuratorului (EN) ·Acord de prelucrare a datelor (EN) ·Notă de confidențialitate pentru cumpărători ·Licențe terțe (EN)