Hoppa till innehållet

API och integrationer Referens Innehållssidor

English

Innehållssidor

Editorial content in a channel: the home page, plus standing pages, blog posts and news. The last three are the same record told apart by pageType, built from the same sections and carrying the same SEO. Addressed by the pair (channelCode, slug). The home page is built from the same sections but lives on the channel: one per channel, no slug, no publish state, addressed by channel code alone. A page's body is its section list, which is replaced whole with PUT .../config; the metadata is patched separately. Products, categories and suppliers referenced inside a section are named by business key, not by internal id.

10 anrop GET POST PATCH DELETE PUT Bas-URL https://api.fluit.cloud/preview

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

GET /channels/{channelCode}/content-pages

List a channel's content pages

Returns the channel's editorial pages: standing pages, blog posts and news. All three are the same record told apart by pageType, so one call can fetch everything or be narrowed with ?pageType=.

Visa hela beskrivningen

Sorted by sort order, then slug. Each page carries its full section list under config, with products, categories and suppliers named by business key rather than internal id. publishDate may be in the future: the storefront hides such an article until it passes, but this endpoint returns it either way. Delta sync: ?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.

Sökvägsparametrar

Fält Typ Beskrivning
channelCode Krävs string Code of the channel whose pages to list.

Frågeparametrar

Fält Typ Beskrivning
pageType enum Filters on the kind of page: Page, BlogPost or NewsPost. Page BlogPost NewsPost Home
isPublished boolean Filters on whether the page is published.
search string Matches slug and title, case-insensitively and on partial words.
tag string Returns only pages carrying this tag, matched case-insensitively. Applied before paging, so totalCount counts the tagged pages and page 1 is never empty while later pages hold matches.
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_PublicContentPageResponse

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

Fält Typ Beskrivning
authorName string · nullable Displayed author. Free text, not linked to a user.
channelCode Krävs string · nullable The channel the page belongs to.
config Krävs PageConfig A page built from sections: the layout plus the sections in order.
createdDate Krävs string(date-time) When the page was created (UTC).
excerpt string · nullable Short summary for list cards, RSS and meta. Articles only.
featuredImageUrl string · nullable Cover image for list cards and Open Graph. Articles only.
isPublished Krävs boolean Whether the page is published and visible in the storefront.
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.
metaDescription string · nullable SEO meta description.
modifiedDate string(date-time) · nullable When the page was last changed (UTC), or null if never changed.
pageType Krävs enum What kind of content page this is. Mirrors `Domain.Ecom.ContentPageType`. Page BlogPost NewsPost Home
parentSlug string · nullable Slug of the parent page, for a hierarchy. Null at the top level.
publishDate string(date-time) · nullable Editorial publication date shown and sorted on. May be in the future: public storefront queries hide an article until it passes.
publishedAt string(date-time) · nullable When it was published (UTC), or null if it never has been.
showInNavigation Krävs boolean Whether the page appears in the navigation menu.
slug Krävs string · nullable URL slug, unique within the channel.
sortOrder Krävs integer Sort order in listings and navigation.
tags string[] · nullable Tags used for filtering and related articles.
title Krävs string · nullable Page title, used for the heading and as the SEO title.
400 ProblemDetails pageType got a value outside its list.
Fält Typ
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
404 ProblemDetails No channel with that code.
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.fluit.cloud/preview/channels/{channelCode}/content-pages"
Svar 200
{
  "hasNextPage": true,
  "hasPreviousPage": true,
  "items": [
    {
      "authorName": "Acme AB",
      "channelCode": "STD",
      "config": {
        "fullWidth": true,
        "layout": "Standard",
        "sections": [
          {
            "alignment": "Left",
            "anchor": "string",
            "articleLinkText": "string",
            "articleType": "All",
            "bannerEndDate": "2026-06-11T09:24:13.418",
            "bannerImageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
            "bannerLinkUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
            "bannerStartDate": "2026-06-11T09:24:13.418",
            "buttons": [],
            "cardColumns": 42,
            "cardVariant": "Icon",
            "categoryCode": "STD",
            "categoryCodes": [],
            "contact": {},
            "cssClass": "string",
            "custom": {},
            "eyebrow": "string",
            "faq": {},
            "featureCards": [],
            "form": {},
            "galleryImages": [],
            "heroCtaText": "string",
            "heroCtaUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
            "heroImageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
            "heroTextColor": "Light",
            "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",
            "isVisible": true,
            "itemGroupCode": "STD",
            "lead": "string",
            "logos": {},
            "maxBrands": 42,
            "maxProducts": 42,
            "mediaText": {},
            "narrowText": true,
            "parentCategoryCode": "STD",
            "productColumns": 42,
            "productNumbers": [],
            "productSort": "Manual",
            "productSpotlight": {},
            "sectionCollectionId": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
            "sortOrder": 42,
            "spacing": "Normal",
            "subtitle": "string",
            "supplierNumbers": [],
            "testimonials": [],
            "timeline": {},
            "title": "string",
            "tone": "Default",
            "twoColumns": true,
            "type": "Hero",
            "videoUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg"
          }
        ]
      },
      "createdDate": "2026-06-11T09:24:13.418",
      "excerpt": "string",
      "featuredImageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
      "isPublished": true,
      "links": {
        "self": "string"
      },
      "metaDescription": "string",
      "modifiedDate": "2026-06-11T09:24:13.418",
      "pageType": "Page",
      "parentSlug": "string",
      "publishDate": "2026-06-11T09:24:13.418",
      "publishedAt": "2026-06-11T09:24:13.418",
      "showInNavigation": true,
      "slug": "string",
      "sortOrder": 42,
      "tags": [
        "string"
      ],
      "title": "string"
    }
  ],
  "page": 1,
  "pageSize": 50,
  "totalCount": 137,
  "totalPages": 3
}

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

POST /channels/{channelCode}/content-pages

Create a content page

Creates a standing page, a blog post or a news item, told apart by pageType. The page is created unpublished and with no sections; add the body with PUT /preview/channels/{channelCode}/content-pages/{slug}/config and make it visible with POST .../publish. publishDate may be in the future to schedule an article.

Visa hela beskrivningen

The response body is the same representation as GET on the page; the canonical URL is returned in the Location header and in links.self.

content-pages:write Kräver Idempotency-Key

Sökvägsparametrar

Fält Typ Beskrivning
channelCode Krävs string Code of the channel to create the page in.

Body krävs

Fält Typ Beskrivning
authorName string · nullable Displayed author. Free text.
excerpt string · nullable Short summary for list cards and RSS. Articles.
featuredImageUrl string · nullable Cover image for list cards and Open Graph. Articles.
metaDescription string · nullable SEO meta description.
pageType enum What kind of content page this is. Mirrors `Domain.Ecom.ContentPageType`. Page BlogPost NewsPost Home
parentSlug string · nullable Slug of the parent page, for a hierarchy.
publishDate string(date-time) · nullable Editorial publication date. May be in the future to schedule.
slug Krävs string URL slug, unique within the channel. Lowercase letters, digits and hyphens.
sortOrder integer Sort order in listings and navigation.
tags string[] · nullable Tags for filtering and related articles.
title Krävs string Page title. Required.

Svar

201 PublicContentPageResponse
  • Location — URL of the newly created resource.
Fält Typ Beskrivning
authorName string · nullable Displayed author. Free text, not linked to a user.
channelCode Krävs string · nullable The channel the page belongs to.
config Krävs PageConfig A page built from sections: the layout plus the sections in order.
createdDate Krävs string(date-time) When the page was created (UTC).
excerpt string · nullable Short summary for list cards, RSS and meta. Articles only.
featuredImageUrl string · nullable Cover image for list cards and Open Graph. Articles only.
isPublished Krävs boolean Whether the page is published and visible in the storefront.
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.
metaDescription string · nullable SEO meta description.
modifiedDate string(date-time) · nullable When the page was last changed (UTC), or null if never changed.
pageType Krävs enum What kind of content page this is. Mirrors `Domain.Ecom.ContentPageType`. Page BlogPost NewsPost Home
parentSlug string · nullable Slug of the parent page, for a hierarchy. Null at the top level.
publishDate string(date-time) · nullable Editorial publication date shown and sorted on. May be in the future: public storefront queries hide an article until it passes.
publishedAt string(date-time) · nullable When it was published (UTC), or null if it never has been.
showInNavigation Krävs boolean Whether the page appears in the navigation menu.
slug Krävs string · nullable URL slug, unique within the channel.
sortOrder Krävs integer Sort order in listings and navigation.
tags string[] · nullable Tags used for filtering and related articles.
title Krävs string · nullable Page title, used for the heading and as the SEO title.
400 ProblemDetails A field failed validation, or parentSlug names a page that does not exist in this channel.
Fält Typ
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
404 ProblemDetails No channel with that code.
Fält Typ
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
409 ProblemDetails A page with that slug already exists in the channel.
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.fluit.cloud/preview/channels/{channelCode}/content-pages" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d @body.json
Full — a scheduled blog post
{
  "authorName": "Redaktionen",
  "excerpt": "Fyra modeller, samma DSP-plattform.",
  "featuredImageUrl": "https://cdn.fluit.cloud/media/hero/abc.jpg",
  "metaDescription": "Vi släpper en ny serie aktiva högtalare för konferensrum.",
  "pageType": "BlogPost",
  "publishDate": "2026-09-15T08:00:00Z",
  "slug": "nya-hogtalarserien",
  "tags": [
    "produktnyhet",
    "ljud"
  ],
  "title": "Nya högtalarserien är här"
}
Minimal — a standing page
{
  "slug": "om-oss",
  "title": "Om oss"
}
Svar 201
{
  "authorName": "Acme AB",
  "channelCode": "STD",
  "config": {
    "fullWidth": true,
    "layout": "Standard",
    "sections": [
      {
        "alignment": "Left",
        "anchor": "string",
        "articleLinkText": "string",
        "articleType": "All",
        "bannerEndDate": "2026-06-11T09:24:13.418",
        "bannerImageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
        "bannerLinkUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
        "bannerStartDate": "2026-06-11T09:24:13.418",
        "buttons": [
          {
            "label": "string",
            "openInNewTab": true,
            "pageSlug": "string",
            "url": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
            "variant": "Primary"
          }
        ],
        "cardColumns": 42,
        "cardVariant": "Icon",
        "categoryCode": "STD",
        "categoryCodes": [
          "STD"
        ],
        "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",
          "values": null
        },
        "eyebrow": "string",
        "faq": {
          "items": [
            {}
          ]
        },
        "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": "None",
          "asideHtml": "string",
          "formToken": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44"
        },
        "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",
        "heroImageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
        "heroTextColor": "Light",
        "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",
        "isVisible": true,
        "itemGroupCode": "STD",
        "lead": "string",
        "logos": {
          "grayscale": true,
          "items": [
            {}
          ],
          "size": "Medium"
        },
        "maxBrands": 42,
        "maxProducts": 42,
        "mediaText": {
          "altText": "string",
          "bodyHtml": "string",
          "mediaAspect": "Original",
          "mediaPosition": "Left",
          "mediaUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
          "videoUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg"
        },
        "narrowText": true,
        "parentCategoryCode": "STD",
        "productColumns": 42,
        "productNumbers": [
          "ABC-001"
        ],
        "productSort": "Manual",
        "productSpotlight": {
          "altText": "string",
          "badge": "string",
          "bodyHtml": "string",
          "documentCategory": "Datasheet",
          "documentIds": [
            "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44"
          ],
          "documents": "None",
          "layout": "SideBySide",
          "mediaPosition": "Left",
          "mediaUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
          "productNumber": "ABC-001",
          "showAddToCart": true,
          "showKeySpecs": true,
          "showPrice": true,
          "showStock": true
        },
        "sectionCollectionId": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
        "sortOrder": 42,
        "spacing": "Normal",
        "subtitle": "string",
        "supplierNumbers": [
          "SUP-001"
        ],
        "testimonials": [
          {
            "author": "string",
            "avatarUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
            "quote": "string",
            "rating": 42,
            "role": "string"
          }
        ],
        "timeline": {
          "marker": "Number",
          "steps": [
            {}
          ]
        },
        "title": "string",
        "tone": "Default",
        "twoColumns": true,
        "type": "Hero",
        "videoUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg"
      }
    ]
  },
  "createdDate": "2026-06-11T09:24:13.418",
  "excerpt": "string",
  "featuredImageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
  "isPublished": true,
  "links": {
    "self": "string"
  },
  "metaDescription": "string",
  "modifiedDate": "2026-06-11T09:24:13.418",
  "pageType": "Page",
  "parentSlug": "string",
  "publishDate": "2026-06-11T09:24:13.418",
  "publishedAt": "2026-06-11T09:24:13.418",
  "showInNavigation": true,
  "slug": "string",
  "sortOrder": 42,
  "tags": [
    "string"
  ],
  "title": "string"
}

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

GET /channels/{channelCode}/content-pages/{slug}

Get a content page by slug

Returns the page with its full section list. Products, categories and suppliers inside the sections are named by business key — item number, category code, supplier number — so the same body can be written back. Responses carry a weak ETag; pass it back in If-None-Match to get 304 Not Modified while the page is unchanged.

content-pages:read Stödjer ETag

Sökvägsparametrar

Fält Typ Beskrivning
channelCode Krävs string Code of the channel the page belongs to.
slug Krävs string The page's slug within that channel.

Svar

200 PublicContentPageResponse
  • 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
authorName string · nullable Displayed author. Free text, not linked to a user.
channelCode Krävs string · nullable The channel the page belongs to.
config Krävs PageConfig A page built from sections: the layout plus the sections in order.
createdDate Krävs string(date-time) When the page was created (UTC).
excerpt string · nullable Short summary for list cards, RSS and meta. Articles only.
featuredImageUrl string · nullable Cover image for list cards and Open Graph. Articles only.
isPublished Krävs boolean Whether the page is published and visible in the storefront.
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.
metaDescription string · nullable SEO meta description.
modifiedDate string(date-time) · nullable When the page was last changed (UTC), or null if never changed.
pageType Krävs enum What kind of content page this is. Mirrors `Domain.Ecom.ContentPageType`. Page BlogPost NewsPost Home
parentSlug string · nullable Slug of the parent page, for a hierarchy. Null at the top level.
publishDate string(date-time) · nullable Editorial publication date shown and sorted on. May be in the future: public storefront queries hide an article until it passes.
publishedAt string(date-time) · nullable When it was published (UTC), or null if it never has been.
showInNavigation Krävs boolean Whether the page appears in the navigation menu.
slug Krävs string · nullable URL slug, unique within the channel.
sortOrder Krävs integer Sort order in listings and navigation.
tags string[] · nullable Tags used for filtering and related articles.
title Krävs string · nullable Page title, used for the heading and as the SEO title.
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 channel with that code, or no page with that slug in it.
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.fluit.cloud/preview/channels/{channelCode}/content-pages/{slug}"
Svar 200
{
  "authorName": "Acme AB",
  "channelCode": "STD",
  "config": {
    "fullWidth": true,
    "layout": "Standard",
    "sections": [
      {
        "alignment": "Left",
        "anchor": "string",
        "articleLinkText": "string",
        "articleType": "All",
        "bannerEndDate": "2026-06-11T09:24:13.418",
        "bannerImageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
        "bannerLinkUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
        "bannerStartDate": "2026-06-11T09:24:13.418",
        "buttons": [
          {
            "label": "string",
            "openInNewTab": true,
            "pageSlug": "string",
            "url": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
            "variant": "Primary"
          }
        ],
        "cardColumns": 42,
        "cardVariant": "Icon",
        "categoryCode": "STD",
        "categoryCodes": [
          "STD"
        ],
        "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",
          "values": null
        },
        "eyebrow": "string",
        "faq": {
          "items": [
            {}
          ]
        },
        "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": "None",
          "asideHtml": "string",
          "formToken": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44"
        },
        "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",
        "heroImageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
        "heroTextColor": "Light",
        "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",
        "isVisible": true,
        "itemGroupCode": "STD",
        "lead": "string",
        "logos": {
          "grayscale": true,
          "items": [
            {}
          ],
          "size": "Medium"
        },
        "maxBrands": 42,
        "maxProducts": 42,
        "mediaText": {
          "altText": "string",
          "bodyHtml": "string",
          "mediaAspect": "Original",
          "mediaPosition": "Left",
          "mediaUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
          "videoUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg"
        },
        "narrowText": true,
        "parentCategoryCode": "STD",
        "productColumns": 42,
        "productNumbers": [
          "ABC-001"
        ],
        "productSort": "Manual",
        "productSpotlight": {
          "altText": "string",
          "badge": "string",
          "bodyHtml": "string",
          "documentCategory": "Datasheet",
          "documentIds": [
            "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44"
          ],
          "documents": "None",
          "layout": "SideBySide",
          "mediaPosition": "Left",
          "mediaUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
          "productNumber": "ABC-001",
          "showAddToCart": true,
          "showKeySpecs": true,
          "showPrice": true,
          "showStock": true
        },
        "sectionCollectionId": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
        "sortOrder": 42,
        "spacing": "Normal",
        "subtitle": "string",
        "supplierNumbers": [
          "SUP-001"
        ],
        "testimonials": [
          {
            "author": "string",
            "avatarUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
            "quote": "string",
            "rating": 42,
            "role": "string"
          }
        ],
        "timeline": {
          "marker": "Number",
          "steps": [
            {}
          ]
        },
        "title": "string",
        "tone": "Default",
        "twoColumns": true,
        "type": "Hero",
        "videoUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg"
      }
    ]
  },
  "createdDate": "2026-06-11T09:24:13.418",
  "excerpt": "string",
  "featuredImageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
  "isPublished": true,
  "links": {
    "self": "string"
  },
  "metaDescription": "string",
  "modifiedDate": "2026-06-11T09:24:13.418",
  "pageType": "Page",
  "parentSlug": "string",
  "publishDate": "2026-06-11T09:24:13.418",
  "publishedAt": "2026-06-11T09:24:13.418",
  "showInNavigation": true,
  "slug": "string",
  "sortOrder": 42,
  "tags": [
    "string"
  ],
  "title": "string"
}

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

PATCH /channels/{channelCode}/content-pages/{slug}

Update a content page's metadata

Partially updates the page's title, SEO, navigation and article fields. Only provided fields are updated (JSON Merge Patch semantics). Omitted fields are left unchanged. Pass null to clear a nullable field.

Visa hela beskrivningen

Unknown fields are rejected with 400, naming the field and listing the ones this endpoint accepts. tags replaces the whole list rather than merging into it. The sections are not touched here — use PUT .../config for the body. Renaming the slug with newSlug changes the page's public URL and automatically creates a 301 redirect from the old one, so incoming links and their ranking are preserved. Changing pageType does the same, because it moves the page between the /blog/... and /pages/... URL families.

content-pages:write

Sökvägsparametrar

Fält Typ Beskrivning
channelCode Krävs string Code of the channel the page belongs to.
slug Krävs string The page's slug within that channel.

Body krävs

Fält Typ Beskrivning
authorName string · nullable Displayed author. Pass `null` to clear.
excerpt string · nullable Short summary for list cards and RSS. Pass `null` to clear.
featuredImageUrl string · nullable Cover image. Pass `null` to clear.
metaDescription string · nullable SEO meta description. Pass `null` to clear.
newSlug string · nullable Move the page to a different slug. A 301 from the old URL is created automatically, so incoming links and their ranking survive.
pageType enum What kind of content page this is. Mirrors `Domain.Ecom.ContentPageType`. Page BlogPost NewsPost Home
parentSlug string · nullable Slug of the parent page. Pass `null` to move it to the top level.
publishDate string(date-time) · nullable Editorial publication date. Pass `null` to clear.
showInNavigation boolean · nullable Whether the page appears in the navigation menu.
sortOrder integer · nullable Sort order in listings and navigation.
tags string[] · nullable Replaces the whole tag list. Pass `null` to clear.
title string · nullable Page title.

Svar

204 Tom body.
400 ProblemDetails The body is not a JSON object, contains a field this endpoint does not have, a field present in it failed validation, parentSlug names a page that does not exist in this channel, or one of newSlug, title, sortOrder, showInNavigation and pageType was sent as null.
Fält Typ
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
404 ProblemDetails No channel with that code, or no page with that slug in it.
Fält Typ
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
409 ProblemDetails newSlug is already taken by another page in the channel.
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 PATCH "https://api.fluit.cloud/preview/channels/{channelCode}/content-pages/{slug}" \
  -H "Content-Type: application/json" \
  -d @body.json
Svar 400
{
  "detail": "string",
  "instance": "string",
  "status": 42,
  "title": "string",
  "type": "string"
}

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

DELETE /channels/{channelCode}/content-pages/{slug}

Delete a content page

Removes the page and its sections for good. To take a page down while keeping its content, use POST .../unpublish instead. A page with child pages cannot be deleted: move the children to another parent or delete them first.

Visa hela beskrivningen

The deletion is reported under GET /preview/deletions as the resource content-pages, with the business key {channelCode}/{slug}, so a client syncing on ?modifiedSince= learns the page is gone.

content-pages:write

Sökvägsparametrar

Fält Typ Beskrivning
channelCode Krävs string Code of the channel the page belongs to.
slug Krävs string The page's slug within that channel.

Svar

204 Tom body.
404 ProblemDetails No channel with that code, or no page with that slug in it.
Fält Typ
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
409 ProblemDetails ContentPage.HasChildPages — the page still has child pages.
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.fluit.cloud/preview/channels/{channelCode}/content-pages/{slug}"
Svar 404
{
  "detail": "string",
  "instance": "string",
  "status": 42,
  "title": "string",
  "type": "string"
}

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

PUT /channels/{channelCode}/content-pages/{slug}/config

Replace a content page's sections

Replaces the page body: layout, full-width flag and the whole section list. This is a PUT and not a PATCH because the section list is positional — sending a subset would be ambiguous between "these are the sections now" and "merge these in".

Visa hela beskrivningen

Read the page, change what you need, send the whole config back. Keep each section's id when you do: an omitted id creates a new section, so dropping them would replace every section with a copy and lose their identity. This replaces the whole config, so send every field you want kept: an omitted layout or fullWidth falls back to its default rather than to the stored value. sections has no default and must be present — send [] to clear the body deliberately. Products, categories and suppliers are named by business key. An unknown key is rejected with 400 rather than dropped, so a section cannot silently lose half its products. Returns the whole page, the same representation as GET, so the caller sees the result without a second request. No Idempotency-Key is needed — the header is required on POST. Repeating the same body is safe as long as the sections carry their ids; sections sent without one are created afresh on every call.

content-pages:write

Sökvägsparametrar

Fält Typ Beskrivning
channelCode Krävs string Code of the channel the page belongs to.
slug Krävs string The page's slug within that channel.

Body krävs

Fält Typ Beskrivning
fullWidth boolean True for a full-bleed page, false to keep the content inside the container width.
layout enum Page layout exposed via the Public API. Standard WithSidebar Magazine
sections Krävs PageSection[] · nullable The sections, in the order they are rendered. Required on the way in — send `[]` to clear the page.

Svar

200 PublicContentPageResponse
Fält Typ Beskrivning
authorName string · nullable Displayed author. Free text, not linked to a user.
channelCode Krävs string · nullable The channel the page belongs to.
config Krävs PageConfig A page built from sections: the layout plus the sections in order.
createdDate Krävs string(date-time) When the page was created (UTC).
excerpt string · nullable Short summary for list cards, RSS and meta. Articles only.
featuredImageUrl string · nullable Cover image for list cards and Open Graph. Articles only.
isPublished Krävs boolean Whether the page is published and visible in the storefront.
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.
metaDescription string · nullable SEO meta description.
modifiedDate string(date-time) · nullable When the page was last changed (UTC), or null if never changed.
pageType Krävs enum What kind of content page this is. Mirrors `Domain.Ecom.ContentPageType`. Page BlogPost NewsPost Home
parentSlug string · nullable Slug of the parent page, for a hierarchy. Null at the top level.
publishDate string(date-time) · nullable Editorial publication date shown and sorted on. May be in the future: public storefront queries hide an article until it passes.
publishedAt string(date-time) · nullable When it was published (UTC), or null if it never has been.
showInNavigation Krävs boolean Whether the page appears in the navigation menu.
slug Krävs string · nullable URL slug, unique within the channel.
sortOrder Krävs integer Sort order in listings and navigation.
tags string[] · nullable Tags used for filtering and related articles.
title Krävs string · nullable Page title, used for the heading and as the SEO title.
400 ProblemDetails A section referenced an item number, category code or supplier number that does not exist. The error names the section and the field, e.g. sections[2].productNumbers[0]. Also when a section omitted a field its own type requires: a SharedSections section without sectionCollectionId is rejected as sections[{index}].sectionCollectionId.
Fält Typ
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
404 ProblemDetails No channel with that code, or no page with that slug in it.
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 PUT "https://api.fluit.cloud/preview/channels/{channelCode}/content-pages/{slug}/config" \
  -H "Content-Type: application/json" \
  -d @body.json
Svar 200
{
  "authorName": "Acme AB",
  "channelCode": "STD",
  "config": {
    "fullWidth": true,
    "layout": "Standard",
    "sections": [
      {
        "alignment": "Left",
        "anchor": "string",
        "articleLinkText": "string",
        "articleType": "All",
        "bannerEndDate": "2026-06-11T09:24:13.418",
        "bannerImageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
        "bannerLinkUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
        "bannerStartDate": "2026-06-11T09:24:13.418",
        "buttons": [
          {
            "label": "string",
            "openInNewTab": true,
            "pageSlug": "string",
            "url": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
            "variant": "Primary"
          }
        ],
        "cardColumns": 42,
        "cardVariant": "Icon",
        "categoryCode": "STD",
        "categoryCodes": [
          "STD"
        ],
        "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",
          "values": null
        },
        "eyebrow": "string",
        "faq": {
          "items": [
            {}
          ]
        },
        "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": "None",
          "asideHtml": "string",
          "formToken": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44"
        },
        "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",
        "heroImageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
        "heroTextColor": "Light",
        "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",
        "isVisible": true,
        "itemGroupCode": "STD",
        "lead": "string",
        "logos": {
          "grayscale": true,
          "items": [
            {}
          ],
          "size": "Medium"
        },
        "maxBrands": 42,
        "maxProducts": 42,
        "mediaText": {
          "altText": "string",
          "bodyHtml": "string",
          "mediaAspect": "Original",
          "mediaPosition": "Left",
          "mediaUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
          "videoUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg"
        },
        "narrowText": true,
        "parentCategoryCode": "STD",
        "productColumns": 42,
        "productNumbers": [
          "ABC-001"
        ],
        "productSort": "Manual",
        "productSpotlight": {
          "altText": "string",
          "badge": "string",
          "bodyHtml": "string",
          "documentCategory": "Datasheet",
          "documentIds": [
            "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44"
          ],
          "documents": "None",
          "layout": "SideBySide",
          "mediaPosition": "Left",
          "mediaUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
          "productNumber": "ABC-001",
          "showAddToCart": true,
          "showKeySpecs": true,
          "showPrice": true,
          "showStock": true
        },
        "sectionCollectionId": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
        "sortOrder": 42,
        "spacing": "Normal",
        "subtitle": "string",
        "supplierNumbers": [
          "SUP-001"
        ],
        "testimonials": [
          {
            "author": "string",
            "avatarUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
            "quote": "string",
            "rating": 42,
            "role": "string"
          }
        ],
        "timeline": {
          "marker": "Number",
          "steps": [
            {}
          ]
        },
        "title": "string",
        "tone": "Default",
        "twoColumns": true,
        "type": "Hero",
        "videoUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg"
      }
    ]
  },
  "createdDate": "2026-06-11T09:24:13.418",
  "excerpt": "string",
  "featuredImageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
  "isPublished": true,
  "links": {
    "self": "string"
  },
  "metaDescription": "string",
  "modifiedDate": "2026-06-11T09:24:13.418",
  "pageType": "Page",
  "parentSlug": "string",
  "publishDate": "2026-06-11T09:24:13.418",
  "publishedAt": "2026-06-11T09:24:13.418",
  "showInNavigation": true,
  "slug": "string",
  "sortOrder": 42,
  "tags": [
    "string"
  ],
  "title": "string"
}

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

POST /channels/{channelCode}/content-pages/{slug}/publish

Publish a content page

Marks the page published and stamps publishedAt. Publishing an already published page is harmless and leaves the original publishedAt alone. An article whose publishDate is still in the future stays hidden in the storefront until that date passes, even once published here.

content-pages:write Kräver Idempotency-Key

Sökvägsparametrar

Fält Typ Beskrivning
channelCode Krävs string Code of the channel the page belongs to.
slug Krävs string The page's slug within that channel.

Svar

204 Tom body.
404 ProblemDetails No channel with that code, or no page with that slug in it.
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.fluit.cloud/preview/channels/{channelCode}/content-pages/{slug}/publish" \
  -H "Idempotency-Key: $(uuidgen)"
Svar 404
{
  "detail": "string",
  "instance": "string",
  "status": 42,
  "title": "string",
  "type": "string"
}

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

POST /channels/{channelCode}/content-pages/{slug}/unpublish

Unpublish a content page

Hides the page from the storefront without deleting it. The sections, SEO and slug are kept, so publishing it again restores exactly what was there. Use this rather than DELETE to take something down temporarily.

content-pages:write Kräver Idempotency-Key

Sökvägsparametrar

Fält Typ Beskrivning
channelCode Krävs string Code of the channel the page belongs to.
slug Krävs string The page's slug within that channel.

Svar

204 Tom body.
404 ProblemDetails No channel with that code, or no page with that slug in it.
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.fluit.cloud/preview/channels/{channelCode}/content-pages/{slug}/unpublish" \
  -H "Idempotency-Key: $(uuidgen)"
Svar 404
{
  "detail": "string",
  "instance": "string",
  "status": 42,
  "title": "string",
  "type": "string"
}

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

GET /channels/{channelCode}/home-page

Read a channel's home page

Returns the section list the storefront renders at the channel's root. The home page is not a content page: there is exactly one per channel, it has no slug, and it cannot be unpublished or deleted — which is why it is addressed by channel code alone.

Visa hela beskrivningen

The body is the same config a content page carries, with the same section types and the same business-key references, so one renderer covers both. Replace it with PUT on the same URL. Responses carry a weak ETag; pass it back in If-None-Match to get 304 Not Modified while the home page is unchanged.

content-pages:read Stödjer ETag

Sökvägsparametrar

Fält Typ Beskrivning
channelCode Krävs string Code of the channel whose home page to read.

Svar

200 PublicChannelHomePageResponse
  • 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
channelCode Krävs string · nullable The channel whose home page this is.
config Krävs PageConfig A page built from sections: the layout plus the sections in order.
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 When the storefront configuration was last changed (UTC), or null if never.
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 channel with that code, or the channel has no storefront configuration yet (StorefrontConfig.NotFound).
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.fluit.cloud/preview/channels/{channelCode}/home-page"
Svar 200
{
  "channelCode": "STD",
  "config": {
    "fullWidth": true,
    "layout": "Standard",
    "sections": [
      {
        "alignment": "Left",
        "anchor": "string",
        "articleLinkText": "string",
        "articleType": "All",
        "bannerEndDate": "2026-06-11T09:24:13.418",
        "bannerImageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
        "bannerLinkUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
        "bannerStartDate": "2026-06-11T09:24:13.418",
        "buttons": [
          {
            "label": "string",
            "openInNewTab": true,
            "pageSlug": "string",
            "url": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
            "variant": "Primary"
          }
        ],
        "cardColumns": 42,
        "cardVariant": "Icon",
        "categoryCode": "STD",
        "categoryCodes": [
          "STD"
        ],
        "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",
          "values": null
        },
        "eyebrow": "string",
        "faq": {
          "items": [
            {}
          ]
        },
        "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": "None",
          "asideHtml": "string",
          "formToken": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44"
        },
        "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",
        "heroImageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
        "heroTextColor": "Light",
        "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",
        "isVisible": true,
        "itemGroupCode": "STD",
        "lead": "string",
        "logos": {
          "grayscale": true,
          "items": [
            {}
          ],
          "size": "Medium"
        },
        "maxBrands": 42,
        "maxProducts": 42,
        "mediaText": {
          "altText": "string",
          "bodyHtml": "string",
          "mediaAspect": "Original",
          "mediaPosition": "Left",
          "mediaUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
          "videoUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg"
        },
        "narrowText": true,
        "parentCategoryCode": "STD",
        "productColumns": 42,
        "productNumbers": [
          "ABC-001"
        ],
        "productSort": "Manual",
        "productSpotlight": {
          "altText": "string",
          "badge": "string",
          "bodyHtml": "string",
          "documentCategory": "Datasheet",
          "documentIds": [
            "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44"
          ],
          "documents": "None",
          "layout": "SideBySide",
          "mediaPosition": "Left",
          "mediaUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
          "productNumber": "ABC-001",
          "showAddToCart": true,
          "showKeySpecs": true,
          "showPrice": true,
          "showStock": true
        },
        "sectionCollectionId": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
        "sortOrder": 42,
        "spacing": "Normal",
        "subtitle": "string",
        "supplierNumbers": [
          "SUP-001"
        ],
        "testimonials": [
          {
            "author": "string",
            "avatarUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
            "quote": "string",
            "rating": 42,
            "role": "string"
          }
        ],
        "timeline": {
          "marker": "Number",
          "steps": [
            {}
          ]
        },
        "title": "string",
        "tone": "Default",
        "twoColumns": true,
        "type": "Hero",
        "videoUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg"
      }
    ]
  },
  "links": {
    "self": "string"
  },
  "modifiedDate": "2026-06-11T09:24:13.418"
}

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

PUT /channels/{channelCode}/home-page

Replace a channel's home page

Replaces the home page: layout, full-width flag and the whole section list. This is a PUT and not a PATCH because the section list is positional — sending a subset would be ambiguous between "these are the sections now" and "merge these in".

Visa hela beskrivningen

Read the home page, change what you need, send the whole config back. Keep each section's id when you do: an omitted id creates a new section, so dropping them would replace every section with a copy and lose their identity. This replaces the whole config, so send every field you want kept: an omitted layout or fullWidth falls back to its default rather than to the stored value. sections has no default and must be present — send [] to clear the page deliberately, so that a body carrying only layout cannot wipe it by accident. Products, categories and suppliers are named by business key. An unknown key is rejected with 400 rather than dropped, so a section cannot silently lose half its products. Returns the whole home page, the same representation as GET, so the caller sees the result without a second request. No Idempotency-Key is needed — the header is required on POST. Repeating the same body is safe as long as the sections carry their ids; sections sent without one are created afresh on every call.

content-pages:write

Sökvägsparametrar

Fält Typ Beskrivning
channelCode Krävs string Code of the channel whose home page to replace.

Body krävs

Fält Typ Beskrivning
fullWidth boolean True for a full-bleed page, false to keep the content inside the container width.
layout enum Page layout exposed via the Public API. Standard WithSidebar Magazine
sections Krävs PageSection[] · nullable The sections, in the order they are rendered. Required on the way in — send `[]` to clear the page.

Svar

200 PublicChannelHomePageResponse
Fält Typ Beskrivning
channelCode Krävs string · nullable The channel whose home page this is.
config Krävs PageConfig A page built from sections: the layout plus the sections in order.
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 When the storefront configuration was last changed (UTC), or null if never.
400 ProblemDetails A section referenced an item number, category code or supplier number that does not exist, or two sections carried the same id. The error names the section and the field, e.g. sections[2].productNumbers[0]. Also when a section omitted a field its own type requires: a SharedSections section without sectionCollectionId is rejected as sections[{index}].sectionCollectionId.
Fält Typ
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
404 ProblemDetails No channel with that code, or the channel has no storefront configuration yet (StorefrontConfig.NotFound).
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 PUT "https://api.fluit.cloud/preview/channels/{channelCode}/home-page" \
  -H "Content-Type: application/json" \
  -d @body.json
Svar 200
{
  "channelCode": "STD",
  "config": {
    "fullWidth": true,
    "layout": "Standard",
    "sections": [
      {
        "alignment": "Left",
        "anchor": "string",
        "articleLinkText": "string",
        "articleType": "All",
        "bannerEndDate": "2026-06-11T09:24:13.418",
        "bannerImageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
        "bannerLinkUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
        "bannerStartDate": "2026-06-11T09:24:13.418",
        "buttons": [
          {
            "label": "string",
            "openInNewTab": true,
            "pageSlug": "string",
            "url": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
            "variant": "Primary"
          }
        ],
        "cardColumns": 42,
        "cardVariant": "Icon",
        "categoryCode": "STD",
        "categoryCodes": [
          "STD"
        ],
        "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",
          "values": null
        },
        "eyebrow": "string",
        "faq": {
          "items": [
            {}
          ]
        },
        "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": "None",
          "asideHtml": "string",
          "formToken": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44"
        },
        "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",
        "heroImageUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
        "heroTextColor": "Light",
        "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",
        "isVisible": true,
        "itemGroupCode": "STD",
        "lead": "string",
        "logos": {
          "grayscale": true,
          "items": [
            {}
          ],
          "size": "Medium"
        },
        "maxBrands": 42,
        "maxProducts": 42,
        "mediaText": {
          "altText": "string",
          "bodyHtml": "string",
          "mediaAspect": "Original",
          "mediaPosition": "Left",
          "mediaUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
          "videoUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg"
        },
        "narrowText": true,
        "parentCategoryCode": "STD",
        "productColumns": 42,
        "productNumbers": [
          "ABC-001"
        ],
        "productSort": "Manual",
        "productSpotlight": {
          "altText": "string",
          "badge": "string",
          "bodyHtml": "string",
          "documentCategory": "Datasheet",
          "documentIds": [
            "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44"
          ],
          "documents": "None",
          "layout": "SideBySide",
          "mediaPosition": "Left",
          "mediaUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
          "productNumber": "ABC-001",
          "showAddToCart": true,
          "showKeySpecs": true,
          "showPrice": true,
          "showStock": true
        },
        "sectionCollectionId": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
        "sortOrder": 42,
        "spacing": "Normal",
        "subtitle": "string",
        "supplierNumbers": [
          "SUP-001"
        ],
        "testimonials": [
          {
            "author": "string",
            "avatarUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg",
            "quote": "string",
            "rating": 42,
            "role": "string"
          }
        ],
        "timeline": {
          "marker": "Number",
          "steps": [
            {}
          ]
        },
        "title": "string",
        "tone": "Default",
        "twoColumns": true,
        "type": "Hero",
        "videoUrl": "https://cdn.fluit.cloud/assets/widget-a-front.jpg"
      }
    ]
  },
  "links": {
    "self": "string"
  },
  "modifiedDate": "2026-06-11T09:24:13.418"
}

Bas-URL https://api.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.

PageConfig

PublicPageConfig

A page built from sections: the layout plus the sections in order.

Fält Typ Beskrivning
fullWidth boolean True for a full-bleed page, false to keep the content inside the container width.
layout enum Page layout exposed via the Public API. Standard WithSidebar Magazine
sections Krävs PageSection[] · nullable The sections, in the order they are rendered. Required on the way in — send `[]` to clear the page.

PageSection

PublicPageSection

One section on a page. Which fields apply depends on PublicApi.Preview.ContentPages.Queries.PublicPageSection.Type; the rest are ignored.

Fält Typ Beskrivning
alignment enum Alignment of a section's heading. Mirrors `Domain.Ecom.SectionAlignment`. Left Center
anchor string · nullable HTML id, so a link can lead straight to the section (`/contact#write-to-us`).
articleLinkText string · nullable Label on the link to the archive. Empty hides the link.
articleType enum Which content pages a PublicApi.Preview.ContentPages.Queries.PublicPageSectionType.LatestArticles section lists. Mirrors `Domain.Ecom.ArticleSourceType`. All BlogPosts News
bannerEndDate string(date-time) · nullable When the banner stops showing. Null means never.
bannerImageUrl string · nullable Banner image.
bannerLinkUrl string · nullable Where the banner leads.
bannerStartDate string(date-time) · nullable When the banner starts showing. Null means immediately.
buttons SectionButton[] · nullable Buttons under the heading, at most three.
cardColumns integer Columns on wide screens (2–4). Zero lets the storefront choose from the number of cards.
cardVariant enum How the cards of a FeatureCards section are drawn. Mirrors `Domain.Ecom.CardVariant`. Icon ImageTop ImageLeft
categoryCode string · nullable Category to take products from, by category code.
categoryCodes string[] · nullable Specific categories to show, by category code.
contact SectionContact What a Contact section shows.
cssClass string · nullable Extra CSS class, for storefronts that style sections themselves.
custom SectionCustom A custom block on a page: which block, and the values for its fields.
eyebrow string · nullable A short line above the heading ("CONTACT", "OUR SERVICES").
faq SectionFaq A Faq section's questions.
featureCards PageSectionFeatureCard[] · nullable Cards in a FeatureCards section.
form SectionForm A Form section's settings. What happens with a submission is set on the form in Fluit.
galleryImages PageSectionImage[] · nullable Images in a gallery or carousel section.
heroCtaText string · nullable Call-to-action label.
heroCtaUrl string · nullable Where the call to action leads.
heroImageUrl string · nullable Background image for a Hero section.
heroTextColor enum Text colour for a hero section. Mirrors `Domain.Ecom.HeroTextColor`. Light Dark
heroVideoPosterUrl string · nullable Poster frame for a direct-link hero video. Falls back to heroImageUrl.
heroVideoUrl string · nullable Video played from the hero (YouTube, Vimeo or a direct link).
htmlContent string · nullable HTML body for a TextBlock section.
id string(uuid) · nullable The section's own id, stable across edits so a client can address one section of a page. Generated on create when omitted.
isVisible boolean False hides the section without removing it.
itemGroupCode string · nullable Item group to take products from, by category code.
lead string · nullable Lead paragraph of a TextBlock section, between heading and body.
logos SectionLogos A Logos section's logos.
maxBrands integer How many brands to show at most.
maxProducts integer How many products to show at most.
mediaText SectionMediaText A MediaText section's image and text.
narrowText boolean A narrow text column, for long reads.
parentCategoryCode string · nullable Show every child of this category, by category code.
productColumns integer Columns in the product grid.
productNumbers string[] · nullable Manually picked products, by item number, in display order.
productSort enum How products are ordered inside a product section. Mirrors `Domain.Ecom.ProductSortOrder`. Manual Newest PriceLowToHigh PriceHighToLow Bestselling Random Alphabetical
productSpotlight SectionProductSpotlight A ProductSpotlight section: one product shown large. Name, images, key specs, price, stock and documents are read from the product itself on every page view, so only the editor's own choices live here.
sectionCollectionId string(uuid) · nullable A SharedSections section's collection. An opaque id: read it from a page and send it back unchanged; collections are managed in Fluit. Required on a SharedSections section — omit it or send an empty id and the write is rejected with 400 naming sections[{index}].sectionCollectionId. Ignored on every other section type.
sortOrder integer Position on the page. Sections are rendered in ascending order.
spacing enum Space above and below a section. Mirrors `Domain.Ecom.SectionSpacing`. Normal Compact Spacious
subtitle string · nullable Sub-heading or lead text.
supplierNumbers string[] · nullable Specific suppliers to show, by supplier number.
testimonials PageSectionTestimonial[] · nullable Testimonials to show.
timeline SectionTimeline A Timeline section's steps.
title string · nullable Section heading.
tone enum A section's background, from the channel's branding. Mirrors `Domain.Ecom.SectionTone`. Default Muted Ink Brand Accent
twoColumns boolean Break the TextBlock body into two columns on wide screens.
type Krävs enum The kinds of section a page can be built from. Mirrors `Domain.Ecom.PageSectionType` — see PublicApi.Preview.ContentPages.Queries.PublicPageLayout for why. Hero FeaturedProducts ProductsByCategory ProductsByGroup NewArrivals BestSellers OnSale Categories Banner TextBlock Newsletter Brands Testimonials ImageGallery Video Divider LatestArticles FeatureCards CallToAction Form MediaText Faq Logos Contact SharedSections Custom Timeline ProductSpotlight
videoUrl string · nullable Video URL (YouTube, Vimeo or a direct mp4 link).

PageSectionFeatureCard

PublicPageSectionFeatureCard

One card in a FeatureCards section.

Fält Typ Beskrivning
iconName string · nullable Icon from the storefront's fixed set, e.g. `shield` or `truck`. An unknown name draws no icon rather than failing.
imageAlt string · nullable Alt text for the card's image.
imageUrl string · nullable The card's image, when the section draws cards with images.
linkText string · nullable Link label. Without one the whole card is clickable.
linkUrl string · nullable Where the card links. Null makes it non-clickable. Either a storefront path starting with `/` or an absolute http(s) URL — a protocol-relative address is refused, because it inherits the page's scheme while looking like an internal path.
text string · nullable Body text under the heading.
title Krävs string Card heading.

PageSectionImage

PublicPageSectionImage

One image in a gallery section.

Fält Typ Beskrivning
altText string · nullable Alt text, for accessibility.
caption string · nullable Caption shown with the image.
imageUrl Krävs string The image.
linkUrl string · nullable Where the image links. Null makes it non-clickable.

PageSectionTestimonial

PublicPageSectionTestimonial

One testimonial.

Fält Typ Beskrivning
author string · nullable Who said it.
avatarUrl string · nullable Portrait image.
quote Krävs string The quote itself.
rating integer · nullable Rating from 1 to 5. Null shows no rating.
role string · nullable Their role or company.

SectionButton

PublicSectionButton

A button under a section's heading.

Fält Typ Beskrivning
label Krävs string The button's label.
openInNewTab boolean Open in a new tab.
pageSlug string · nullable The content page the button leads to, by slug in the same channel. The link then follows the page when its address changes.
url string · nullable Where the button leads: a storefront path, an anchor, mailto:/tel: or an absolute http(s) URL. When PublicApi.Preview.ContentPages.Queries.PublicSectionButton.PageSlug is set, this is the page's current address on the way out and ignored on the way in.
variant enum How a section button is drawn. Mirrors `Domain.Ecom.SectionButtonVariant`. Primary Secondary Link

SectionContact

PublicSectionContact

What a Contact section shows.

Fält Typ Beskrivning
directionsUrl string · nullable The link behind "Get directions".
mapImageUrl string · nullable A map image (an image, not an embedded map).
showAddress boolean Show the visiting address.
showEmail boolean Show the email address.
showOpeningHours boolean Show the opening hours.
showPhone boolean Show the phone number.

SectionCustom

PublicSectionCustom

A custom block on a page: which block, and the values for its fields.

Fält Typ Beskrivning
blockKey Krävs string The block's key, unique in the channel, e.g. `prislista`.
values object · nullable The values, keyed by field key. A list is an array of objects, an image `{ "url", "alt" }`, a link `{ "url", "openInNewTab" }`, a choice the option's key, a date ISO 8601.

SectionFaq

PublicSectionFaq

A Faq section's questions.

Fält Typ Beskrivning
items SectionFaqItem[] · nullable The questions, in display order.

SectionFaqItem

PublicSectionFaqItem

One question in a Faq section.

Fält Typ Beskrivning
answerHtml string · nullable The answer, as HTML.
question Krävs string The question.

SectionForm

PublicSectionForm

A Form section's settings. What happens with a submission is set on the form in Fluit.

Fält Typ Beskrivning
aside enum What stands next to a form. Mirrors `Domain.Ecom.FormAside`. None ContactInfo Text
asideHtml string · nullable The text next to the form when aside is Text.
formToken Krävs string(uuid) The form, by its public token (the same token as in the form's embed link).

SectionLogos

PublicSectionLogos

A Logos section's logos.

Fält Typ Beskrivning
grayscale boolean Show the logos in greyscale, in colour on hover.
items SectionLogo[] · nullable The logos, in display order.
size enum How large the logos are drawn. Mirrors `Domain.Ecom.LogoSize`. Medium Small Large

SectionMediaText

PublicSectionMediaText

A MediaText section's image and text.

Fält Typ Beskrivning
altText string · nullable Alt text for the image.
bodyHtml string · nullable The text, as HTML.
mediaAspect enum The image's proportions in a MediaText section. Mirrors `Domain.Ecom.MediaAspect`. Original Square Wide
mediaPosition enum Where the image stands in a MediaText section. Mirrors `Domain.Ecom.MediaPosition`. Left Right
mediaUrl string · nullable The image.
videoUrl string · nullable A video shown instead of the image; the image becomes its poster.

SectionProductSpotlight

PublicSectionProductSpotlight

A ProductSpotlight section: one product shown large. Name, images, key specs, price, stock and documents are read from the product itself on every page view, so only the editor's own choices live here.

Fält Typ Beskrivning
altText string · nullable Alt text for that image. The product's own images carry theirs.
badge string · nullable Badge over the image, e.g. "Firmware v1.2.0".
bodyHtml string · nullable The editor's pitch, as HTML. Empty falls back to the product's short description.
documentCategory enum A category of product document. The document half of `Domain.Items.AssetCategory`, name for name and value for value — the image categories have no meaning for a document list, and advertising them would invite a value the write rejects. `PublicPageEnumParityTests` fails the build if one of these drifts from the domain. Datasheet Manual Certificate SafetySheet Warranty Brochure Installation Firmware Software Other
documentIds string(uuid)[] · nullable The chosen documents when documents is Selected, at most ten. Opaque ids: read them from a product and send them back unchanged. Ignored for every other value of documents.
documents enum Which of the product's documents a ProductSpotlight section lists. Mirrors `Domain.Ecom.SpotlightDocuments`. None Selected Category
layout enum How a ProductSpotlight section is drawn. Mirrors `Domain.Ecom.SpotlightLayout`. SideBySide Banner Row
mediaPosition enum Where the image stands in a MediaText section. Mirrors `Domain.Ecom.MediaPosition`. Left Right
mediaUrl string · nullable An image of your own instead of the product's.
productNumber Krävs string The product, by item number. Required on a ProductSpotlight section — omit it and the write is rejected with 400 naming sections[{index}].productSpotlight.productNumber.
showAddToCart boolean Show the buy button. Needs the channel's webshop turned on.
showKeySpecs boolean Show the channel's filterable attributes for the product.
showPrice boolean Show the price. The storefront still decides what this visitor may see.
showStock boolean Show the stock status.

SectionTimeline

PublicSectionTimeline

A Timeline section's steps.

Fält Typ Beskrivning
marker enum What is drawn at each step in a Timeline section. Number Icon Dot
steps SectionTimelineStep[] · nullable The steps, in display order.

SectionTimelineOption

PublicSectionTimelineOption

One of several paths through a step in a Timeline section.

Fält Typ Beskrivning
bodyHtml string · nullable The body text, as HTML.
buttons SectionButton[] · nullable Buttons in the alternative, at most three.
title Krävs string The alternative's title, without a letter.

SectionTimelineStep

PublicSectionTimelineStep

One step in a Timeline section.

Fält Typ Beskrivning
alternatives SectionTimelineOption[] · nullable Paths that lead through the same step, at most four.
bodyHtml string · nullable The body text, as HTML.
buttons SectionButton[] · nullable Buttons in the step, at most three.
iconName string · nullable Icon name, used when the marker is Icon.
title Krävs string The step's title, without a number.