Hoppa till innehållet

Content pages

CMS pages: the navigable list and a page by slug, with its sections. Used for terms, about, delivery information and anything else the tenant edits without a deploy.

5 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 /custom-blocks/preview/{token}

Get a custom block preview rendered by the block editor

Admin preview only: returns the rendered HTML and scoped CSS of an unsaved custom block draft. Requires a valid admin preview token for the channel in X-Admin-Preview. Tokens expire after 30 minutes.

Path parameters

Field Type
token Required string

Responses

200 EcomCustomBlockPreviewResponse
Field Type
blockKey string · nullable
css string · nullable
html string · nullable
useShell boolean
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: 401 404 Errors

Examples

curl
curl "https://api.erp.fluit.cloud/ecom/custom-blocks/preview/{token}" \
  -H "X-Tenant-Id: $FLUIT_TENANT_ID" \
  -H "X-Channel: web"
Response 200
{
  "blockKey": "string",
  "css": "string",
  "html": "string",
  "useShell": true
}

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 /forms/{formToken}/submissions

Submit a form shown on a page

Submits the answers to a form that a page section carries (section type Form; the section's form has the token, the fields and the consent text). Send the answers as 'data': a JSON string of an object keyed by field id.

Show the full description

File fields need multipart/form-data, with the files as parts and the other properties as fields of the same name. 'formLoadedAtUnixMs' is required — when the form was shown — and so is consentGiven=true when the form has consent text. A submission that looks automated gets the same 200 as a real one and is dropped; the response never tells a bot it was caught. What happens next — a deal or a ticket, notification emails, a receipt — is set on the form in Fluit, not by the storefront.

Path parameters

Field Type
formToken Required string(uuid)

Body required

Field Type Description
captchaToken string · nullable
consentGiven boolean Besökaren kryssade i formulärets samtyckesruta.
data string · nullable Svaren: en JSON-sträng med ett objekt där fältets id är nyckeln.
formLoadedAtUnixMs integer · nullable När formuläret visades, i millisekunder sedan epoken.
honeypot string · nullable Ett dolt fält som ska lämnas tomt.
sourceUrl string · nullable Sidan besökaren skickade från. Sparas som källa på inskicket.
utmCampaign string · nullable
utmMedium string · nullable
utmSource string · nullable

Responses

200 SubmitFormResponse
Field Type Description
received boolean Alltid true — även när inskicket sorterats bort som automatiserat.

Standard errors: 400 404 409 429 Errors

Examples

curl
curl -X POST "https://api.erp.fluit.cloud/ecom/forms/{formToken}/submissions" \
  -H "X-Tenant-Id: $FLUIT_TENANT_ID" \
  -H "X-Channel: web" \
  -H "Content-Type: application/json" \
  -d @body.json
Response 200
{
  "received": true
}

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 /pages

Get published content pages for navigation

Returns every published page in the channel as a flat list, in the tenant's own sort order. Each entry carries its storefront path (pages live at the root, nested under their parent: /about, /services/tyres; the home page is /), its parentPageId and whether it is hidden from search engines.

Show the full description

The menu itself comes from the session's navigation, not from this list. Read the page body with GET /ecom/pages/resolve?path= or GET /ecom/pages/{slug}.

Supports ETag

Responses

200 ContentPageNavResponse[]
Field Type Description
noIndex boolean Sidan ska inte indexeras och hör inte hemma i en sitemap.
pageType string · nullable `Page`, `Home`, `BlogPost` eller `NewsPost`.
parentPageId string(uuid) · nullable
path string · nullable Sidans adress i butiken, t.ex. `/tjanster/dackbyte`; startsidan är `/`.
showInNavigation boolean
slug string · nullable
sortOrder integer
title 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/pages" \
  -H "X-Tenant-Id: $FLUIT_TENANT_ID" \
  -H "X-Channel: web"
Response 200
[
  {
    "noIndex": true,
    "pageType": "string",
    "parentPageId": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
    "path": "string",
    "showInNavigation": true,
    "slug": "string",
    "sortOrder": 42,
    "title": "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 /pages/{slug}

Get a published content page by slug

Returns a published page with its SEO fields and its sections in display order. Sections are typed — text, image, testimonial, feature cards, forms, FAQ — and a storefront renders each kind its own way, so treat an unfamiliar section type as something to skip rather than fail on.

Show the full description

Section collections are already expanded and forms carry their fields. An unpublished or missing page both return 404; the two are deliberately indistinguishable.

Supports ETag

Path parameters

Field Type
slug Required string

Responses

200 ContentPageDetailResponse
Field Type Description
authorName string · nullable
breadcrumbs ContentPageBreadcrumb[] · nullable Sidans förfäder, närmast roten först. Startsidan ingår inte.
canonicalPath string · nullable Sidans rätta adress. Skiljer den sig från adressen som efterfrågades ska storefronten omdirigera dit permanent.
excerpt string · nullable
featuredImageUrl string · nullable
fullWidth boolean
isPreview boolean Svaret är en adminförhandsvisning av ett utkast.
layout string · nullable
metaDescription string · nullable
noIndex boolean Sidan ska inte indexeras.
ogImageUrl string · nullable Bild vid delning; tom betyder den utvalda bilden, sidans första herobild eller logotypen.
pageType string · nullable
publishDate string(date-time) · nullable
sections ContentPageSection[] · nullable
seoTitle string · nullable Titel i sökresultat och flik; tom betyder sidtiteln följd av kanalens namn.
slug string · nullable
tags string[] · nullable
title 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/pages/{slug}" \
  -H "X-Tenant-Id: $FLUIT_TENANT_ID" \
  -H "X-Channel: web"
Response 200
{
  "authorName": "Acme AB",
  "breadcrumbs": [
    {
      "path": "string",
      "title": "string"
    }
  ],
  "canonicalPath": "string",
  "excerpt": "string",
  "featuredImageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
  "fullWidth": true,
  "isPreview": true,
  "layout": "string",
  "metaDescription": "string",
  "noIndex": true,
  "ogImageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
  "pageType": "string",
  "publishDate": "2026-06-11T09:24:13.418",
  "sections": [
    {
      "alignment": "string",
      "anchor": "string",
      "articleLinkText": "string",
      "articleType": "string",
      "bannerImageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
      "bannerLinkUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
      "buttons": [
        {
          "label": "string",
          "openInNewTab": true,
          "url": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
          "variant": "string"
        }
      ],
      "cardColumns": 42,
      "cardVariant": "string",
      "categoryColumns": 42,
      "categoryId": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
      "categoryIds": [
        "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44"
      ],
      "categoryImageAspect": "string",
      "categoryLayout": "string",
      "contact": {
        "directionsUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
        "mapImageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
        "showAddress": true,
        "showEmail": true,
        "showOpeningHours": true,
        "showPhone": true
      },
      "cssClass": "string",
      "custom": {
        "blockKey": "string",
        "blockVersion": 42,
        "css": "string",
        "fields": null,
        "html": "string",
        "useShell": true
      },
      "embed": {
        "height": 42,
        "title": "string",
        "url": "https://cdn.fluit.cloud/assets/widget-a-front.jpg"
      },
      "eyebrow": "string",
      "faq": {
        "items": [
          {
            "answerHtml": "string",
            "question": "string"
          }
        ]
      },
      "featureCards": [
        {
          "iconName": "Width",
          "imageAlt": "string",
          "imageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
          "linkText": "string",
          "linkUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
          "text": "string",
          "title": "string"
        }
      ],
      "form": {
        "aside": "string",
        "asideHtml": "string",
        "consentText": "string",
        "description": "string",
        "fields": [
          {
            "fieldType": "string",
            "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
            "isRequired": true,
            "label": "string",
            "mapTo": "string",
            "options": [],
            "placeholder": "string"
          }
        ],
        "formToken": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
        "name": "Acme AB",
        "redirectUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
        "successMessage": "string"
      },
      "galleryImages": [
        {
          "altText": "string",
          "caption": "string",
          "imageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
          "linkUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg"
        }
      ],
      "heroCtaText": "string",
      "heroCtaUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
      "heroHeight": "string",
      "heroImageCaption": "string",
      "heroImageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
      "heroLayout": "string",
      "heroPortraitText": "string",
      "heroPortraitUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
      "heroTextColor": "string",
      "heroVideoPosterUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
      "heroVideoUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
      "htmlContent": "string",
      "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
      "itemGroupId": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
      "lead": "string",
      "logos": {
        "grayscale": true,
        "items": [
          {
            "altText": "string",
            "imageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
            "linkUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg"
          }
        ],
        "size": "string"
      },
      "maxBrands": 42,
      "maxProducts": 42,
      "mediaText": {
        "altText": "string",
        "bodyHtml": "string",
        "mediaAspect": "string",
        "mediaPosition": "string",
        "mediaUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
        "videoUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg"
      },
      "narrowText": true,
      "parentCategoryId": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
      "productColumns": 42,
      "productIds": [
        "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44"
      ],
      "productSort": "string",
      "productSpotlight": {
        "altText": "string",
        "badge": "string",
        "bodyHtml": "string",
        "documentCategory": "string",
        "documentIds": [
          "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44"
        ],
        "documents": "string",
        "layout": "string",
        "mediaPosition": "string",
        "mediaUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
        "productId": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
        "showAddToCart": true,
        "showKeySpecs": true,
        "showPrice": true,
        "showStock": true
      },
      "showProductCount": true,
      "sortOrder": 42,
      "spacing": "string",
      "subtitle": "string",
      "supplierIds": [
        "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44"
      ],
      "testimonials": [
        {
          "author": "string",
          "avatarUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
          "quote": "string",
          "rating": 42,
          "role": "string"
        }
      ],
      "timeline": {
        "layout": "string",
        "marker": "string",
        "steps": [
          {
            "alternatives": [],
            "bodyHtml": "string",
            "buttons": [],
            "iconName": "Acme AB",
            "title": "string"
          }
        ]
      },
      "title": "string",
      "tone": "string",
      "twoColumns": true,
      "type": "string",
      "videoUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg"
    }
  ],
  "seoTitle": "string",
  "slug": "string",
  "tags": [
    "string"
  ],
  "title": "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 /pages/resolve

Resolve a storefront path to a content page

Looks up the published page for a storefront path such as /about or /services/tyres; / is the channel's home page. The last segment identifies the page (slugs are unique per channel), so a stale path still finds it: compare the response's canonicalPath with the requested path and redirect permanently when they differ.

Show the full description

That covers pages that moved under another parent and the old /pages/{slug} addresses. The first segment of a page path is never one of the storefront's own routes — see reservedSlugs in the session for the list.

Supports ETag

Query parameters

Field Type
path string

Responses

200 ContentPageDetailResponse
Field Type Description
authorName string · nullable
breadcrumbs ContentPageBreadcrumb[] · nullable Sidans förfäder, närmast roten först. Startsidan ingår inte.
canonicalPath string · nullable Sidans rätta adress. Skiljer den sig från adressen som efterfrågades ska storefronten omdirigera dit permanent.
excerpt string · nullable
featuredImageUrl string · nullable
fullWidth boolean
isPreview boolean Svaret är en adminförhandsvisning av ett utkast.
layout string · nullable
metaDescription string · nullable
noIndex boolean Sidan ska inte indexeras.
ogImageUrl string · nullable Bild vid delning; tom betyder den utvalda bilden, sidans första herobild eller logotypen.
pageType string · nullable
publishDate string(date-time) · nullable
sections ContentPageSection[] · nullable
seoTitle string · nullable Titel i sökresultat och flik; tom betyder sidtiteln följd av kanalens namn.
slug string · nullable
tags string[] · nullable
title 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/pages/resolve" \
  -H "X-Tenant-Id: $FLUIT_TENANT_ID" \
  -H "X-Channel: web"
Response 200
{
  "authorName": "Acme AB",
  "breadcrumbs": [
    {
      "path": "string",
      "title": "string"
    }
  ],
  "canonicalPath": "string",
  "excerpt": "string",
  "featuredImageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
  "fullWidth": true,
  "isPreview": true,
  "layout": "string",
  "metaDescription": "string",
  "noIndex": true,
  "ogImageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
  "pageType": "string",
  "publishDate": "2026-06-11T09:24:13.418",
  "sections": [
    {
      "alignment": "string",
      "anchor": "string",
      "articleLinkText": "string",
      "articleType": "string",
      "bannerImageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
      "bannerLinkUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
      "buttons": [
        {
          "label": "string",
          "openInNewTab": true,
          "url": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
          "variant": "string"
        }
      ],
      "cardColumns": 42,
      "cardVariant": "string",
      "categoryColumns": 42,
      "categoryId": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
      "categoryIds": [
        "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44"
      ],
      "categoryImageAspect": "string",
      "categoryLayout": "string",
      "contact": {
        "directionsUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
        "mapImageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
        "showAddress": true,
        "showEmail": true,
        "showOpeningHours": true,
        "showPhone": true
      },
      "cssClass": "string",
      "custom": {
        "blockKey": "string",
        "blockVersion": 42,
        "css": "string",
        "fields": null,
        "html": "string",
        "useShell": true
      },
      "embed": {
        "height": 42,
        "title": "string",
        "url": "https://cdn.fluit.cloud/assets/widget-a-front.jpg"
      },
      "eyebrow": "string",
      "faq": {
        "items": [
          {
            "answerHtml": "string",
            "question": "string"
          }
        ]
      },
      "featureCards": [
        {
          "iconName": "Width",
          "imageAlt": "string",
          "imageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
          "linkText": "string",
          "linkUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
          "text": "string",
          "title": "string"
        }
      ],
      "form": {
        "aside": "string",
        "asideHtml": "string",
        "consentText": "string",
        "description": "string",
        "fields": [
          {
            "fieldType": "string",
            "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
            "isRequired": true,
            "label": "string",
            "mapTo": "string",
            "options": [],
            "placeholder": "string"
          }
        ],
        "formToken": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
        "name": "Acme AB",
        "redirectUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
        "successMessage": "string"
      },
      "galleryImages": [
        {
          "altText": "string",
          "caption": "string",
          "imageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
          "linkUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg"
        }
      ],
      "heroCtaText": "string",
      "heroCtaUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
      "heroHeight": "string",
      "heroImageCaption": "string",
      "heroImageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
      "heroLayout": "string",
      "heroPortraitText": "string",
      "heroPortraitUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
      "heroTextColor": "string",
      "heroVideoPosterUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
      "heroVideoUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
      "htmlContent": "string",
      "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
      "itemGroupId": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
      "lead": "string",
      "logos": {
        "grayscale": true,
        "items": [
          {
            "altText": "string",
            "imageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
            "linkUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg"
          }
        ],
        "size": "string"
      },
      "maxBrands": 42,
      "maxProducts": 42,
      "mediaText": {
        "altText": "string",
        "bodyHtml": "string",
        "mediaAspect": "string",
        "mediaPosition": "string",
        "mediaUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
        "videoUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg"
      },
      "narrowText": true,
      "parentCategoryId": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
      "productColumns": 42,
      "productIds": [
        "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44"
      ],
      "productSort": "string",
      "productSpotlight": {
        "altText": "string",
        "badge": "string",
        "bodyHtml": "string",
        "documentCategory": "string",
        "documentIds": [
          "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44"
        ],
        "documents": "string",
        "layout": "string",
        "mediaPosition": "string",
        "mediaUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
        "productId": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
        "showAddToCart": true,
        "showKeySpecs": true,
        "showPrice": true,
        "showStock": true
      },
      "showProductCount": true,
      "sortOrder": 42,
      "spacing": "string",
      "subtitle": "string",
      "supplierIds": [
        "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44"
      ],
      "testimonials": [
        {
          "author": "string",
          "avatarUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
          "quote": "string",
          "rating": 42,
          "role": "string"
        }
      ],
      "timeline": {
        "layout": "string",
        "marker": "string",
        "steps": [
          {
            "alternatives": [],
            "bodyHtml": "string",
            "buttons": [],
            "iconName": "Acme AB",
            "title": "string"
          }
        ]
      },
      "title": "string",
      "tone": "string",
      "twoColumns": true,
      "type": "string",
      "videoUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg"
    }
  ],
  "seoTitle": "string",
  "slug": "string",
  "tags": [
    "string"
  ],
  "title": "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.

ContentPageBreadcrumb

ContentPageBreadcrumbResponse
Field Type
path string · nullable
title string · nullable

ContentPageSection

ContentPageSectionResponse

En sektion i ett sidsvar. Samma form för startsidan och innehållssidorna.

Field Type Description
alignment string · nullable Rubrikdelens justering: `Left` eller `Center`.
anchor string · nullable HTML-id för länkar direkt till sektionen (`#ankare`).
articleLinkText string · nullable
articleType string · nullable
bannerImageUrl string · nullable
bannerLinkUrl string · nullable
buttons SectionButton[] · nullable Knappar under rubrikdelen. Länkar till sidor har redan fått sidans aktuella adress.
cardColumns integer Antal kolumner för korten; noll betyder att storefronten väljer.
cardVariant string · nullable Hur korten ritas: `Icon`, `ImageTop`, `ImageLeft` eller `Figure`.
categoryColumns integer Antal kolumner för kategorierna på bred skärm (2–6); noll betyder att storefronten väljer.
categoryId string(uuid) · nullable
categoryIds string(uuid)[] · nullable
categoryImageAspect string · nullable Bildformatet för `Tile` och `Card`: `Portrait` (3:4), `Square` eller `Landscape` (4:3).
categoryLayout string · nullable Hur kategorierna ritas: `Badge`, `Tile` eller `Card`.
contact SectionContact
cssClass string · nullable
custom SectionCustom Ett eget block, ritat på servern.
embed SectionEmbed En `Embed`-sektion: en extern sida i en ram. `url` är alltid en absolut https-adress, `title` ramens tillgängliga namn och `height` höjden i pixlar.
eyebrow string · nullable Liten versal rad ovanför rubriken.
faq SectionFaq
featureCards ContentPageSectionFeatureCard[] · nullable
form SectionForm Ett formulär som ska ritas i sidan. Skicka in det med `POST /ecom/forms/{formToken}/submissions`.
galleryImages ContentPageSectionImage[] · nullable
heroCtaText string · nullable
heroCtaUrl string · nullable
heroHeight string · nullable Höjden på en hero med bakgrundsbild: Compact, Normal, Tall eller Full.
heroImageCaption string · nullable
heroImageUrl string · nullable
heroLayout string · nullable
heroPortraitText string · nullable
heroPortraitUrl string · nullable
heroTextColor string · nullable
heroVideoPosterUrl string · nullable
heroVideoUrl string · nullable
htmlContent string · nullable
id string(uuid)
itemGroupId string(uuid) · nullable
lead string · nullable Ingress i ett textblock.
logos SectionLogos
maxBrands integer
maxProducts integer
mediaText SectionMediaText
narrowText boolean Smal textspalt.
parentCategoryId string(uuid) · nullable
productColumns integer
productIds string(uuid)[] · nullable
productSort string · nullable
productSpotlight SectionProductSpotlight En `ProductSpotlight`-sektion: en artikel presenterad stort. `layout` är `SideBySide`, `Banner` eller `Row`, `mediaPosition``Left` eller `Right`, och `documents``None`, `Selected` eller `Category`. Vid `Selected` listas `documentIds`, vid `Category` artikelns alla dokument i `documentCategory`; båda finns i produktsvarets `documents`.
showProductCount boolean Visa antalet produkter under kategorins namn.
sortOrder integer
spacing string · nullable Luft ovanför och under: `Normal`, `Compact` eller `Spacious`.
subtitle string · nullable
supplierIds string(uuid)[] · nullable
testimonials ContentPageSectionTestimonial[] · nullable
timeline SectionTimeline
title string · nullable
tone string · nullable Bakgrund ur kanalens branding: `Default`, `Muted`, `Ink`, `Brand` eller `Accent`.
twoColumns boolean Bryt brödtexten i två spalter på bred skärm.
type string · nullable
videoUrl string · nullable

ContentPageSectionFeatureCard

ContentPageSectionFeatureCardResponse
Field Type Description
iconName string · nullable
imageAlt string · nullable Alt-text för kortets bild.
imageUrl string · nullable Kortets bild, när sektionen ritar kort med bild.
linkText string · nullable
linkUrl string · nullable
text string · nullable
title string · nullable

ContentPageSectionImage

ContentPageSectionImageResponse
Field Type
altText string · nullable
caption string · nullable
imageUrl string · nullable
linkUrl string · nullable

ContentPageSectionTestimonial

ContentPageSectionTestimonialResponse
Field Type
author string · nullable
avatarUrl string · nullable
quote string · nullable
rating integer · nullable
role string · nullable

FormField

EcomFormFieldResponse

Ett fält i ett formulär. `fieldType` är `Text`, `Email`, `Phone`, `Number`, `TextArea`, `Select`, `Checkbox` eller `File`. Svaret skickas med fältets `id` som nyckel.

Field Type
fieldType string · nullable
id string(uuid)
isRequired boolean
label string · nullable
mapTo string · nullable
options string[] · nullable
placeholder string · nullable

SectionButton

EcomSectionButtonResponse
Field Type
label string · nullable
openInNewTab boolean
url string · nullable
variant string · nullable

SectionContact

EcomSectionContactResponse
Field Type
directionsUrl string · nullable
mapImageUrl string · nullable
showAddress boolean
showEmail boolean
showOpeningHours boolean
showPhone boolean

SectionCustom

EcomSectionCustomResponse

Ett eget block, ritat på servern.

Field Type Description
blockKey string · nullable Blockets nyckel. HTML:en ska ligga i ett element med `data-block="{blockKey}"`, som CSS:en är scopad till.
blockVersion integer Blocktypens publicerade version. Noll när en förhandsvisning ritar ett block som aldrig publicerats; i en förhandsvisning är innehållet blockets utkast, som är nyare än versionen.
css string · nullable Blockets CSS, där varje regel börjar med `[data-block="{blockKey}"]`. Samma för alla sektioner med samma block och version — lägg den en gång per sida.
fields object · nullable Fälten som data, nycklat på fältens nycklar, för den som vill rita blocket själv.
html string · nullable Blockets HTML, redan tvättad på servern. Tvätta den ändå innan den ritas.
useShell boolean Om blocket ritas i standardomslaget, med sektionens `eyebrow`, `title`, `subtitle`, `buttons`, `tone` och `spacing`. Utan omslaget ritar HTML:en allt själv.

SectionEmbed

EcomSectionEmbedResponse

En `Embed`-sektion: en extern sida i en ram. `url` är alltid en absolut https-adress, `title` ramens tillgängliga namn och `height` höjden i pixlar.

Field Type
height integer
title string · nullable
url string · nullable

SectionFaqItem

EcomSectionFaqItemResponse
Field Type
answerHtml string · nullable
question string · nullable

SectionForm

EcomSectionFormResponse

Ett formulär som ska ritas i sidan. Skicka in det med `POST /ecom/forms/{formToken}/submissions`.

Field Type
aside string · nullable
asideHtml string · nullable
consentText string · nullable
description string · nullable
fields FormField[] · nullable
formToken string(uuid)
name string · nullable
redirectUrl string · nullable
successMessage string · nullable

SectionLogo

EcomSectionLogoResponse
Field Type
altText string · nullable
imageUrl string · nullable
linkUrl string · nullable

SectionLogos

EcomSectionLogosResponse
Field Type
grayscale boolean
items SectionLogo[] · nullable
size string · nullable

SectionMediaText

EcomSectionMediaTextResponse
Field Type
altText string · nullable
bodyHtml string · nullable
mediaAspect string · nullable
mediaPosition string · nullable
mediaUrl string · nullable
videoUrl string · nullable

SectionProductSpotlight

EcomSectionProductSpotlightResponse

En `ProductSpotlight`-sektion: en artikel presenterad stort. `layout` är `SideBySide`, `Banner` eller `Row`, `mediaPosition``Left` eller `Right`, och `documents``None`, `Selected` eller `Category`. Vid `Selected` listas `documentIds`, vid `Category` artikelns alla dokument i `documentCategory`; båda finns i produktsvarets `documents`.

Field Type
altText string · nullable
badge string · nullable
bodyHtml string · nullable
documentCategory string · nullable
documentIds string(uuid)[] · nullable
documents string · nullable
layout string · nullable
mediaPosition string · nullable
mediaUrl string · nullable
productId string(uuid)
showAddToCart boolean
showKeySpecs boolean
showPrice boolean
showStock boolean

SectionTimeline

EcomSectionTimelineResponse
Field Type
layout string · nullable
marker string · nullable
steps SectionTimelineStep[] · nullable

SectionTimelineOption

EcomSectionTimelineOptionResponse
Field Type
bodyHtml string · nullable
buttons SectionButton[] · nullable
title string · nullable

SectionTimelineStep

EcomSectionTimelineStepResponse
Field Type
alternatives SectionTimelineOption[] · nullable
bodyHtml string · nullable
buttons SectionButton[] · nullable
iconName string · nullable
title string · nullable