Fenestro API Docs

Product steps

Product steps describe the configurator flow for one product. They control order, labels, translations, layout, selection rules, attached options, and validation readiness.

Recommended workflow

OrderActionEndpoint
1Create brands, categories, and a product./v1/brands, /v1/categories, /v1/products
2Create reusable options.POST /v1/options
3Create product steps and attach option ids.POST /v1/products/{product_id}/steps
4Replace step attachments when options change.PUT /v1/products/{product_id}/steps/{step_id}/options
5Validate the product configuration before activation or tenant handoff.GET /v1/products/{product_id}/configuration/validation

Endpoints

MethodPathUse
POST/v1/products/{product_id}/stepsCreate a step for a tenant product.
GET/v1/products/{product_id}/stepsList steps. Supports active.
GET/v1/products/{product_id}/steps/{step_id}Read one step.
PATCH/v1/products/{product_id}/steps/{step_id}Update provided step fields.
PUT/v1/products/{product_id}/steps/{step_id}/optionsReplace the option attachments.
DELETE/v1/products/{product_id}/steps/{step_id}Deactivate a step.
GET/v1/products/{product_id}/configuration/validationReturn a validation report for the product configuration.

Create step example

curl -X POST https://api.fenestro.io/v1/products/42/steps \
  -H "Authorization: Bearer fen_live_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Choose the colour",
    "name_en": "Choose the colour",
    "type": "selection",
    "content_type": "couleurs",
    "display_order": 1,
    "required": true,
    "skippable": false,
    "layout_type": "grid",
    "display_columns": 4,
    "display_price": true,
    "display_images": true,
    "options_min": 1,
    "options_max": 1,
    "option_ids": [101, 102, 103],
    "translations": {
      "de": { "name": "Farbe auswählen" }
    }
  }'

Attach options example

curl -X PUT https://api.fenestro.io/v1/products/42/steps/8/options \
  -H "Authorization: Bearer fen_live_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{ "option_ids": [101, 102, 103, 104] }'

Replacing attachments preserves the other keys already present in content_configuration. Only the option list is replaced. This keeps existing configurator JSON compatible with the storefront.

Validation report

curl https://api.fenestro.io/v1/products/42/configuration/validation \
  -H "Authorization: Bearer fen_live_xxxxxxxxxxxx"

The report returns valid, errors, and warnings. Validation checks tenant ownership, active category and brand, active steps, duplicate step ordering, invalid JSON, missing required options, inactive options, invalid next/previous step references, and option ids from another tenant.

Important fields

FieldNotes
typeRequired step kind, for example selection, dimension, checkbox, or a tenant-specific type.
content_typeOptional option/content family used by the configurator, for example couleurs or ouvertures.
option_idsPublic option identifiers from /v1/options. Every id must be active and tenant-owned.
content_configurationOptional JSON for advanced configurator data. The API stores it and expands option attachments into its options list.
options_min, options_maxSelection bounds. options_min must be lower than or equal to options_max.
translationsOptional JSON object for localized labels/descriptions.

Common step errors

ErrorMeaning
not_foundThe product or step does not exist for the authenticated tenant.
invalid_optionAt least one option_id is missing, inactive, or belongs to another tenant.
duplicate_display_orderAnother active step already uses the same display_order for the product.
validation_errorThe request body is missing required fields or violates field limits.