Hoppa till innehållet

Catalog

Products, categories, brands, search, facets and type-ahead. Products are addressed by slug or id, and only what is published in the current channel is visible. Includes the product feed for Google Merchant and the binary endpoints that serve images and documents.

15 calls GET POST Base URL https://api.erp.fluit.cloud/ecom

Authentication, error codes, rate limits, idempotency and pagination apply to every call and are documented once under Getting started.

GET /assets/{tenantId}/{id}

Get product image

Serves a public product image. No authentication required. Tenant resolved from URL. Pass ?w= with one of the supported widths to get a resized WebP variant for responsive srcset.

Path parameters

Field Type
tenantId Required string(uuid)
id Required string(uuid)

Query parameters

Field Type
w integer

Responses

200 Empty body.
429 Rate limit exceeded. Wait the number of seconds given in Retry-After. The body is problem-shaped application/json, not application/problem+json. This API sends no X-RateLimit-* headers — the quota is discovered here.
  • Retry-After — Seconds to wait before retrying.

Standard errors: 400 404 Errors

Examples

curl
curl "https://api.erp.fluit.cloud/ecom/assets/{tenantId}/{id}" \
  -H "X-Tenant-Id: $FLUIT_TENANT_ID" \
  -H "X-Channel: web"

Base URL https://api.erp.fluit.cloud/ecom.

GET /assets/{tenantId}/{id}/download

Get product document

Serves a public product document (datasheet, manual, firmware). No authentication required. Tenant resolved from URL. PDFs are served inline, everything else as a download.

Path parameters

Field Type
tenantId Required string(uuid)
id Required string(uuid)

Responses

200 Empty body.
429 Rate limit exceeded. Wait the number of seconds given in Retry-After. The body is problem-shaped application/json, not application/problem+json. This API sends no X-RateLimit-* headers — the quota is discovered here.
  • Retry-After — Seconds to wait before retrying.

Standard errors: 404 Errors

Examples

curl
curl "https://api.erp.fluit.cloud/ecom/assets/{tenantId}/{id}/download" \
  -H "X-Tenant-Id: $FLUIT_TENANT_ID" \
  -H "X-Channel: web"

Base URL https://api.erp.fluit.cloud/ecom.

GET /catalog/brands

Get brands (suppliers) by id

Returns display data for the suppliers referenced by a Brands section.

Supports ETag

Query parameters

Field Type
ids string

Responses

200 BrandsResponse
Field Type
brands Brand[] · nullable
304 Empty body.
429 Rate limit exceeded. Wait the number of seconds given in Retry-After. The body is problem-shaped application/json, not application/problem+json. This API sends no X-RateLimit-* headers — the quota is discovered here.
  • Retry-After — Seconds to wait before retrying.

Examples

curl
curl "https://api.erp.fluit.cloud/ecom/catalog/brands" \
  -H "X-Tenant-Id: $FLUIT_TENANT_ID" \
  -H "X-Channel: web"
Response 200
{
  "brands": [
    {
      "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
      "name": "Fluit",
      "website": "string"
    }
  ]
}

Base URL https://api.erp.fluit.cloud/ecom. The response example is generated from the schema: the shape is right, the values are made up.

GET /catalog/categories

Get category tree

Returns the hierarchical category tree for navigation.

Supports ETag

Query parameters

Field Type
parentId string
ids string

Responses

200 CategoriesResponse
Field Type
categories Category[] · nullable
304 Empty body.
429 Rate limit exceeded. Wait the number of seconds given in Retry-After. The body is problem-shaped application/json, not application/problem+json. This API sends no X-RateLimit-* headers — the quota is discovered here.
  • Retry-After — Seconds to wait before retrying.

Examples

curl
curl "https://api.erp.fluit.cloud/ecom/catalog/categories" \
  -H "X-Tenant-Id: $FLUIT_TENANT_ID" \
  -H "X-Channel: web"
Response 200
{
  "categories": [
    {
      "children": [
        null
      ],
      "code": "string",
      "description": "string",
      "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
      "imageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
      "name": "Hand tools",
      "parentId": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
      "productCount": 42,
      "slug": "string",
      "sortOrder": 42
    }
  ]
}

Base URL https://api.erp.fluit.cloud/ecom. The response example is generated from the schema: the shape is right, the values are made up.

GET /catalog/filters

Get catalog filters

Returns filterable attributes with available values and product counts. Counts are scoped to the channel, the optional category and the optional search term.

Supports ETag

Query parameters

Field Type
category string
search string

Responses

200 CatalogFiltersResponse
Field Type
filters FilterGroup[] · nullable
304 Empty body.
429 Rate limit exceeded. Wait the number of seconds given in Retry-After. The body is problem-shaped application/json, not application/problem+json. This API sends no X-RateLimit-* headers — the quota is discovered here.
  • Retry-After — Seconds to wait before retrying.

Examples

curl
curl "https://api.erp.fluit.cloud/ecom/catalog/filters" \
  -H "X-Tenant-Id: $FLUIT_TENANT_ID" \
  -H "X-Channel: web"
Response 200
{
  "filters": [
    {
      "code": "string",
      "dataType": "string",
      "name": "Retail",
      "sortOrder": 42,
      "unit": "st",
      "values": [
        {
          "count": 42,
          "value": "string"
        }
      ]
    }
  ]
}

Base URL https://api.erp.fluit.cloud/ecom. The response example is generated from the schema: the shape is right, the values are made up.

GET /catalog/list-widgets

Get product list page widgets

Returns active ProductList_Banner and ProductList_Sidebar widgets matching the current channel and optional category.

Supports ETag

Query parameters

Field Type
categoryCode string

Responses

200 ListWidgetResponse[]
Field Type
cssClass string · nullable
htmlContent string · nullable
id string(uuid)
name string · nullable
placement string · nullable
sortOrder integer
style string · nullable
304 Empty body.
429 Rate limit exceeded. Wait the number of seconds given in Retry-After. The body is problem-shaped application/json, not application/problem+json. This API sends no X-RateLimit-* headers — the quota is discovered here.
  • Retry-After — Seconds to wait before retrying.

Standard errors: 404 Errors

Examples

curl
curl "https://api.erp.fluit.cloud/ecom/catalog/list-widgets" \
  -H "X-Tenant-Id: $FLUIT_TENANT_ID" \
  -H "X-Channel: web"
Response 200
[
  {
    "cssClass": "string",
    "htmlContent": "string",
    "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
    "name": "Acme AB",
    "placement": "string",
    "sortOrder": 42,
    "style": "string"
  }
]

Base URL https://api.erp.fluit.cloud/ecom. The response example is generated from the schema: the shape is right, the values are made up.

GET /catalog/product-feed

Product feed rows

Returns feed-ready product rows (identifiers, prices, availability, Google product category) for building Google Shopping and Meta catalog feeds. Page size is clamped to 1-1000.

Supports ETag

Query parameters

Field Type
page integer
pageSize integer

Responses

200 PagedResult_ProductFeedRowResponse

Paginated response: the fields below sit in items[], wrapped in totalCount, page, pageSize, totalPages, hasPreviousPage and hasNextPage. Paginated

Field Type Description
additionalImageUrls string[] · nullable
allowPreOrder boolean
brand string · nullable
countryOfOrigin string · nullable
currency string · nullable
depthCm decimal · nullable
description string · nullable
googleProductCategory string · nullable
grade string · nullable
gtin string · nullable
heightCm decimal · nullable
id string(uuid)
isOnSale boolean
itemGroupId string · nullable
itemNumber string · nullable
mainImageUrl string · nullable
mpn string · nullable
price decimal · nullable
priceIncludingVat decimal · nullable
priceValidFrom string(date) · nullable
priceValidTo string(date) · nullable
productType string · nullable
regularPrice decimal · nullable
regularPriceIncludingVat decimal · nullable
salesStartDate string(date) · nullable
seoSlug string · nullable
stockStatus enum InStock LowStock OutOfStock BackOrder
taxPercent decimal
title string · nullable
weightKg decimal · nullable
widthCm decimal · nullable
304 Empty body.
429 Rate limit exceeded. Wait the number of seconds given in Retry-After. The body is problem-shaped application/json, not application/problem+json. This API sends no X-RateLimit-* headers — the quota is discovered here.
  • Retry-After — Seconds to wait before retrying.

Examples

curl
curl "https://api.erp.fluit.cloud/ecom/catalog/product-feed" \
  -H "X-Tenant-Id: $FLUIT_TENANT_ID" \
  -H "X-Channel: web"
Response 200
{
  "hasNextPage": true,
  "hasPreviousPage": true,
  "items": [
    {
      "additionalImageUrls": [
        "https://cdn.fluit.cloud/assets/widget-a-front.jpg"
      ],
      "allowPreOrder": true,
      "brand": "string",
      "countryOfOrigin": "string",
      "currency": "string",
      "depthCm": "299.00",
      "description": "string",
      "googleProductCategory": "string",
      "grade": "string",
      "gtin": "string",
      "heightCm": "299.00",
      "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
      "isOnSale": true,
      "itemGroupId": "string",
      "itemNumber": "WIDGET-A",
      "mainImageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
      "mpn": "string",
      "price": "299.00",
      "priceIncludingVat": "299.00",
      "priceValidFrom": "2026-06-11",
      "priceValidTo": "2026-06-11",
      "productType": "string",
      "regularPrice": "299.00",
      "regularPriceIncludingVat": "299.00",
      "salesStartDate": "2026-06-11",
      "seoSlug": "string",
      "stockStatus": "InStock",
      "taxPercent": "12.50",
      "title": "string",
      "weightKg": "1.250",
      "widthCm": "299.00"
    }
  ],
  "page": 1,
  "pageSize": 50,
  "totalCount": 137,
  "totalPages": 3
}

Base URL https://api.erp.fluit.cloud/ecom. The response example is generated from the schema: the shape is right, the values are made up.

GET /catalog/products

List products

Returns a paginated list of products with optional filtering by category and search term. Pass ids=guid,guid to fetch a hand-picked set; without an explicit sort they are returned in the order given. Only includes products active on the current channel.

Supports ETag

Query parameters

Field Type
category string
search string
page integer
pageSize integer
sort string
ids string

Responses

200 PagedResult_ProductSummaryResponse

Paginated response: the fields below sit in items[], wrapped in totalCount, page, pageSize, totalPages, hasPreviousPage and hasNextPage. Paginated

Field Type Description
brand string · nullable
brandSlug string · nullable
id string(uuid)
incoming IncomingStock
isOnSale boolean
isPhasingOut boolean
itemNumber string · nullable
keySpecs ProductKeySpec[] · nullable
listPrice decimal · nullable
listPriceIncludingVat decimal · nullable
lowestPrice30Days decimal · nullable
lowestPrice30DaysIncludingVat decimal · nullable
mainImageUrl string · nullable
mpn string · nullable
name string · nullable
regularPrice decimal · nullable
regularPriceIncludingVat decimal · nullable
seoSlug string · nullable
stockStatus enum InStock LowStock OutOfStock BackOrder
taxPercent decimal
updatedAt string(date-time) · nullable
304 Empty body.
429 Rate limit exceeded. Wait the number of seconds given in Retry-After. The body is problem-shaped application/json, not application/problem+json. This API sends no X-RateLimit-* headers — the quota is discovered here.
  • Retry-After — Seconds to wait before retrying.

Examples

curl
curl "https://api.erp.fluit.cloud/ecom/catalog/products" \
  -H "X-Tenant-Id: $FLUIT_TENANT_ID" \
  -H "X-Channel: web"
Response 200
{
  "hasNextPage": true,
  "hasPreviousPage": true,
  "items": [
    {
      "brand": "string",
      "brandSlug": "string",
      "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
      "incoming": {
        "expectedDate": "2026-06-11",
        "isConfirmed": true,
        "quantity": 42
      },
      "isOnSale": true,
      "isPhasingOut": true,
      "itemNumber": "WIDGET-A",
      "keySpecs": [
        {
          "code": "string",
          "label": "string",
          "unit": "st",
          "value": "string"
        }
      ],
      "listPrice": "299.00",
      "listPriceIncludingVat": "299.00",
      "lowestPrice30Days": "299.00",
      "lowestPrice30DaysIncludingVat": "299.00",
      "mainImageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
      "mpn": "string",
      "name": "Widget A",
      "regularPrice": "299.00",
      "regularPriceIncludingVat": "299.00",
      "seoSlug": "string",
      "stockStatus": "InStock",
      "taxPercent": "12.50",
      "updatedAt": "2026-06-11T09:24:13.418"
    }
  ],
  "page": 1,
  "pageSize": 50,
  "totalCount": 137,
  "totalPages": 3
}

Base URL https://api.erp.fluit.cloud/ecom. The response example is generated from the schema: the shape is right, the values are made up.

GET /catalog/products/{idOrSlug}

Get product details

Returns complete product information including stock status, images, and attributes. Only shows products active on the current channel.

Supports ETag

Path parameters

Field Type
idOrSlug Required string

Responses

200 ProductDetailResponse
Field Type Description
accessories ProductSummary[] · nullable
aggregatedAvailableQuantity integer · nullable
allowPreOrder boolean
attributes ProductAttribute[] · nullable
averageRating decimal · nullable
brand string · nullable
brandLogoUrl string · nullable
brandSlug string · nullable
breadcrumbs Breadcrumb[] · nullable
crossReferences ProductCrossReference[] · nullable
crossSellProducts ProductSummary[] · nullable
currency string · nullable
description string · nullable
documents ProductDocument[] · nullable
grade string · nullable
gtin string · nullable
height decimal · nullable
id string(uuid)
images ProductImage[] · nullable
incoming IncomingStock
isOnSale boolean
isPhasingOut boolean
itemNumber string · nullable
length decimal · nullable
listPrice decimal · nullable
listPriceIncludingVat decimal · nullable
lowestPrice30Days decimal · nullable
lowestPrice30DaysIncludingVat decimal · nullable
mainImageUrl string · nullable
metaDescription string · nullable
metaTitle string · nullable
mpn string · nullable
name string · nullable
priceValidUntil string(date) · nullable
primaryCategory CategorySummary
regularPrice decimal · nullable
regularPriceIncludingVat decimal · nullable
relatedProducts ProductSummary[] · nullable
reviewCount integer
salesStartDate string(date) · nullable
seoSlug string · nullable
shortDescription string · nullable
stock WarehouseStock[] · nullable
stockDisplayMode string · nullable
stockStatus enum InStock LowStock OutOfStock BackOrder
taxPercent decimal
unit string · nullable
variantAttributes VariantAttribute[] · nullable
variants Variant[] · nullable
weight decimal · nullable
width decimal · nullable
304 Empty body.
429 Rate limit exceeded. Wait the number of seconds given in Retry-After. The body is problem-shaped application/json, not application/problem+json. This API sends no X-RateLimit-* headers — the quota is discovered here.
  • Retry-After — Seconds to wait before retrying.

Standard errors: 404 Errors

Examples

curl
curl "https://api.erp.fluit.cloud/ecom/catalog/products/{idOrSlug}" \
  -H "X-Tenant-Id: $FLUIT_TENANT_ID" \
  -H "X-Channel: web"
Response 200
{
  "accessories": [
    {
      "brand": "string",
      "brandSlug": "string",
      "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
      "incoming": {
        "expectedDate": "2026-06-11",
        "isConfirmed": true,
        "quantity": 42
      },
      "isOnSale": true,
      "isPhasingOut": true,
      "itemNumber": "WIDGET-A",
      "keySpecs": [
        {
          "code": "string",
          "label": "string",
          "unit": "st",
          "value": "string"
        }
      ],
      "listPrice": "299.00",
      "listPriceIncludingVat": "299.00",
      "lowestPrice30Days": "299.00",
      "lowestPrice30DaysIncludingVat": "299.00",
      "mainImageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
      "mpn": "string",
      "name": "Widget A",
      "regularPrice": "299.00",
      "regularPriceIncludingVat": "299.00",
      "seoSlug": "string",
      "stockStatus": "InStock",
      "taxPercent": "12.50",
      "updatedAt": "2026-06-11T09:24:13.418"
    }
  ],
  "aggregatedAvailableQuantity": 42,
  "allowPreOrder": true,
  "attributes": [
    {
      "code": "string",
      "colorCode": "STD",
      "dataType": "Text",
      "name": "Widget A",
      "showInCompare": true,
      "unit": "st",
      "value": "string"
    }
  ],
  "averageRating": "299.00",
  "brand": "string",
  "brandLogoUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
  "brandSlug": "string",
  "breadcrumbs": [
    {
      "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
      "level": 42,
      "name": "Acme AB",
      "slug": "string"
    }
  ],
  "crossReferences": [
    {
      "isPrimary": true,
      "referenceNumber": "ABC-001",
      "source": "string",
      "type": "string"
    }
  ],
  "crossSellProducts": [
    {
      "brand": "string",
      "brandSlug": "string",
      "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
      "incoming": {
        "expectedDate": "2026-06-11",
        "isConfirmed": true,
        "quantity": 42
      },
      "isOnSale": true,
      "isPhasingOut": true,
      "itemNumber": "WIDGET-A",
      "keySpecs": [
        {
          "code": "string",
          "label": "string",
          "unit": "st",
          "value": "string"
        }
      ],
      "listPrice": "299.00",
      "listPriceIncludingVat": "299.00",
      "lowestPrice30Days": "299.00",
      "lowestPrice30DaysIncludingVat": "299.00",
      "mainImageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
      "mpn": "string",
      "name": "Widget A",
      "regularPrice": "299.00",
      "regularPriceIncludingVat": "299.00",
      "seoSlug": "string",
      "stockStatus": "InStock",
      "taxPercent": "12.50",
      "updatedAt": "2026-06-11T09:24:13.418"
    }
  ],
  "currency": "string",
  "description": "string",
  "documents": [
    {
      "category": "string",
      "contentType": "image/jpeg",
      "description": "string",
      "fileSize": 42,
      "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
      "languageCode": "STD",
      "name": "Widget A",
      "sortOrder": 42,
      "url": "https://cdn.fluit.cloud/assets/widget-a-front.jpg"
    }
  ],
  "grade": "string",
  "gtin": "string",
  "height": "299.00",
  "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
  "images": [
    {
      "altText": "string",
      "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
      "isPrimary": true,
      "sortOrder": 42,
      "url": "https://cdn.fluit.cloud/assets/widget-a-front.jpg"
    }
  ],
  "incoming": {
    "expectedDate": "2026-06-11",
    "isConfirmed": true,
    "quantity": 42
  },
  "isOnSale": true,
  "isPhasingOut": true,
  "itemNumber": "WIDGET-A",
  "length": "299.00",
  "listPrice": "299.00",
  "listPriceIncludingVat": "299.00",
  "lowestPrice30Days": "299.00",
  "lowestPrice30DaysIncludingVat": "299.00",
  "mainImageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
  "metaDescription": "string",
  "metaTitle": "string",
  "mpn": "string",
  "name": "Widget A",
  "priceValidUntil": "2026-06-11",
  "primaryCategory": {
    "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
    "name": "Hand tools",
    "slug": "string"
  },
  "regularPrice": "299.00",
  "regularPriceIncludingVat": "299.00",
  "relatedProducts": [
    {
      "brand": "string",
      "brandSlug": "string",
      "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
      "incoming": {
        "expectedDate": "2026-06-11",
        "isConfirmed": true,
        "quantity": 42
      },
      "isOnSale": true,
      "isPhasingOut": true,
      "itemNumber": "WIDGET-A",
      "keySpecs": [
        {
          "code": "string",
          "label": "string",
          "unit": "st",
          "value": "string"
        }
      ],
      "listPrice": "299.00",
      "listPriceIncludingVat": "299.00",
      "lowestPrice30Days": "299.00",
      "lowestPrice30DaysIncludingVat": "299.00",
      "mainImageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
      "mpn": "string",
      "name": "Widget A",
      "regularPrice": "299.00",
      "regularPriceIncludingVat": "299.00",
      "seoSlug": "string",
      "stockStatus": "InStock",
      "taxPercent": "12.50",
      "updatedAt": "2026-06-11T09:24:13.418"
    }
  ],
  "reviewCount": 42,
  "salesStartDate": "2026-06-11",
  "seoSlug": "string",
  "shortDescription": "string",
  "stock": [
    {
      "availableQuantity": 42,
      "isAvailableForPickup": true,
      "leadTime": "string",
      "sortOrder": 42,
      "status": "InStock",
      "warehouseCode": "MAIN",
      "warehouseId": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
      "warehouseName": "Main warehouse"
    }
  ],
  "stockDisplayMode": "string",
  "stockStatus": "InStock",
  "taxPercent": "12.50",
  "unit": "st",
  "variantAttributes": [
    {
      "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
      "name": "Acme AB",
      "sortOrder": 42,
      "values": [
        {
          "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
          "sortOrder": 42,
          "value": "string"
        }
      ]
    }
  ],
  "variants": [
    {
      "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
      "incoming": {
        "expectedDate": "2026-06-11",
        "isConfirmed": true,
        "quantity": 42
      },
      "isOnSale": true,
      "itemNumber": "WIDGET-A",
      "listPrice": "299.00",
      "listPriceIncludingVat": "299.00",
      "lowestPrice30Days": "299.00",
      "lowestPrice30DaysIncludingVat": "299.00",
      "mainImageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
      "name": "Acme AB",
      "regularPrice": "299.00",
      "regularPriceIncludingVat": "299.00",
      "seoSlug": "string",
      "stockStatus": "InStock",
      "taxPercent": "12.50",
      "values": [
        {
          "attributeId": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
          "valueId": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44"
        }
      ]
    }
  ],
  "weight": "1.250",
  "width": "299.00"
}

Base URL https://api.erp.fluit.cloud/ecom. The response example is generated from the schema: the shape is right, the values are made up.

GET /catalog/stock

Get stock status for items

Returns aggregated stock status for a batch of items. Returns nothing when the storefront hides stock, or when it hides stock from visitors who are not logged in and the request carries no customer session.

Show the full description

Maximum 100 item ids per request; ids that cannot be parsed are skipped. With GUIDs the URL runs out before that limit does — use POST /ecom/catalog/stock for longer lists.

Query parameters

Field Type
itemIds Required string

Responses

200 StockResponse
Field Type
stock ItemStock[] · nullable
429 Rate limit exceeded. Wait the number of seconds given in Retry-After. The body is problem-shaped application/json, not application/problem+json. This API sends no X-RateLimit-* headers — the quota is discovered here.
  • Retry-After — Seconds to wait before retrying.

Standard errors: 400 404 Errors

Examples

curl
curl "https://api.erp.fluit.cloud/ecom/catalog/stock" \
  -H "Authorization: Bearer $SESSION_TOKEN" \
  -H "X-Tenant-Id: $FLUIT_TENANT_ID" \
  -H "X-Channel: web"
Response 200
{
  "stock": [
    {
      "availableQuantity": 42,
      "incoming": {
        "expectedDate": "2026-06-11",
        "isConfirmed": true,
        "quantity": 42
      },
      "itemId": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
      "stockStatus": "InStock"
    }
  ]
}

Base URL https://api.erp.fluit.cloud/ecom. The response example is generated from the schema: the shape is right, the values are made up.

POST /catalog/stock

Get stock status for items (ids in body)

Identical to GET /ecom/catalog/stock — same handler, same response body — but takes the item ids in a JSON body, for id lists long enough to strain the URL. Both variants enforce the same limit of 100 ids per request.

Show the full description

Returns nothing when the storefront hides stock, or when it hides stock from visitors who are not logged in and the request carries no customer session.

Body required

Field Type Description
itemIds string(uuid)[] · nullable Artikel-id:n att slå upp. Dubbletter tas bort; ordningen saknar betydelse.

Responses

200 StockResponse
Field Type
stock ItemStock[] · nullable
429 Rate limit exceeded. Wait the number of seconds given in Retry-After. The body is problem-shaped application/json, not application/problem+json. This API sends no X-RateLimit-* headers — the quota is discovered here.
  • Retry-After — Seconds to wait before retrying.

Standard errors: 400 404 Errors

Examples

curl
curl -X POST "https://api.erp.fluit.cloud/ecom/catalog/stock" \
  -H "Authorization: Bearer $SESSION_TOKEN" \
  -H "X-Tenant-Id: $FLUIT_TENANT_ID" \
  -H "X-Channel: web" \
  -H "Content-Type: application/json" \
  -d @body.json
Response 200
{
  "stock": [
    {
      "availableQuantity": 42,
      "incoming": {
        "expectedDate": "2026-06-11",
        "isConfirmed": true,
        "quantity": 42
      },
      "itemId": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
      "stockStatus": "InStock"
    }
  ]
}

Base URL https://api.erp.fluit.cloud/ecom. The response example is generated from the schema: the shape is right, the values are made up.

GET /catalog/suggest

Search suggestions

Type-ahead suggestions for the storefront search field: matching products, term completions and categories.

Supports ETag

Query parameters

Field Type
q string
limit integer

Responses

200 SearchSuggestionsResponse
Field Type
categories SuggestedCategory[] · nullable
didYouMean string · nullable
products ProductSummary[] · nullable
query string · nullable
terms string[] · nullable
totalCount integer
304 Empty body.
429 Rate limit exceeded. Wait the number of seconds given in Retry-After. The body is problem-shaped application/json, not application/problem+json. This API sends no X-RateLimit-* headers — the quota is discovered here.
  • Retry-After — Seconds to wait before retrying.

Examples

curl
curl "https://api.erp.fluit.cloud/ecom/catalog/suggest" \
  -H "X-Tenant-Id: $FLUIT_TENANT_ID" \
  -H "X-Channel: web"
Response 200
{
  "categories": [
    {
      "code": "string",
      "name": "Hand tools"
    }
  ],
  "didYouMean": "string",
  "products": [
    {
      "brand": "string",
      "brandSlug": "string",
      "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
      "incoming": {
        "expectedDate": "2026-06-11",
        "isConfirmed": true,
        "quantity": 42
      },
      "isOnSale": true,
      "isPhasingOut": true,
      "itemNumber": "WIDGET-A",
      "keySpecs": [
        {
          "code": "string",
          "label": "string",
          "unit": "st",
          "value": "string"
        }
      ],
      "listPrice": "299.00",
      "listPriceIncludingVat": "299.00",
      "lowestPrice30Days": "299.00",
      "lowestPrice30DaysIncludingVat": "299.00",
      "mainImageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
      "mpn": "string",
      "name": "Widget A",
      "regularPrice": "299.00",
      "regularPriceIncludingVat": "299.00",
      "seoSlug": "string",
      "stockStatus": "InStock",
      "taxPercent": "12.50",
      "updatedAt": "2026-06-11T09:24:13.418"
    }
  ],
  "query": "string",
  "terms": [
    "string"
  ],
  "totalCount": 137
}

Base URL https://api.erp.fluit.cloud/ecom. The response example is generated from the schema: the shape is right, the values are made up.

GET /products/{itemId}/widgets

Get matching product widgets for a product

Returns active HTML widgets that match the given product based on category, supplier, item group, price range, etc.

Supports ETag

Path parameters

Field Type
itemId Required string(uuid)

Responses

200 ProductWidgetResponse[]
Field Type
cssClass string · nullable
htmlContent string · nullable
id string(uuid)
name string · nullable
placement string · nullable
sortOrder integer
style string · nullable
304 Empty body.
429 Rate limit exceeded. Wait the number of seconds given in Retry-After. The body is problem-shaped application/json, not application/problem+json. This API sends no X-RateLimit-* headers — the quota is discovered here.
  • Retry-After — Seconds to wait before retrying.

Standard errors: 404 Errors

Examples

curl
curl "https://api.erp.fluit.cloud/ecom/products/{itemId}/widgets" \
  -H "X-Tenant-Id: $FLUIT_TENANT_ID" \
  -H "X-Channel: web"
Response 200
[
  {
    "cssClass": "string",
    "htmlContent": "string",
    "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
    "name": "Widget A",
    "placement": "string",
    "sortOrder": 42,
    "style": "string"
  }
]

Base URL https://api.erp.fluit.cloud/ecom. The response example is generated from the schema: the shape is right, the values are made up.

Schemas

The objects this group's calls refer to. The field tables above go one level deep and link here rather than repeating the same schema on every endpoint.

Brand

BrandResponse
Field Type
id string(uuid)
name string · nullable
website string · nullable

Breadcrumb

BreadcrumbResponse
Field Type
id string(uuid)
level integer
name string · nullable
slug string · nullable

Category

CategoryResponse
Field Type
children Category[] · nullable
code string · nullable
description string · nullable
id string(uuid)
imageUrl string · nullable
name string · nullable
parentId string(uuid) · nullable
productCount integer
slug string · nullable
sortOrder integer

CategorySummary

CategorySummaryResponse
Field Type
id string(uuid)
name string · nullable
slug string · nullable

FilterGroup

FilterGroupResponse
Field Type
code string · nullable
dataType string · nullable
name string · nullable
sortOrder integer
unit string · nullable
values FilterValue[] · nullable

FilterValue

FilterValueResponse
Field Type
count integer
value string · nullable

IncomingStock

IncomingStockResponse
Field Type
expectedDate string(date)
isConfirmed boolean
quantity integer · nullable

ItemStock

ItemStockResponse
Field Type Description
availableQuantity integer · nullable
incoming IncomingStock
itemId string(uuid)
stockStatus enum InStock LowStock OutOfStock BackOrder

PagedResult<ProductSummary>

PagedResult_ProductSummaryResponse
Field Type
hasNextPage boolean
hasPreviousPage boolean
items ProductSummary[] · nullable
page integer
pageSize integer
totalCount integer
totalPages integer

ProductAttribute

ProductAttributeResponse
Field Type Description
code string · nullable
colorCode string · nullable
dataType enum Text WholeNumber DecimalNumber Boolean Date Url Html Color
name string · nullable
showInCompare boolean
unit string · nullable
value string · nullable

ProductCrossReference

ProductCrossReferenceResponse
Field Type
isPrimary boolean
referenceNumber string · nullable
source string · nullable
type string · nullable

ProductDocument

ProductDocumentResponse
Field Type
category string · nullable
contentType string · nullable
description string · nullable
fileSize integer
id string(uuid)
languageCode string · nullable
name string · nullable
sortOrder integer
url string · nullable

ProductImage

ProductImageResponse
Field Type
altText string · nullable
id string(uuid)
isPrimary boolean
sortOrder integer
url string · nullable

ProductKeySpec

ProductKeySpecResponse
Field Type
code string · nullable
label string · nullable
unit string · nullable
value string · nullable

ProductSummary

ProductSummaryResponse
Field Type Description
brand string · nullable
brandSlug string · nullable
id string(uuid)
incoming IncomingStock
isOnSale boolean
isPhasingOut boolean
itemNumber string · nullable
keySpecs ProductKeySpec[] · nullable
listPrice decimal · nullable
listPriceIncludingVat decimal · nullable
lowestPrice30Days decimal · nullable
lowestPrice30DaysIncludingVat decimal · nullable
mainImageUrl string · nullable
mpn string · nullable
name string · nullable
regularPrice decimal · nullable
regularPriceIncludingVat decimal · nullable
seoSlug string · nullable
stockStatus enum InStock LowStock OutOfStock BackOrder
taxPercent decimal
updatedAt string(date-time) · nullable

SearchCategoryMatch

SearchCategoryMatch
Field Type
code string · nullable
name string · nullable
productCount integer

SuggestedCategory

SuggestedCategory
Field Type
code string · nullable
name string · nullable

Variant

VariantResponse
Field Type Description
id string(uuid)
incoming IncomingStock
isOnSale boolean
itemNumber string · nullable
listPrice decimal · nullable
listPriceIncludingVat decimal · nullable
lowestPrice30Days decimal · nullable
lowestPrice30DaysIncludingVat decimal · nullable
mainImageUrl string · nullable
name string · nullable
regularPrice decimal · nullable
regularPriceIncludingVat decimal · nullable
seoSlug string · nullable
stockStatus enum InStock LowStock OutOfStock BackOrder
taxPercent decimal
values VariantValueRef[] · nullable

VariantAttribute

VariantAttributeResponse
Field Type
id string(uuid)
name string · nullable
sortOrder integer
values VariantAttributeValue[] · nullable

VariantAttributeValue

VariantAttributeValueResponse
Field Type
id string(uuid)
sortOrder integer
value string · nullable

VariantValueRef

VariantValueRef
Field Type
attributeId string(uuid)
valueId string(uuid)

WarehouseStock

WarehouseStockResponse
Field Type Description
availableQuantity integer · nullable
isAvailableForPickup boolean
leadTime string · nullable
sortOrder integer
status enum InStock LowStock OutOfStock BackOrder
warehouseCode string · nullable
warehouseId string(uuid)
warehouseName string · nullable