Přejít na hlavní obsah
← Reference API

Dokument order.v1

Každá objednávka, kterou konfigurátor zaznamená, je jeden podepsaný dokument order.v1: workflow, ve kterém vznikla, seznam dílů, výrobní plán, oceněná nabídka s tokenem a odkud pochází. Neobsahuje žádné osobní údaje, jen váš neprůhledný customerRef.

Cesty, názvy polí, chybové kódy, názvy hlaviček a ukázky kódu zůstávají anglicky: jsou součástí kontraktu.

Pravidla platná pro každou objednávku

  • Každá délka je v milimetrech; unit je jen zobrazovaná jednotka.
  • Každá částka je Money v celých nejmenších jednotkách a každá měna se rovná currency objednávky.
  • Jedna objednávka je jeden workflow: workflow.mode určuje podobu seznamu dílů a plánu (dnes panel2d).
  • plan.planHash je SHA-256 kanonického plánu; token nabídky jej váže, takže změněný plán je odhalen.
  • Dokument je uzavřený a v rámci v1 jen rozšiřitelný: nová pole jsou volitelná, nic se neodstraňuje ani nepřejmenovává.

Pole

Tabulky níže jsou vygenerovány přímo z JSON Schema; totéž schéma je beze změny vloženo i do dokumentu OpenAPI.

Popisy v této tabulce pocházejí z anglického kontraktu (JSON Schema nebo dokumentu OpenAPI).

Order

PoleTypPovinnéPopis
schemaVersion1ano—
idempotencyKeystringanoThe caller's replay key for POST /cfg/v1/order (P2-09): the same key returns the same order.
tenantIdstringano—
configVersionintegeranoThe 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).
workflowWorkflowano—
customerRefstringneOpaque reference into the merchant's own customer records. Never a name or an address.
customerGroupstringneThe tenant-config customer group the price list was chosen for.
locale"en" | "de" | "it" | "fr" | "pl" | "cs" | "ro" | "hu" | "es" | "hr"ano—
unit"mm" | "cm" | "in"anoDisplay unit at ordering time; every length in this document is millimetres.
currencystringano—
pricingMode"platform" | "external"ano—
createdAtstringano—
expiresAtstringanoQuote validity; equals the token's exp.
sourceSourceano—
cutListCutPart[]anoMODE-DISCRIMINATED by workflow.mode (Order.allOf). One branch today: panel2d CutPart.
fullSheetsFullSheetItem[]anoFull stock units bought uncut. MODE-DISCRIMINATED; panel2d: whole sheets.
hardwareHardwareLine[]anoMode-independent (catalogue hardware).
bondedPanelsBondedPanel[]neGlued multi-layer panels (P5-05). MODE-DISCRIMINATED; panel2d only today. Shape may gain optional fields there; this is the v1 minimum.
planPlananoMODE-DISCRIMINATED; the plan carries its own `mode` tag (= workflow.mode), covered by planHash.
quoteQuoteano—
shippingOrderShippingne—
filesFileRef[]ne—
signatureSignaturene—

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

PoleTypPovinnéPopis
idstringano—
mode"panel2d"anoA BUILT mode (x-cfg-modes.built). Reserved ⇒ `mode_unavailable`; unknown ⇒ `enum`.
profile"furniture"ano—

Source

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

PoleTypPovinnéPopis
embedVersionstringano—
engineVersionstringano= plan.engineVersion (the Engine API's engineVersion).
configVersionintegerano= $.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).

PoleTypPovinnéPopis
idstringano—
namestringanoNo C0/C1 control characters (audit P7-01 F1: a newline in a name wrote DXF entities).
wnumberanoThe size the engine was given (after the tenant's dimension convention / edging deduction were applied).
hnumberano—
qtyintegerano—
materialstringanoCatalogue MaterialItem.id (the API's material partition key).
rotatablebooleanne—
grain"w" | "h"ne—
grainGroupstringne—
prioritybooleanne—
edgeBandingEdgeBandingne—
metaobjectneOpaque passthrough (= ApiPart2D.meta), ≤ 2048 bytes canonical.
groupstringneRoom / cabinet / project the customer assigned; printed on labels and exports.
machiningMachiningOp[]ne—

EdgeBanding

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

PoleTypPovinnéPopis
topstringne—
rightstringne—
bottomstringne—
leftstringne—

MachiningOp

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

PoleTypPovinnéPopis
typeIdstringano—
qtyintegerano—
paramsobjectneOpen 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

PoleTypPovinnéPopis
materialIdstringano—
wnumberano—
hnumberano—
qtyintegerano—

HardwareLine

PoleTypPovinnéPopis
hardwareIdstringano—
qtyintegerano—

BondedPanel

PoleTypPovinnéPopis
idstringano—
wnumberano—
hnumberano—
qtyintegerano—
layersBondedLayer[]ano—
namestringne—

BondedLayer

PoleTypPovinnéPopis
materialIdstringano—
thicknessMmnumberano—

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

PoleTypPovinnéPopis
mode"panel2d"anoThe mode tag — INSIDE the plan so planHash covers it; must equal $.workflow.mode (D15).
engine"heuristic" | "balanced" | "max"ano—
engineVersionstringano—
deterministicbooleanano—
sheetsSheet[]ano—
metricsMetrics2Dano—
cutPlanarray | nullanonull when the layout is not guillotine.
unplacedUnplaced2D[]ano—
warningsstring[]ano—
guillotineValidbooleanano—
planHashstringanosha256 hex of canonicalize(plan without planHash) — RFC 8785; covers `mode`.

Sheet

= ApiSheet (types.ts).

PoleTypPovinnéPopis
wnumberano—
hnumberano—
pricenumber | nullanoThe engine's unit-less per-sheet price; the issuer passes null.
partsPlacedPart2D[]ano—
offcutsRect[]ne—
materialstringne—
grain"w" | "h"ne—
metaobjectne—

PlacedPart2D

= ApiPlacedPart2D (types.ts).

PoleTypPovinnéPopis
namestringano—
xnumberano—
ynumberano—
wnumberano—
hnumberano—
rotatedbooleanano—
metaobjectne—

Rect

= ApiRect (types.ts).

PoleTypPovinnéPopis
xnumberano—
ynumberano—
wnumberano—
hnumberano—

Metrics2D

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

PoleTypPovinnéPopis
sheetCountintegerano—
yieldPctnumberano—
placedintegerano—
totalintegerano—
cutLinesintegerano—
sawPassesintegerano—
cutLengthnumberano—
totalPricenumberano—

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.

PoleTypPovinnéPopis
sheetintegerano—
stepintegerano—
axis"h" | "v"ano—
posnumberano—
lengthnumberano—
stageintegerano—

Unplaced2D

= ApiUnplaced2D (types.ts).

PoleTypPovinnéPopis
namestringano—
wnumberano—
hnumberano—
qtyintegerano—

Quote

PoleTypPovinnéPopis
pricedbooleananofalse under pricingMode = external: lines carry quantities, every amount is 0.
linesQuoteLine[]ano—
totalsTotalsano—
quoteTokenstringanoSee x-cfg-quote-token. The merchant's server verifies it with the tenant's key (P4-02 /quote/verify).

QuoteLine

PoleTypPovinnéPopis
idstringano—
type"cutPart" | "fullSheet" | "hardware" | "machining" | "bondedPanel" | "edging" | "surcharge" | "shipping" | "tax"ano—
labelstringano—
qtynumberanoPieces, sheets, metres (edging) — the line's own unit.
unitAmountMoneyano—
amountMoneyanoLine total after the tenant's rounding. Σ non-tax amounts = totals.net.
refLineRefne—
metaobjectne—

LineRef

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

PoleTypPovinnéPopis
partIdstringne—
materialIdstringne—
edgingIdstringne—
hardwareIdstringne—
machiningIdstringne—
zoneIdstringne—
ruleIdstringne—
bondedPanelIdstringne—

Totals

PoleTypPovinnéPopis
netMoneyano—
taxMoneyano—
grossMoneyano—

Money

PoleTypPovinnéPopis
amountMinorintegerano—
currencystringano—

OrderShipping

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

PoleTypPovinnéPopis
method"delivery" | "pickup"ano—
zoneIdstringne—
pickupLocationIdstringne—

FileRef

PoleTypPovinnéPopis
kind"pdf" | "labels" | "csv" | "dxf" | "svg" | "xlsx" | "json"ano—
urlstringano—
sha256stringne—
bytesintegerne—

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

PoleTypPovinnéPopis
alg"HMAC-SHA256"ano—
keyIdstringano—
valuestringano—

Tlačítko „vyzkoušet“ tu záměrně není: tajný klíč patří na váš server, nikdy do prohlížeče. Demo obchod ukazuje vložení i předání objednávky v provozu od začátku do konce.

Právní informacePodmínky konfigurátoru (EN) ·Smlouva o zpracování údajů (EN) ·Zásady ochrany osobních údajů pro kupující ·Licence třetích stran (EN)