The big picture
zonesRequiredmappingsRequireddescriptionRequiredthreeDScenesOptionalbuilderSpecOptionalhostedPageOptionaldescription is a private note (“Add a description to help identify this configuration”) — shoppers never see it. The shopper-facing product title is written by Builder logic or the Hosted page title instead.Sizes & positions — everything is centimetres
originalSizecanvasOffsetx) and down (y) as one group. Usually 0, 0.Zones — the steps of the customiser
title becomes the step’s heading. Which zones appear, and in what order, comes from Zone Order.The four zone types
type: "image"type: "text"type: "composite"type: "modelColour"Settings every zone shares
zones.<key>background, textArea, …). Auto-generated from the label when the zone is created, then locked — other parts of the config (Zone Order, 3D colour areas) refer to zones by this key.typeimage, text, composite or modelColour — see the cards above.titleoriginalSizebackgroundColourbackgroundMaskslayoutOptionsBackground masks
condition"default" marks the zone’s fallback mask — always shown unless a conditional mask matches. Any other value makes the mask conditional: it appears only when the shopper’s selection matches (typically an obstruction slider value, like a ribbon width of 2, 3 or 4). Only one mask per zone can be the default.assetImage zones — layouts and photo slots
"whole""two-column""four-grid"defaultLayout picks which one loads first.Each photo slot — fields inside a layout
id · labelid is the slot’s stable internal name (image-0, image-1, …); label is what shoppers see on the upload card (“Image 1”).x · y · width · heightcontainerSizecontainerTypecover crops to fill, contain fits inside. See below.visibleImageIndicesxOffset · yOffset0."cover""contain"Text zones — what shoppers type, and what gets printed
parts.The layout itself
id · labellabel is the option shoppers pick (“Standard Layout”); id is its internal name. The first layout in the list is the default.assetinputFieldsdisplayFieldsInput fields — inputFields
id · labellabel is shown above the box (“Location”); id is how display fields refer to it.info<highlight> to make it stand out.validationvalue: a number caps the length (with a live character counter); a pattern (text starting with ^) restricts which characters are allowed — numbers only, dates, times. Each rule’s message is the error shown to the shopper.Display fields — displayFields
displayTypestandalone mirrors one input field exactly (named by sourceFieldId). composite stitches several inputs into one printed line (listed in sourceFieldIds) using parts.partsfield part inserts an input’s value; a separator part inserts fixed text (value) that only appears when the fields named in showIf are filled in — so “LONDON 12/04/2026” never shows a stray space when the date is empty.fontSize · lineHeightalignmentOptionstype (left, center or right) plus the x · y position (cm) the text aligns to. defaultAlignment picks the starting one.strokeAvailabledefaultTextColour · defaultStrokeColourprintOutputDatastrokeWidth), vertical anchor (baseline: top / middle / bottom) and tiny xOffset / yOffset corrections (some scale with the font size via fontSizeMultiplier). Set once per product during setup — fine to leave alone.Obstructions — things that sit on top
fixedshapelabelmedal · ribbonorderinput is the order shoppers fill in the controls; editor is the stacking order on the canvas preview. They can differ — the ribbon may be input #2 but drawn first, underneath the medal.assetProvider"shape" offers multiple options — each with a name, a picker icon (uiIcon) and the SVG drawn on the canvas (canvasAsset). "fixed" is a single set SVG with no choice. baseStyle anchors it: top / left as a percentage of the canvas, width / height in centimetres.adjusterstarget names what it changes (width, height, or both at once for a proportional resize).canvasDisplayFormulalabel — the titletarget — what it resizesmetadata — min · max · step · default · unitComposite zones — several areas, one step
canvasOffset places it inside the parent canvas. The zone’s own offset moves the whole group at once.sectionsid and its own canvasOffset placing it inside the parent canvas.originalSizecanvasOffset shifts the whole group at once.backgroundColourModel Colour zones — recolour the 3D model
type · title"modelColour" and the step’s heading. Everything else — which parts are selectable, their swatches and camera views — is configured in the Selector 3D scene’s colour areas, which this zone requires to be enabled.Mappings — the dictionaries
Background colours — colours
Colour name → the zone background it paints. The name matches your product’s colour option, lowercased.
Text colours — textColours
The default text colour used on each background — dark text on cream, white text on black, so engravings stay readable.
Stroke colours — strokeColours
The default text-outline colour per background, written as a hex with opacity (#FFFFFF00 = fully transparent). Tip from the dashboard: 0% opacity — no outline — is the common case.
Zone order — zoneOrderByType
The switchboard of the whole configuration: each customisation type your product offers maps to the zones it shows, in step order. The type comes from the product’s “Customisation” option (or the hosted page’s switcher); matching is forgiving — case-insensitive, partial.
3D themes — threeDThemes
Colour name → the list of colours applied to the 3D model’s themed parts, so the model matches the chosen product colour. The order matters: the first colour paints the model’s part number 0, the second part number 1, and so on.
3D scenes — the spinning previews
modelStoragePath — a .glb file uploaded in the dashboard) is shared by up to three scenes, each shown at a different moment of the journey.teaserselectorconfirmationSettings every scene shares
enabledbackgroundMode · gradientConfigsolid for a flat colour or radialGradient for a soft glow — with a centre colour, an edge colour and the gradient’s shape (ellipse/circle), position and size.rotationcontinuous spins freely; oscillate rocks back and forth within range degrees.materialConfigroughness (0 shiny → 1 matte), metalness (0–1) and envMapIntensity (0–2) — how strongly the environment reflects off the product.productScalecameraposition (x, y, z) and field of view (fov, in degrees). Leave it out to use the camera baked into the .glb file.controllersplaceholder (a show/hide toggle for a mock visual — e.g. a medal for scale — with its label and starting defaultValue) and, on teaser/confirmation, color (a quick colour picker with its own options list).reuseSelectorSettingsSelector-only settings
colourAreasid matching a group marked inside the 3D file, a shopper label, a defaultColour, its colourSwatches palette, an optional cameraView the camera flies to when tapped, and an optional texture naming a zone key — picking a colour then also recolours that zone’s background.pingcolor.positionResetposition and target after the shopper has dragged around.defaultCameraView.glb camera..glb file itself as custom properties. The dashboard’s “How to prepare your model” guide (on the 3D Scenes tab) covers it step by step.Builder logic — adapting to the shopper’s choices
builderSpec) is the set of rules that reads those choices and tailors the configuration before the customiser opens — no code required.- reads each choice as a named input
- picks the mask whose condition is “3”
- caps the ribbon slider at 3 cm
- looks up “black” in the colour mappings
- writes the product title from a template
inputspath to the value (e.g. metaData.ribbonWidth for a “Ribbon Width” product option), a type (string, number, boolean, raw) and a default used when the variant doesn’t supply one. Every other rule refers to inputs by name.description{placeholders} swapped for live values.consts · computedconsts are fixed values usable in the template (like frameSize: 12); computed derives a label by matching an input against cases — e.g. show “Custom Colour” instead of the raw colour when the type is custom.zones.<key>.maskby names an input; the zone shows the background mask whose condition matches that input’s value (ribbon width 3 → the “3” mask).zones.<key>.obstruction.clampzoneEmitOrdercolours · zoneOrder · threeDmetaData for inputs to pick up. Kastomise-hosted shops feed the same inputs from the hosted page’s option fields.Hosted page — your product page, hosted by Kastomise
title · basePriceimagesfieldslabel, optional helperText under it, and (for choice types) its options: a label, an auto-generated key, an optional price surcharge added to the base price, a color for swatches and a description for radio cards.fields[].builderPathbackgroundColor (its labels must match colour mapping names, like “Black”).extrasprice added to the total when switched on — gift wrap, hanging kit. The group name is always "extra".customisationkey matches a Zone Order type and its label is what shoppers see; defaultKey applies when the page URL doesn’t preset one (?customisationType=…), and showOnPage shows the switcher on the page (it needs two or more options to appear)."swatch""segmented""radio-cards""dropdown""range""text"Cheat sheet
descriptionzonesmappingsthreeDScenesbuilderSpechostedPage