Hoppa till innehållet

Konfigurator

Made-to-order products: read an item's configuration schema, price and validate a set of choices, save it as a configuration and turn it into a sales order. Addressed by configurationNumber. The schema endpoint lives at /preview/items/{itemNumber}/configuration because it belongs to the item, but it is grouped here so the whole configurator flow reads in one place.

8 anrop GET POST DELETE Bas-URL https://api.erp.fluit.cloud/preview

Autentisering, felkoder, rate limits, idempotens och paginering gäller alla anrop och står samlade under Kom igång.

GET /configurations

List saved configurations

Returns the configurations that have not yet become orders, oldest configuration number first.

Visa hela beskrivningen

A configuration disappears from this list once POST /preview/configurations/{configurationNumber}/order has turned it into a sales order — from that point it is an order and is read through GET /preview/orders instead. ?modifiedSince= (ISO 8601 UTC datetime) returns records created or changed at or after that instant, and is the intended way to run an incremental sync. A change anywhere inside the record counts: editing a line moves the parent's modifiedDate too, so no change can hide below the resource level. Deletions are not visible here: a deleted record is really gone, so it simply stops appearing, which is indistinguishable from "unchanged". Poll GET /preview/deletions?deletedSince= alongside this endpoint to learn what was removed. **One removal still has no tombstone: being ordered.** A configuration that has become a sales order is not deleted — it stops matching this list because it is now an order, so it appears in neither the delta nor GET /preview/deletions. Record the `orderNumber` from the response to the /order call, or reconcile against GET /preview/orders, to retire those local copies. The price fields (`unitPrice`, `totalPrice`, …) are **null** in this list — pricing a whole page would mean one price engine run per row. Read a single configuration, or use POST /preview/configurations/calculate, when you need prices. Paginated response: `{ items, totalCount, page, pageSize, totalPages, hasPreviousPage, hasNextPage }`. `?page=` defaults to 1, `?pageSize=` to 50 and is capped at 200.

configurations:read Stödjer ?modifiedSince

Frågeparametrar

Fält Typ Beskrivning
search string Matches configuration number, title and description, case-insensitively and on partial words.
customerNumber string Returns only the configurations saved for this customer number.
itemNumber string Returns only the configurations of this configurable item.
modifiedSince string(date-time) Returns only records created or changed at or after this instant (ISO 8601 UTC datetime). A change anywhere inside the record counts, including on its lines.
page integer Page to return, 1-based. Default 1.
pageSize integer Number of records per page. Default 50, max 200.

Svar

200 PagedResult_PublicConfigurationResponse

Paginerat svar: raderna nedan ligger i items[], omgivna av totalCount, page, pageSize, totalPages, hasPreviousPage och hasNextPage. Paginerad

Fält Typ Beskrivning
basePricePerUnit decimal · nullable The item's own price per unit from the price engine. Null on the list endpoint.
configurationNumber string · nullable Unique configuration number — business key, e.g. `WO-1042`. Use it in every follow-up call.
configurationPriceImpact decimal Total configuration surcharge for the whole quantity, in the tenant base currency, before the price engine runs. The priced fields below express the same thing in the customer's currency.
configurationSurchargePerUnit decimal · nullable What the chosen options add per unit. Null on the list endpoint.
createdDate string(date-time) UTC timestamp when the configuration was created.
currencyCode string · nullable ISO 4217 code the priced fields below are expressed in. Null on the list endpoint — see the note on PublicApi.Preview.Configurations.Queries.PublicConfigurationResponse.UnitPrice.
customerName string · nullable Customer name. Null when the configuration is anonymous.
customerNumber string · nullable Customer number the configuration belongs to. Required before it can become an order. Null when the configuration is anonymous.
description string · nullable Free-text description, e.g. which window the curtain is for. Null if not set.
itemName string · nullable Display name of the configured product.
itemNumber string · nullable Item number of the configured product.
links Links Hypermedia links for a public API resource. Exposed as a computed `links` property on the public response DTOs so that create and read responses carry the same self-reference — the canonical URL is derived from the business key already present on the DTO and can never drift from the route it points at.
modifiedDate string(date-time) · nullable UTC timestamp of the last modification. Null if never modified after creation.
priceListName string · nullable Name of the price list that produced the base price. Null when no price list matched or on the list endpoint.
priceSource string · nullable Where the base price came from in the price hierarchy, e.g. `CustomerPriceList`. Null on the list endpoint.
quantity decimal How many units of the configured product. Expressed in the item's base unit.
title string · nullable Free-text title. Defaults to the item name when not supplied.
totalPrice decimal · nullable Unit price × quantity, excluding VAT, freight and order-level discounts. Null on the list endpoint.
unitPrice decimal · nullable Base price plus surcharge — the unit price the order line will get, priced as of now. Only populated when a single configuration is returned (create, get by number, reconfigure). On GET /preview/configurations it is `null`: pricing a whole page would mean one price engine run per row. Read one configuration, or use POST /preview/configurations/calculate, when you need the price for a list.
values ConfigurationValue[] · nullable The chosen values, one per feature that has a value.
warehouseCode string · nullable Warehouse code the configuration is planned against. Null when not set.

Standardfel: 401 403 Felhantering

Exempel

curl
curl "https://api.erp.fluit.cloud/preview/configurations" \
  -H "X-Api-Key: fluit_live_sk_..."
Svar 200
{
  "hasNextPage": true,
  "hasPreviousPage": true,
  "items": [
    {
      "basePricePerUnit": "299.00",
      "configurationNumber": "CFG-2026-0058",
      "configurationPriceImpact": "299.00",
      "configurationSurchargePerUnit": "299.00",
      "createdDate": "2026-06-11T09:24:13.418",
      "currencyCode": "SEK",
      "customerName": "Acme AB",
      "customerNumber": "CUST-001",
      "description": "string",
      "itemName": "Widget A",
      "itemNumber": "WIDGET-A",
      "links": {
        "self": "string"
      },
      "modifiedDate": "2026-06-11T09:24:13.418",
      "priceListName": "Retail 2026",
      "priceSource": "string",
      "quantity": "10",
      "title": "string",
      "totalPrice": "299.00",
      "unitPrice": "299.00",
      "values": [
        {
          "boolean": true,
          "featureCode": "STD",
          "featureName": "Width",
          "featureType": "Text",
          "isMeasured": true,
          "itemNumber": "WIDGET-A",
          "number": "299.00",
          "optionCode": "STD",
          "optionName": "White",
          "text": "string"
        }
      ],
      "warehouseCode": "MAIN"
    }
  ],
  "page": 1,
  "pageSize": 50,
  "totalCount": 137,
  "totalPages": 3
}

Bas-URL https://api.erp.fluit.cloud/preview. Svarsexemplet är genererat ur schemat: formen stämmer, värdena är påhittade.

POST /configurations

Save a configuration

Persists a set of choices as a configuration and returns it with a `configurationNumber` — the business key for every follow-up call. Use this once the customer has settled on a configuration that POST /preview/configurations/calculate reports as valid; the calculate endpoint is for the live pricing while they are still choosing.

Visa hela beskrivningen

The configuration is validated on save: a missing required value, a number outside its bounds or an option that does not belong to its feature returns `400` with the error code in the `errors` array (`FeatureExplosion.RequiredFeatureMissing`, `FeatureExplosion.ValueOutOfRange`, `FeatureExplosion.InvalidOption`). Validate with calculate first to get all problems at once. `customerNumber` is optional here so an anonymous session can be saved and claimed later, but it must be set before POST /preview/configurations/{configurationNumber}/order will succeed. Add it afterwards by passing `customerNumber` to POST /preview/configurations/{configurationNumber}/reconfigure. The response carries the priced configuration — `unitPrice` and `totalPrice` alongside the choices. Requires an `Idempotency-Key` header like every other POST — reuse the same key on a retry to get the original configuration back instead of creating a duplicate.

configurations:write Kräver Idempotency-Key

Body krävs

Fält Typ Beskrivning
customerNumber string · nullable Customer the configuration is for. Required before it can be turned into an order, but may be filled in later with a reconfigure.
description string · nullable Free-text description, e.g. which room or window the product is for.
itemNumber Krävs string Item number of the configurable product.
quantity decimal How many units of the configured product. Must be greater than zero.
title string · nullable Free-text title. Defaults to the item name.
values ConfigurationValue[] · nullable The chosen values.
warehouseCode string · nullable Warehouse to plan the configuration against. Optional and left unset when omitted — the warehouse is then resolved (customer's, then the tenant default) when the configuration becomes an order.

Svar

201 PublicConfigurationResponse
  • Location — URL of the newly created resource.
Fält Typ Beskrivning
basePricePerUnit decimal · nullable The item's own price per unit from the price engine. Null on the list endpoint.
configurationNumber string · nullable Unique configuration number — business key, e.g. `WO-1042`. Use it in every follow-up call.
configurationPriceImpact decimal Total configuration surcharge for the whole quantity, in the tenant base currency, before the price engine runs. The priced fields below express the same thing in the customer's currency.
configurationSurchargePerUnit decimal · nullable What the chosen options add per unit. Null on the list endpoint.
createdDate string(date-time) UTC timestamp when the configuration was created.
currencyCode string · nullable ISO 4217 code the priced fields below are expressed in. Null on the list endpoint — see the note on PublicApi.Preview.Configurations.Queries.PublicConfigurationResponse.UnitPrice.
customerName string · nullable Customer name. Null when the configuration is anonymous.
customerNumber string · nullable Customer number the configuration belongs to. Required before it can become an order. Null when the configuration is anonymous.
description string · nullable Free-text description, e.g. which window the curtain is for. Null if not set.
itemName string · nullable Display name of the configured product.
itemNumber string · nullable Item number of the configured product.
links Links Hypermedia links for a public API resource. Exposed as a computed `links` property on the public response DTOs so that create and read responses carry the same self-reference — the canonical URL is derived from the business key already present on the DTO and can never drift from the route it points at.
modifiedDate string(date-time) · nullable UTC timestamp of the last modification. Null if never modified after creation.
priceListName string · nullable Name of the price list that produced the base price. Null when no price list matched or on the list endpoint.
priceSource string · nullable Where the base price came from in the price hierarchy, e.g. `CustomerPriceList`. Null on the list endpoint.
quantity decimal How many units of the configured product. Expressed in the item's base unit.
title string · nullable Free-text title. Defaults to the item name when not supplied.
totalPrice decimal · nullable Unit price × quantity, excluding VAT, freight and order-level discounts. Null on the list endpoint.
unitPrice decimal · nullable Base price plus surcharge — the unit price the order line will get, priced as of now. Only populated when a single configuration is returned (create, get by number, reconfigure). On GET /preview/configurations it is `null`: pricing a whole page would mean one price engine run per row. Read one configuration, or use POST /preview/configurations/calculate, when you need the price for a list.
values ConfigurationValue[] · nullable The chosen values, one per feature that has a value.
warehouseCode string · nullable Warehouse code the configuration is planned against. Null when not set.
400 ProblemDetails A required value is missing, a number falls outside its bounds, an option does not belong to its feature, or the itemNumber, customerNumber or warehouseCode does not exist.
Fält Typ
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable

Standardfel: 401 403 Felhantering

Exempel

curl
curl -X POST "https://api.erp.fluit.cloud/preview/configurations" \
  -H "X-Api-Key: fluit_live_sk_..." \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d @body.json
Full — a measured curtain for a named customer
{
  "customerNumber": "CUST-001",
  "description": "Window 2, measured 2026-07-30",
  "itemNumber": "CURTAIN-PLEAT",
  "quantity": "2",
  "title": "Living room curtains",
  "values": [
    {
      "featureCode": "WIDTH",
      "number": "240"
    },
    {
      "featureCode": "HEIGHT",
      "number": "180"
    },
    {
      "featureCode": "FABRIC",
      "optionCode": "LINEN-NATURAL"
    },
    {
      "boolean": true,
      "featureCode": "LINING"
    },
    {
      "featureCode": "RAIL",
      "itemNumber": "RAIL-3M"
    }
  ],
  "warehouseCode": "MAIN"
}
Minimal — item and quantity only
{
  "itemNumber": "CURTAIN-PLEAT",
  "quantity": "1"
}
Svar 201
{
  "basePricePerUnit": "299.00",
  "configurationNumber": "CFG-2026-0058",
  "configurationPriceImpact": "299.00",
  "configurationSurchargePerUnit": "299.00",
  "createdDate": "2026-06-11T09:24:13.418",
  "currencyCode": "SEK",
  "customerName": "Acme AB",
  "customerNumber": "CUST-001",
  "description": "string",
  "itemName": "Widget A",
  "itemNumber": "WIDGET-A",
  "links": {
    "self": "string"
  },
  "modifiedDate": "2026-06-11T09:24:13.418",
  "priceListName": "Retail 2026",
  "priceSource": "string",
  "quantity": "10",
  "title": "string",
  "totalPrice": "299.00",
  "unitPrice": "299.00",
  "values": [
    {
      "boolean": true,
      "featureCode": "STD",
      "featureName": "Width",
      "featureType": "Text",
      "isMeasured": true,
      "itemNumber": "WIDGET-A",
      "number": "299.00",
      "optionCode": "STD",
      "optionName": "White",
      "text": "string"
    }
  ],
  "warehouseCode": "MAIN"
}

Bas-URL https://api.erp.fluit.cloud/preview. Svarsexemplet är genererat ur schemat: formen stämmer, värdena är påhittade.

GET /configurations/{configurationNumber}

Get a saved configuration

Returns one configuration with its chosen values, resolved to feature and option codes, and priced for its customer — `basePricePerUnit`, `configurationSurchargePerUnit`, `unitPrice` and `totalPrice`.

Visa hela beskrivningen

Use it to resume a saved configuration without replaying the values through POST /preview/configurations/calculate. Returns `404` once the configuration has become an order — a configuration only exists until it is ordered. Read the resulting order through GET /preview/orders/{orderNumber} instead, using the order number from the response to POST /preview/configurations/{configurationNumber}/order. The price is calculated on read, so it reflects today's price lists and campaigns rather than what was quoted when the configuration was saved. The price fields are omitted if the saved configuration can no longer be priced (e.g. the item's features have changed since). Responses carry a weak ETag; pass it back in `If-None-Match` to get `304 Not Modified` while the response is unchanged. The validator is derived from the response itself, so it covers the calculated price too: if today's price differs from the one in your cached copy you get a fresh `200`, not a `304`.

configurations:read Stödjer ETag

Sökvägsparametrar

Fält Typ Beskrivning
configurationNumber Krävs string Configuration number of the saved configuration to read.

Svar

200 PublicConfigurationResponse
  • ETag — Weak validator for this representation. Pass it back in If-None-Match to get 304 Not Modified while the record is unchanged.
Fält Typ Beskrivning
basePricePerUnit decimal · nullable The item's own price per unit from the price engine. Null on the list endpoint.
configurationNumber string · nullable Unique configuration number — business key, e.g. `WO-1042`. Use it in every follow-up call.
configurationPriceImpact decimal Total configuration surcharge for the whole quantity, in the tenant base currency, before the price engine runs. The priced fields below express the same thing in the customer's currency.
configurationSurchargePerUnit decimal · nullable What the chosen options add per unit. Null on the list endpoint.
createdDate string(date-time) UTC timestamp when the configuration was created.
currencyCode string · nullable ISO 4217 code the priced fields below are expressed in. Null on the list endpoint — see the note on PublicApi.Preview.Configurations.Queries.PublicConfigurationResponse.UnitPrice.
customerName string · nullable Customer name. Null when the configuration is anonymous.
customerNumber string · nullable Customer number the configuration belongs to. Required before it can become an order. Null when the configuration is anonymous.
description string · nullable Free-text description, e.g. which window the curtain is for. Null if not set.
itemName string · nullable Display name of the configured product.
itemNumber string · nullable Item number of the configured product.
links Links Hypermedia links for a public API resource. Exposed as a computed `links` property on the public response DTOs so that create and read responses carry the same self-reference — the canonical URL is derived from the business key already present on the DTO and can never drift from the route it points at.
modifiedDate string(date-time) · nullable UTC timestamp of the last modification. Null if never modified after creation.
priceListName string · nullable Name of the price list that produced the base price. Null when no price list matched or on the list endpoint.
priceSource string · nullable Where the base price came from in the price hierarchy, e.g. `CustomerPriceList`. Null on the list endpoint.
quantity decimal How many units of the configured product. Expressed in the item's base unit.
title string · nullable Free-text title. Defaults to the item name when not supplied.
totalPrice decimal · nullable Unit price × quantity, excluding VAT, freight and order-level discounts. Null on the list endpoint.
unitPrice decimal · nullable Base price plus surcharge — the unit price the order line will get, priced as of now. Only populated when a single configuration is returned (create, get by number, reconfigure). On GET /preview/configurations it is `null`: pricing a whole page would mean one price engine run per row. Read one configuration, or use POST /preview/configurations/calculate, when you need the price for a list.
values ConfigurationValue[] · nullable The chosen values, one per feature that has a value.
warehouseCode string · nullable Warehouse code the configuration is planned against. Null when not set.
304 Tom body.
  • ETag — Weak validator for this representation. Pass it back in If-None-Match to get 304 Not Modified while the record is unchanged.
404 ProblemDetails No configuration with that configuration number, including one that has become an order.
Fält Typ
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable

Standardfel: 401 403 Felhantering

Exempel

curl
curl "https://api.erp.fluit.cloud/preview/configurations/{configurationNumber}" \
  -H "X-Api-Key: fluit_live_sk_..."
Svar 200
{
  "basePricePerUnit": "299.00",
  "configurationNumber": "CFG-2026-0058",
  "configurationPriceImpact": "299.00",
  "configurationSurchargePerUnit": "299.00",
  "createdDate": "2026-06-11T09:24:13.418",
  "currencyCode": "SEK",
  "customerName": "Acme AB",
  "customerNumber": "CUST-001",
  "description": "string",
  "itemName": "Widget A",
  "itemNumber": "WIDGET-A",
  "links": {
    "self": "string"
  },
  "modifiedDate": "2026-06-11T09:24:13.418",
  "priceListName": "Retail 2026",
  "priceSource": "string",
  "quantity": "10",
  "title": "string",
  "totalPrice": "299.00",
  "unitPrice": "299.00",
  "values": [
    {
      "boolean": true,
      "featureCode": "STD",
      "featureName": "Width",
      "featureType": "Text",
      "isMeasured": true,
      "itemNumber": "WIDGET-A",
      "number": "299.00",
      "optionCode": "STD",
      "optionName": "White",
      "text": "string"
    }
  ],
  "warehouseCode": "MAIN"
}

Bas-URL https://api.erp.fluit.cloud/preview. Svarsexemplet är genererat ur schemat: formen stämmer, värdena är påhittade.

DELETE /configurations/{configurationNumber}

Discard a configuration

Deletes a configuration that was never ordered. A configurator produces a lot of abandoned configurations, and this is how the app cleans them up instead of leaving them in the tenant's list.

Visa hela beskrivningen

Returns `409` (`Configuration.NotConfigurable`) once the configuration has become an order — what sits behind the order line is production data and is not deletable through this API. Cancel the order with POST /preview/orders/{orderNumber}/cancel instead.

configurations:write

Sökvägsparametrar

Fält Typ Beskrivning
configurationNumber Krävs string Configuration number of the configuration to discard.

Svar

204 Tom body.
404 ProblemDetails No configuration with that configuration number.
Fält Typ
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
409 ProblemDetails The configuration has become an order and can no longer be discarded.
Fält Typ
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable

Standardfel: 401 403 Felhantering

Exempel

curl
curl -X DELETE "https://api.erp.fluit.cloud/preview/configurations/{configurationNumber}" \
  -H "X-Api-Key: fluit_live_sk_..."
Svar 404
{
  "detail": "string",
  "instance": "string",
  "status": 42,
  "title": "string",
  "type": "string"
}

Bas-URL https://api.erp.fluit.cloud/preview. Svarsexemplet är genererat ur schemat: formen stämmer, värdena är påhittade.

POST /configurations/{configurationNumber}/order

Turn a configuration into a sales order

Creates a sales order with a single line for the configured product, priced at base price plus configuration surcharge through the same price hierarchy POST /preview/configurations/calculate uses.

Visa hela beskrivningen

The response is the same representation as GET /preview/orders/{orderNumber}, with the canonical URL in the `Location` header. The line is priced **now**, not from a stored quote: the price engine runs again at conversion, in the customer's own currency. Unchanged choices give the calculated price as long as the underlying prices still hold — a campaign starting or expiring in between will move it. The order is created in Draft. Add freight, extra lines or a delivery address through the order endpoints, then place it with POST /preview/orders/{orderNumber}/place. Behind the line, the configuration becomes a production work order carrying the exploded bill of materials and routing. The configuration itself is consumed: it stops appearing in GET /preview/configurations and its own GET returns `404` afterwards. Store the `orderNumber` from this response — it is the only link back to the configuration you just converted. Known error codes: `409 WorkOrder.NotEstimate` — already ordered. `409 WorkOrder.NoCustomer` — the configuration has no customer; attach one by passing `customerNumber` to reconfigure first. `409 WorkOrder.NoOutputItem` — the configuration has no item. `400 Warehouse.NoDefault` and `400 OrderType.NoDefault` — the tenant has no default warehouse or order type configured; that is a setup problem in Fluit, not something the request can fix. Note that the line is priced as a manual unit price, so automatic customer discounts do not apply to it. Price lists, agreements, campaigns and volume breaks are already reflected in the base price.

configurations:write Kräver Idempotency-Key

Sökvägsparametrar

Fält Typ Beskrivning
configurationNumber Krävs string Configuration number of the saved configuration to turn into an order.

Body

Fält Typ Beskrivning
requestedDeliveryDate string(date) · nullable Delivery date to request on the order. Omit to leave it open.

Svar

201 PublicOrderDetailResponse
  • Location — URL of the newly created resource.
Fält Typ Beskrivning
createdDate string(date-time) UTC timestamp when the order was created.
currencyCode string · nullable ISO 4217 currency code for all monetary values on this order.
customerName string · nullable Display name of the customer at the time of ordering. Null if not set.
customerNumber string · nullable Customer number of the buyer. Null if the order has no customer.
customerReference string · nullable Customer's own reference / purchase order number. Null if not provided.
deliveredPercentage decimal Share of the ordered quantity that has been delivered, 0-100. Serialised as a decimal string.
deliveryAddress DeliveryAddress Delivery address attached to a sales order.
deliveryStatus enum How much of an order has actually been delivered. Derived from the ordered and delivered quantities on the order lines, so it stays correct for partial deliveries — the common case in B2B, where one line ships today and the rest next week. NotDelivered PartiallyDelivered FullyDelivered
deliveryTermCode string · nullable Delivery / Incoterm code, e.g. `DAP`. Null if not set.
deliveryTermName string · nullable Display name of the delivery term. Null if not set.
externalNotes string · nullable Free-text notes printed on order documents. Null if not set.
id string(uuid) Internal unique identifier (UUID v7).
lines OrderLine[] · nullable Order lines. Empty list if the order has no lines.
links Links Hypermedia links for a public API resource. Exposed as a computed `links` property on the public response DTOs so that create and read responses carry the same self-reference — the canonical URL is derived from the business key already present on the DTO and can never drift from the route it points at.
modifiedDate string(date-time) · nullable UTC timestamp of the last modification. Null if never modified after creation.
orderDate string(date) Date the order was placed (ISO 8601 date).
orderNumber string · nullable Unique order number, e.g. `ORD-2024-00042`.
paymentTermCode string · nullable Payment term code, e.g. `NET30`. Null if not set.
paymentTermName string · nullable Display name of the payment term. Null if not set.
plannedDeliveryDate string(date) · nullable Planned delivery date set by fulfilment. Null if not yet planned.
requestedDeliveryDate string(date) · nullable Requested delivery date from the customer. Null if not provided.
shippingMethodName string · nullable Name of the shipping method / carrier. Null if not set.
status enum Sales order status values exposed via the Public API. Draft orders are never visible through the public API. This describes where the order stands commercially, not what the warehouse is doing. Warehouse progress belongs to shipments (see GET /preview/orders/{id}/shipments) — an order can be split across several of them. How much has actually left the building is reported separately as PublicApi.Preview.Orders.Queries.PublicDeliveryStatus. Placed Released Closed Cancelled
totalAmount decimal Total order amount excluding tax, in the order currency. Serialised as a decimal string.
totalAmountIncludingTax decimal Total order amount including tax, in the order currency. Serialised as a decimal string.
totalVat decimal Total VAT / tax amount, in the order currency. Serialised as a decimal string.
400 ProblemDetails The tenant has no default warehouse or no default order type configured, so the order cannot be created. That is a setup problem in Fluit, not something the request can fix.
Fält Typ
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
404 ProblemDetails No configuration with that configuration number.
Fält Typ
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
409 ProblemDetails The configuration has already become an order, has no customer attached, or has no item.
Fält Typ
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable

Standardfel: 401 403 Felhantering

Exempel

curl
curl -X POST "https://api.erp.fluit.cloud/preview/configurations/{configurationNumber}/order" \
  -H "X-Api-Key: fluit_live_sk_..." \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d @body.json
With a requested delivery date
{
  "requestedDeliveryDate": "2026-09-15"
}
No body — order with an open delivery date
{}
Svar 201
{
  "createdDate": "2026-06-11T09:24:13.418",
  "currencyCode": "SEK",
  "customerName": "Acme AB",
  "customerNumber": "CUST-001",
  "customerReference": "PO-2026-042",
  "deliveredPercentage": "12.50",
  "deliveryAddress": {
    "city": "Stockholm",
    "contactPerson": "string",
    "countryCode": "SE",
    "email": "order@acme.se",
    "name": "Acme AB",
    "phone": "+46 8 123 45 67",
    "postalCode": "11122",
    "street1": "Storgatan 1",
    "street2": "string"
  },
  "deliveryStatus": "NotDelivered",
  "deliveryTermCode": "STD",
  "deliveryTermName": "DAP Stockholm",
  "externalNotes": "string",
  "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
  "lines": [
    {
      "deliveredQuantity": "10",
      "discountPercent": "12.50",
      "itemName": "Widget A",
      "itemNumber": "WIDGET-A",
      "lineNumber": 1,
      "lineTotal": "299.00",
      "lineTotalIncludingTax": "299.00",
      "notes": "string",
      "outstandingQuantity": "10",
      "plannedDeliveryDate": "2026-06-11",
      "quantity": "10",
      "status": "Open",
      "taxPercent": "12.50",
      "unit": "st",
      "unitPrice": "299.00"
    }
  ],
  "links": {
    "self": "string"
  },
  "modifiedDate": "2026-06-11T09:24:13.418",
  "orderDate": "2026-06-11",
  "orderNumber": "SO-2026-1041",
  "paymentTermCode": "STD",
  "paymentTermName": "30 days net",
  "plannedDeliveryDate": "2026-06-11",
  "requestedDeliveryDate": "2026-06-11",
  "shippingMethodName": "Parcel, next day",
  "status": "Placed",
  "totalAmount": "299.00",
  "totalAmountIncludingTax": "299.00",
  "totalVat": "299.00"
}

Bas-URL https://api.erp.fluit.cloud/preview. Svarsexemplet är genererat ur schemat: formen stämmer, värdena är påhittade.

POST /configurations/{configurationNumber}/reconfigure

Change a saved configuration

Changes a saved configuration and re-runs the engine. Every field is optional and omitting one leaves that part alone: - `values` **omitted** keeps the current choices — that is how you change only the quantity.

Visa hela beskrivningen

When present it is a **full replacement**, not a patch: anything not in the list is cleared, and an empty array clears every choice. - `quantity` omitted keeps the current quantity. - `customerNumber` omitted keeps the current customer. Set it to claim a configuration that was saved anonymously — a configuration must have a customer before it can be ordered. Returns `200` with the updated configuration, including the recalculated `unitPrice`, rather than `204`. That is a deliberate departure from the usual action-endpoint convention — the whole point of reconfiguring is the new result, and forcing a follow-up GET for it would be wasteful. Returns `409` (`Configuration.NotConfigurable`) once the configuration has become an order: an ordered configuration is frozen, since changing it would silently change what the customer bought. The status is checked before the body, so an ordered configuration returns the conflict regardless of what the payload contains. Change the order line instead, or create a new configuration. Invalid values return `400` with the offending `FeatureExplosion.*` code. Use POST /preview/configurations/calculate first to see all problems at once.

configurations:write Kräver Idempotency-Key

Sökvägsparametrar

Fält Typ Beskrivning
configurationNumber Krävs string Configuration number of the configuration to change.

Body krävs

Fält Typ Beskrivning
customerNumber string · nullable Customer to attach. Use it to claim a configuration that was saved anonymously. Omit to keep the current customer.
quantity decimal · nullable New quantity. Omit to keep the current one.
values ConfigurationValue[] · nullable The full set of chosen values, replacing the previous set — anything left out of the list is cleared. Omit the field entirely to keep the current choices, e.g. when only changing the quantity. Send an empty array to clear every choice.

Svar

200 PublicConfigurationResponse
Fält Typ Beskrivning
basePricePerUnit decimal · nullable The item's own price per unit from the price engine. Null on the list endpoint.
configurationNumber string · nullable Unique configuration number — business key, e.g. `WO-1042`. Use it in every follow-up call.
configurationPriceImpact decimal Total configuration surcharge for the whole quantity, in the tenant base currency, before the price engine runs. The priced fields below express the same thing in the customer's currency.
configurationSurchargePerUnit decimal · nullable What the chosen options add per unit. Null on the list endpoint.
createdDate string(date-time) UTC timestamp when the configuration was created.
currencyCode string · nullable ISO 4217 code the priced fields below are expressed in. Null on the list endpoint — see the note on PublicApi.Preview.Configurations.Queries.PublicConfigurationResponse.UnitPrice.
customerName string · nullable Customer name. Null when the configuration is anonymous.
customerNumber string · nullable Customer number the configuration belongs to. Required before it can become an order. Null when the configuration is anonymous.
description string · nullable Free-text description, e.g. which window the curtain is for. Null if not set.
itemName string · nullable Display name of the configured product.
itemNumber string · nullable Item number of the configured product.
links Links Hypermedia links for a public API resource. Exposed as a computed `links` property on the public response DTOs so that create and read responses carry the same self-reference — the canonical URL is derived from the business key already present on the DTO and can never drift from the route it points at.
modifiedDate string(date-time) · nullable UTC timestamp of the last modification. Null if never modified after creation.
priceListName string · nullable Name of the price list that produced the base price. Null when no price list matched or on the list endpoint.
priceSource string · nullable Where the base price came from in the price hierarchy, e.g. `CustomerPriceList`. Null on the list endpoint.
quantity decimal How many units of the configured product. Expressed in the item's base unit.
title string · nullable Free-text title. Defaults to the item name when not supplied.
totalPrice decimal · nullable Unit price × quantity, excluding VAT, freight and order-level discounts. Null on the list endpoint.
unitPrice decimal · nullable Base price plus surcharge — the unit price the order line will get, priced as of now. Only populated when a single configuration is returned (create, get by number, reconfigure). On GET /preview/configurations it is `null`: pricing a whole page would mean one price engine run per row. Read one configuration, or use POST /preview/configurations/calculate, when you need the price for a list.
values ConfigurationValue[] · nullable The chosen values, one per feature that has a value.
warehouseCode string · nullable Warehouse code the configuration is planned against. Null when not set.
400 ProblemDetails A chosen value is invalid: a required feature is missing, a number falls outside its bounds, an option does not belong to its feature, or the quantity is zero or less.
Fält Typ
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
404 ProblemDetails No configuration with that configuration number.
Fält Typ
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
409 ProblemDetails The configuration has become an order and is frozen, or it has no item to configure.
Fält Typ
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable

Standardfel: 401 403 Felhantering

Exempel

curl
curl -X POST "https://api.erp.fluit.cloud/preview/configurations/{configurationNumber}/reconfigure" \
  -H "X-Api-Key: fluit_live_sk_..." \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d @body.json
Attach a customer to an anonymously saved configuration
{
  "customerNumber": "CUST-001"
}
New measurements and a different fabric
{
  "quantity": "2",
  "values": [
    {
      "featureCode": "WIDTH",
      "number": "260"
    },
    {
      "featureCode": "HEIGHT",
      "number": "180"
    },
    {
      "featureCode": "FABRIC",
      "optionCode": "VELVET-DEEPBLUE"
    },
    {
      "boolean": true,
      "featureCode": "LINING"
    }
  ]
}
Change the quantity only — the choices are kept
{
  "quantity": "3"
}
Svar 200
{
  "basePricePerUnit": "299.00",
  "configurationNumber": "CFG-2026-0058",
  "configurationPriceImpact": "299.00",
  "configurationSurchargePerUnit": "299.00",
  "createdDate": "2026-06-11T09:24:13.418",
  "currencyCode": "SEK",
  "customerName": "Acme AB",
  "customerNumber": "CUST-001",
  "description": "string",
  "itemName": "Widget A",
  "itemNumber": "WIDGET-A",
  "links": {
    "self": "string"
  },
  "modifiedDate": "2026-06-11T09:24:13.418",
  "priceListName": "Retail 2026",
  "priceSource": "string",
  "quantity": "10",
  "title": "string",
  "totalPrice": "299.00",
  "unitPrice": "299.00",
  "values": [
    {
      "boolean": true,
      "featureCode": "STD",
      "featureName": "Width",
      "featureType": "Text",
      "isMeasured": true,
      "itemNumber": "WIDGET-A",
      "number": "299.00",
      "optionCode": "STD",
      "optionName": "White",
      "text": "string"
    }
  ],
  "warehouseCode": "MAIN"
}

Bas-URL https://api.erp.fluit.cloud/preview. Svarsexemplet är genererat ur schemat: formen stämmer, värdena är påhittade.

POST /configurations/calculate

Price and validate a configuration

Runs the configuration through the same engine and the same price hierarchy a real order uses, without saving anything.

Visa hela beskrivningen

Call it on every change while the customer configures. **This is a live price, not a locked quote.** The order re-prices when the configuration is converted, so the same choices give the same `unitPrice` only while the underlying prices hold: a campaign that starts or expires in between, or an agreement that changes, moves the price. The order also always uses the customer's own currency — a `currencyCode` passed here affects the calculation only. Persisting an agreed price is not supported yet; treat a quoted price as valid for the moment it was calculated. **An incomplete configuration is not an error.** Missing required values, numbers outside `minValue`/`maxValue` and options that do not belong to their feature all come back as `200` with `isValid: false` and every problem listed in `validationErrors` (`featureCode`, `code`, `message`), so the app can show them at the right field. The price fields are null in that case. Only structural problems — unknown `itemNumber`, `customerNumber`, `featureCode` or `optionCode` — return `400`. `resolvedValues` carries the derived numbers (area, fabric consumption, …) computed from `Calculated` features, so the app does not have to reimplement the formulas. `unitPrice` excludes VAT, freight and order-level discounts. Note that a configured line is priced as a manual unit price, so automatic customer discounts (the discount engine) do not apply to it; price lists, agreements, campaigns and volume breaks do. A choice whose option carries a `linkedItemNumber` adds that item to the bill of materials but does **not** change `unitPrice` — see the note on `priceImpact` in the configuration schema. This endpoint has no side effects and is the one POST under /preview that does **not** require an `Idempotency-Key` header.

configurations:read

Frågeparametrar

Fält Typ Beskrivning
includeBreakdown Krävs boolean Also returns components[] (the exploded bill of materials) and operations[] (the production steps). Off by default — that is costing data, and a consumer-facing configurator should not ship it to the browser.

Body krävs

Fält Typ Beskrivning
currencyCode string · nullable ISO 4217 currency to price in. Defaults to the customer's currency, then the tenant base currency.
customerNumber string · nullable Customer to price for. Applies their price lists, agreements and currency. Omit for the default price.
itemNumber Krävs string Item number of the configurable product.
quantity decimal How many units to price. Must be greater than zero.
values ConfigurationValue[] · nullable The chosen values. Omit or leave empty to price the item with no choices made.

Svar

200 PublicConfigurationCalculationResponse
Fält Typ Beskrivning
basePricePerUnit decimal · nullable The item's own price per unit from the price engine — the same number GET /preview/items/{itemNumber}/price returns. Null when the configuration is invalid.
components ConfigurationComponent[] · nullable The exploded bill of materials. Only present when `?includeBreakdown=true`.
configurationSurchargePerUnit decimal · nullable What the chosen options add per unit. Null when the configuration is invalid.
currencyCode string · nullable ISO 4217 code the amounts below are expressed in. Null when the configuration is invalid.
isValid boolean Whether the configuration is complete and within bounds. When false, the price fields are null.
itemName string · nullable Display name of the configured product.
itemNumber string · nullable Item number of the configured product.
operations ConfigurationOperation[] · nullable The exploded production steps. Only present when `?includeBreakdown=true`.
priceListName string · nullable Name of the price list that produced the base price. Null when no price list matched.
priceSource string · nullable Where the base price came from in the price hierarchy, e.g. `CustomerPriceList`, `ItemSalesPrice`, `NotFound`. Null when the configuration is invalid.
quantity decimal The quantity the price was calculated for.
resolvedValues ConfigurationResolvedValue[] · nullable The resolved numeric values, including those derived by formula (area, fabric consumption, …). Show these back to the customer. Empty when the configuration is invalid.
totalPrice decimal · nullable Unit price × quantity, excluding VAT, shipping and order-level discounts. Null when the configuration is invalid.
unitPrice decimal · nullable Base price plus surcharge — the unit price the order line will get. Null when the configuration is invalid.
validationErrors ConfigurationValidationError[] · nullable Every problem found, one entry per offending feature. Empty when `isValid` is true.
400 ProblemDetails A structural problem: unknown itemNumber, customerNumber, featureCode or optionCode, or a quantity of zero or less. An incomplete or invalid set of choices is not an error here — it comes back as 200 with isValid: false.
Fält Typ
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable

Standardfel: 401 403 Felhantering

Exempel

curl
curl -X POST "https://api.erp.fluit.cloud/preview/configurations/calculate" \
  -H "X-Api-Key: fluit_live_sk_..." \
  -H "Content-Type: application/json" \
  -d @body.json
Full — a made-to-measure curtain for a specific customer
{
  "currencyCode": "SEK",
  "customerNumber": "CUST-001",
  "itemNumber": "CURTAIN-PLEAT",
  "quantity": "2",
  "values": [
    {
      "featureCode": "WIDTH",
      "number": "240"
    },
    {
      "featureCode": "HEIGHT",
      "number": "180"
    },
    {
      "featureCode": "FABRIC",
      "optionCode": "LINEN-NATURAL"
    },
    {
      "boolean": true,
      "featureCode": "LINING"
    },
    {
      "featureCode": "RAIL",
      "itemNumber": "RAIL-3M"
    },
    {
      "featureCode": "LABEL",
      "text": "Living room, window 2"
    }
  ]
}
Minimal — just the item and a quantity
{
  "itemNumber": "CURTAIN-PLEAT",
  "quantity": "1"
}
Svar 200
{
  "basePricePerUnit": "299.00",
  "components": [
    {
      "isQuantityFromFormula": true,
      "itemName": "Widget A",
      "itemNumber": "WIDGET-A",
      "quantity": "10",
      "sourceFeatureCode": "STD",
      "unitCode": "st"
    }
  ],
  "configurationSurchargePerUnit": "299.00",
  "currencyCode": "SEK",
  "isValid": true,
  "itemName": "Widget A",
  "itemNumber": "WIDGET-A",
  "operations": [
    {
      "name": "Acme AB",
      "plannedDurationMinutes": 42,
      "sequence": 42,
      "setupTimeMinutes": 42
    }
  ],
  "priceListName": "Retail 2026",
  "priceSource": "string",
  "quantity": "10",
  "resolvedValues": [
    {
      "featureCode": "STD",
      "featureName": "Width",
      "isCalculated": true,
      "value": "299.00"
    }
  ],
  "totalPrice": "299.00",
  "unitPrice": "299.00",
  "validationErrors": [
    {
      "code": "string",
      "featureCode": "STD",
      "message": "string"
    }
  ]
}

Bas-URL https://api.erp.fluit.cloud/preview. Svarsexemplet är genererat ur schemat: formen stämmer, värdena är påhittade.

GET /items/{itemNumber}/configuration

Get an item's configuration schema

Returns everything needed to render a configurator form for one item: its configurable features, their input types, bounds, defaults and price impact, plus the allowed options for each selection.

Visa hela beskrivningen

This is the first call in the configurator flow. Each feature's `featureType` decides which field to send back in `values[]`: `Text` → `text`, `Number` → `number` (bounded by `minValue`/`maxValue`), `Selection` → `optionCode`, `Boolean` → `boolean`, `ItemSelection` → `itemNumber`. `Calculated` features take no input — they are derived from the others and their results come back in `resolvedValues` from POST /preview/configurations/calculate. `features` is not paginated: a configurator cannot render a half-loaded form, so the whole schema always ships in one response. An item with no configurable features returns `isConfigurable: false` and an empty list — filter GET /preview/items with `?isConfigurable=true` to find the configurable ones. Prices here are the tenant base-currency list prices; use POST /preview/configurations/calculate for the real, customer-specific price of a given set of choices.

configurations:read

Sökvägsparametrar

Fält Typ Beskrivning
itemNumber Krävs string Item number of the product to read the configuration schema for.

Svar

200 PublicItemConfigurationResponse
Fält Typ Beskrivning
baseUnitCode string · nullable Code of the item's base unit of measure, e.g. `st`. The quantity on a configuration is expressed in this unit. Null if not set.
decimalPlaces integer Number of decimals allowed on the quantity (0–6).
description string · nullable Long-form description. Null if not set.
features ConfigurationFeature[] · nullable The configurable features, in the order they should be presented. Empty when the item is not configurable.
isConfigurable boolean Whether the item has any configurable features at all. False means `features` is empty and the item is ordered as-is.
itemNumber string · nullable Unique item number — business key, e.g. `CURTAIN-PLEAT`.
links Links Hypermedia links for a public API resource. Exposed as a computed `links` property on the public response DTOs so that create and read responses carry the same self-reference — the canonical URL is derived from the business key already present on the DTO and can never drift from the route it points at.
name string · nullable Display name / product name.
salesPrice decimal · nullable Default sales price per unit in the tenant base currency, before any configuration surcharge. Use POST /preview/configurations/calculate for the real, customer-specific price. Null if not set.
404 ProblemDetails No item with that item number.
Fält Typ
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable

Standardfel: 401 403 Felhantering

Exempel

curl
curl "https://api.erp.fluit.cloud/preview/items/{itemNumber}/configuration" \
  -H "X-Api-Key: fluit_live_sk_..."
Svar 200
{
  "baseUnitCode": "st",
  "decimalPlaces": 2,
  "description": "string",
  "features": [
    {
      "affectsPrice": true,
      "code": "string",
      "condition": "string",
      "defaultValue": "string",
      "description": "string",
      "featureType": "Text",
      "isRequired": true,
      "maxValue": "299.00",
      "minValue": "299.00",
      "name": "Width",
      "options": [
        {
          "code": "string",
          "isDefault": true,
          "linkedItemNumber": "ABC-001",
          "name": "White",
          "priceImpact": "299.00",
          "sortOrder": 42
        }
      ],
      "priceImpactPerUnit": "299.00",
      "requiresMeasurement": true,
      "selectableItemCategoryCode": "STD",
      "sortOrder": 42
    }
  ],
  "isConfigurable": true,
  "itemNumber": "WIDGET-A",
  "links": {
    "self": "string"
  },
  "name": "Widget A",
  "salesPrice": "299.00"
}

Bas-URL https://api.erp.fluit.cloud/preview. Svarsexemplet är genererat ur schemat: formen stämmer, värdena är påhittade.

Scheman

Objekten som gruppens anrop refererar till. Fälttabellerna ovan går ett steg djupt och länkar hit i stället för att upprepa samma schema på varje endpoint.

ConfigurationComponent

PublicConfigurationComponent

A material line the configuration explodes into.

Fält Typ Beskrivning
isQuantityFromFormula boolean Whether the quantity was computed from a formula (e.g. fabric from width × height) rather than being fixed.
itemName string · nullable Display name of the component.
itemNumber string · nullable Item number of the component.
quantity decimal Quantity needed for the whole configured quantity.
sourceFeatureCode string · nullable Code of the feature that added this component, when it came from a choice rather than the static bill of materials. Null otherwise.
unitCode string · nullable Code of the component's base unit, e.g. `m`. Null if not set.

ConfigurationFeature

PublicConfigurationFeature

One configurable field on an item.

Fält Typ Beskrivning
affectsPrice boolean Whether the field's value changes the price.
code string · nullable Stable code — the business key used in `values[].featureCode`, e.g. `WIDTH`. Unique per item.
condition string · nullable Condition for when the field applies, e.g. `MODELL=SWING` or `BREDD>1000`. Null means the field always applies. A configurator should hide the field while the condition is false; a value sent for a hidden field is ignored, and a required hidden field is not reported as missing. Syntax is `<featureCode><operator><value>`. Number, Boolean and Calculated fields compare with `=`, `<>`, `<`, `>`, `<=` and `>=`; Selection and Text compare their option code / text with `=` and `<>` only.
defaultValue string · nullable Default value as a string, to prefill the field. Interpret according to `featureType`. Null if not set.
description string · nullable Help text for the field. Null if not set.
featureType enum The kind of input a configurable feature takes, exposed via the Public API. Mirrors `Domain.Items.ItemFeatureType` name-for-name and value-for-value so the query projections can cast directly — a cast is translatable to SQL where a switch over a helper method is not. `PublicConfigurationEnumParityTests` fails the build if the two ever drift apart, which is what stops a new domain value from silently serialising as a bare number. The value determines which field to send on a configuration value: `text` for PublicApi.Preview.Configurations.Queries.PublicItemFeatureType.Text, `number` for PublicApi.Preview.Configurations.Queries.PublicItemFeatureType.Number, `optionCode` for PublicApi.Preview.Configurations.Queries.PublicItemFeatureType.Selection, `boolean` for PublicApi.Preview.Configurations.Queries.PublicItemFeatureType.Boolean and `itemNumber` for PublicApi.Preview.Configurations.Queries.PublicItemFeatureType.ItemSelection. PublicApi.Preview.Configurations.Queries.PublicItemFeatureType.Calculated takes no input at all. Text Number Selection Boolean ItemSelection Calculated
isRequired boolean Whether a value is required. A configuration missing a required value is reported as invalid, not rejected.
maxValue decimal · nullable Highest accepted value for `Number` features. Null for other types.
minValue decimal · nullable Lowest accepted value for `Number` features. Null for other types.
name string · nullable Display name / field label, e.g. `Width (cm)`.
options ConfigurationOption[] · nullable For `Selection`: the allowed choices, in presentation order. Empty for other types.
priceImpactPerUnit decimal · nullable Price change per unit of the value, in the tenant base currency. For `Number` it is multiplied by the value, for `Boolean` it applies once when true. Null when the field does not affect the price <b>or</b> when its impact is formula-driven — a field can have `affectsPrice` true with a null `priceImpactPerUnit` when the surcharge follows the measurements or the selected article. POST /preview/configurations/calculate is the only place that returns the resulting price.
requiresMeasurement boolean Whether the value is expected to come from an on-site measurement rather than being picked by the customer.
selectableItemCategoryCode string · nullable For `ItemSelection`: the category the selectable items are restricted to. Pass it as `?categoryCode=` to GET /preview/items to build the picker. Items outside the category are rejected. Null when unrestricted.
sortOrder integer Presentation order, ascending.

ConfigurationOperation

PublicConfigurationOperation

A production step the configuration explodes into.

Fält Typ Beskrivning
name string · nullable Name of the step, e.g. `Cut`, `Sew`.
plannedDurationMinutes integer Planned duration in minutes, including setup.
sequence integer Position in the routing, ascending.
setupTimeMinutes integer Setup time in minutes, included in `plannedDurationMinutes`.

ConfigurationOption

PublicConfigurationOption

One allowed choice on a `Selection` feature.

Fält Typ Beskrivning
code string · nullable Stable code — the business key used in `values[].optionCode`. Unique per feature.
isDefault boolean Whether this is the preselected choice.
linkedItemNumber string · nullable The item this choice adds to the bill of materials, e.g. the actual fabric article. Affects what gets built and its cost, not the sales price — see PublicApi.Preview.Configurations.Queries.PublicConfigurationOption.PriceImpact. Null when the choice has no material of its own.
name string · nullable Display name of the choice, e.g. `Natural linen`.
priceImpact decimal · nullable Price change when this choice is picked, in the tenant base currency. Null when the choice is free. <b>Ignored when `linkedItemNumber` is set.</b> A linked item is added to the bill of materials as a cost line, not as a sales line, so such a choice does not change the customer's `unitPrice` at all. Price a choice by giving it a `priceImpact`<i>without</i> a linked item, or by driving the price from a `Calculated` feature.
sortOrder integer Presentation order, ascending.

ConfigurationResolvedValue

PublicConfigurationResolvedValue

A resolved numeric value — entered, or derived from other values by a formula.

Fält Typ Beskrivning
featureCode string · nullable Code of the feature.
featureName string · nullable Display name of the feature.
isCalculated boolean Whether the value was derived by formula rather than entered by the customer.
value decimal The resolved value. Booleans resolve to 1 or 0.

ConfigurationValidationError

PublicConfigurationValidationError

A problem with one chosen value, meant to be shown at the corresponding form field.

Fält Typ Beskrivning
code string · nullable Stable error code, e.g. `FeatureExplosion.RequiredFeatureMissing`, `FeatureExplosion.ValueOutOfRange`, `FeatureExplosion.InvalidOption`.
featureCode string · nullable Code of the feature the problem belongs to.
message string · nullable Human-readable explanation.

ConfigurationValue

PublicConfigurationValue

One chosen value on a saved configuration. Exactly one value field is set, matching `featureType`.

Fält Typ Beskrivning
boolean boolean · nullable Boolean value, for `Boolean` features. Null otherwise.
featureCode string · nullable Code of the feature this value belongs to.
featureName string · nullable Display name of the feature.
featureType enum The kind of input a configurable feature takes, exposed via the Public API. Mirrors `Domain.Items.ItemFeatureType` name-for-name and value-for-value so the query projections can cast directly — a cast is translatable to SQL where a switch over a helper method is not. `PublicConfigurationEnumParityTests` fails the build if the two ever drift apart, which is what stops a new domain value from silently serialising as a bare number. The value determines which field to send on a configuration value: `text` for PublicApi.Preview.Configurations.Queries.PublicItemFeatureType.Text, `number` for PublicApi.Preview.Configurations.Queries.PublicItemFeatureType.Number, `optionCode` for PublicApi.Preview.Configurations.Queries.PublicItemFeatureType.Selection, `boolean` for PublicApi.Preview.Configurations.Queries.PublicItemFeatureType.Boolean and `itemNumber` for PublicApi.Preview.Configurations.Queries.PublicItemFeatureType.ItemSelection. PublicApi.Preview.Configurations.Queries.PublicItemFeatureType.Calculated takes no input at all. Text Number Selection Boolean ItemSelection Calculated
isMeasured boolean Whether the value came from an on-site measurement.
itemNumber string · nullable Item number of the chosen item, for `ItemSelection` features. Null otherwise.
number decimal · nullable Numeric value, for `Number` and `Calculated` features. Null otherwise.
optionCode string · nullable Code of the chosen option, for `Selection` features. Null otherwise.
optionName string · nullable Display name of the chosen option. Null unless `optionCode` is set.
text string · nullable Text value, for `Text` features. Null otherwise.

ConfigurationValue

PublicConfigurationValueInput

One chosen value in a configuration request. Shared by POST /preview/configurations/calculate, POST /preview/configurations and POST /preview/configurations/{configurationNumber}/reconfigure so the same payload works throughout the flow. Send exactly the field that matches the feature's `featureType` from GET /preview/items/{itemNumber}/configuration; the others are ignored. `Calculated` features take no input — their result comes back in `resolvedValues`.

Fält Typ Beskrivning
boolean boolean · nullable Value for a `Boolean` feature.
featureCode Krävs string Code of the feature being set, e.g. `WIDTH`. Must exist on the item.
itemNumber string · nullable Item number of the chosen item for an `ItemSelection` feature.
number decimal · nullable Value for a `Number` feature, e.g. `"240"`.
optionCode string · nullable Code of the chosen option for a `Selection` feature. Must belong to that feature.
text string · nullable Value for a `Text` feature.

DeliveryAddress

PublicDeliveryAddressResponse

Delivery address attached to a sales order.

Fält Typ Beskrivning
city string · nullable City name.
contactPerson string · nullable Contact person at the delivery address. Null if not set.
countryCode string · nullable ISO 3166-1 alpha-2 country code, e.g. `SE`.
email string · nullable Email address at the delivery address. Null if not set.
name string · nullable Recipient company or person name.
phone string · nullable Phone number at the delivery address. Null if not set.
postalCode string · nullable Postal / ZIP code.
street1 string · nullable Street address line 1.
street2 string · nullable Street address line 2 (c/o, suite, etc.). Null if not set.

OrderLine

PublicOrderLineResponse

A single order line returned as part of a sales order detail response.

Fält Typ Beskrivning
deliveredQuantity decimal Quantity already delivered / shipped. Serialised as a decimal string.
discountPercent decimal Line discount in percent (0–100). Serialised as a decimal string.
itemName string · nullable Display name of the ordered item at the time of ordering.
itemNumber string · nullable Item number of the ordered item.
lineNumber integer 1-based sequential line number within the order.
lineTotal decimal Line total excluding tax (UnitPrice × Quantity × (1 − DiscountPercent / 100)). Serialised as a decimal string.
lineTotalIncludingTax decimal Line total including tax. Serialised as a decimal string.
notes string · nullable Free-text line notes. Null if not set.
outstandingQuantity decimal Remaining quantity not yet delivered (Quantity − DeliveredQuantity). Serialised as a decimal string.
plannedDeliveryDate string(date) · nullable Planned delivery date for this specific line. Null if not yet set.
quantity decimal Ordered quantity. Serialised as a decimal string.
status enum Sales order line status values exposed via the Public API. Draft is intentionally omitted. Open Delivered Cancelled
taxPercent decimal Applicable tax / VAT rate in percent. Serialised as a decimal string.
unit string · nullable Unit of measure code, e.g. `st`, `kg`.
unitPrice decimal Net unit price in the order currency. Serialised as a decimal string.