---
title: "Publish landing page"
method: POST
path: "/landing-pages/{landingPageId}/publish"
tags: ["Landing Pages"]
---

# Publish landing page

`POST /landing-pages/{landingPageId}/publish`

Publishes a landing page and optionally updates name, slug, or content first.

## Path parameters

- `landingPageId` string, required

## Request body

- object
  - `name` string
  - `slug` string
  - `content` LandingPageContent — Version 2 landing page builder document. Providing content on update replaces the whole document. Block IDs must be unique throughout the tree. A missing footer is appended automatically; after normalization exactly one footer and at most one form are allowed. Groups may nest at most eight levels, and every child must share its parent slot. See /api-reference/landing-pages/content for block examples and semantic validation. Form and footer blocks must stay at the root, outside groups.
    - `version` 2, required
    - `template` 'from-scratch' | 'waitlist' | 'lead-magnet' | 'launch' | 'demo-request' | 'webinar' | 'newsletter' | 'product-hunt' | 'pricing-offer' | 'agency-lead-gen' | 'feature-announcement'
    - `seo` LandingPageSeo
      - `title` string
      - `description` string
      - `faviconUrl` string — Empty falls back to the company logo.
      - `hideFromSearchEngines` boolean — Adds noindex, nofollow. The page stays reachable by direct link.
    - `header` LandingPageHeader
      - `enabled` boolean
      - `showLogo` boolean
      - `logoUrl` string
      - `logoSize` integer
      - `showName` boolean
      - `name` string
    - `theme` LandingPageTheme
      - `accentColor` string
      - `backgroundColor` string
      - `textColor` string
      - `mutedTextColor` string
      - `cardColor` string
      - `borderRadius` integer
      - `fontPair` 'modern-sans' | 'editorial-serif' | 'classic-serif' | 'friendly-rounded' | 'commerce-sans' | 'technical-mono'
      - `headingFontFamily` string
      - `bodyFontFamily` string
      - `density` 'compact' | 'balanced' | 'spacious'
      - `accentStyle` 'pill' | 'underline' | 'bar' | 'badge'
      - `surfaceStyle` 'soft' | 'outlined' | 'solid' | 'minimal'
      - `sectionAnimation` 'none' | 'fade' | 'slide-up' | 'zoom-in' — Scroll reveal animation; skipped for visitors who prefer reduced motion.
      - `sectionAnimationSpeed` 'slow' | 'normal' | 'fast'
    - `blocks` LandingPageBlock[], required — Blocks render in slot order: top, hero, form, body, footer, preserving order within each slot. Includes nested group children. An empty array is accepted: a default footer is appended whenever no footer is present. The stored document has exactly one footer.
      - union
        - LandingPageGroupBlock — Children share the parent slot. Overlay needs exactly one direct image block with at most one gallery image; other overlay groups normalize to stack. Maximum group depth is eight.
          - `id` string, required
          - `sectionId` string
          - `sectionKind` string
          - `sectionLabel` string
          - `sectionVariant` string
          - `sectionLayout` 'stack' | 'split' | 'center'
          - `sectionAlign` 'left' | 'center' | 'right'
          - `slot` 'top' | 'hero' | 'form' | 'body' | 'footer', required
          - `kind` 'group', required
          - `label` string
          - `layout` 'stack' | 'row' | 'grid' | 'overlay'
          - `columns` integer
          - `gap` integer
          - `padding` integer
          - `overlayColor` string
          - `overlayPosition` 'top' | 'center' | 'bottom'
          - `overlayShade` integer
          - `children` LandingPageBlock[]
        - LandingPageHeadingBlock
          - `id` string, required
          - `sectionId` string
          - `sectionKind` string
          - `sectionLabel` string
          - `sectionVariant` string
          - `sectionLayout` 'stack' | 'split' | 'center'
          - `sectionAlign` 'left' | 'center' | 'right'
          - `slot` 'top' | 'hero' | 'form' | 'body' | 'footer', required
          - `kind` 'heading', required
          - `level` 1 | 2 | 3
          - `content` string, required
          - `align` 'left' | 'center' | 'right'
        - LandingPageTextBlock
          - `id` string, required
          - `sectionId` string
          - `sectionKind` string
          - `sectionLabel` string
          - `sectionVariant` string
          - `sectionLayout` 'stack' | 'split' | 'center'
          - `sectionAlign` 'left' | 'center' | 'right'
          - `slot` 'top' | 'hero' | 'form' | 'body' | 'footer', required
          - `kind` 'text', required
          - `variant` 'paragraph' | 'eyebrow' | 'caption'
          - `content` string, required
          - `align` 'left' | 'center' | 'right'
        - LandingPageImageBlock
          - `id` string, required
          - `sectionId` string
          - `sectionKind` string
          - `sectionLabel` string
          - `sectionVariant` string
          - `sectionLayout` 'stack' | 'split' | 'center'
          - `sectionAlign` 'left' | 'center' | 'right'
          - `slot` 'top' | 'hero' | 'form' | 'body' | 'footer', required
          - `kind` 'image', required
          - `src` string
          - `alt` string
          - `images` LandingPageImageItem[]
            - `src` string
            - `alt` string
            - `linkUrl` string
          - `align` 'left' | 'center' | 'right'
          - `width` integer
          - `height` integer
          - `fit` 'cover' | 'contain'
        - LandingPageVideoBlock — Embeds a YouTube share URL. Other video providers and direct video files are not supported.
          - `id` string, required
          - `sectionId` string
          - `sectionKind` string
          - `sectionLabel` string
          - `sectionVariant` string
          - `sectionLayout` 'stack' | 'split' | 'center'
          - `sectionAlign` 'left' | 'center' | 'right'
          - `slot` 'top' | 'hero' | 'form' | 'body' | 'footer', required
          - `kind` 'video', required
          - `url` string
          - `title` string
          - `align` 'left' | 'center' | 'right'
          - `width` integer
          - `aspectRatio` '16:9' | '4:3' | '1:1' | '9:16'
        - LandingPageButtonBlock — CTA url accepts an HTTPS URL or an in-page anchor such as #form, #section-<sectionId>, #block-<blockId>, or #top. Anchor links open in the same tab.
          - `id` string, required
          - `sectionId` string
          - `sectionKind` string
          - `sectionLabel` string
          - `sectionVariant` string
          - `sectionLayout` 'stack' | 'split' | 'center'
          - `sectionAlign` 'left' | 'center' | 'right'
          - `slot` 'top' | 'hero' | 'form' | 'body' | 'footer', required
          - `kind` 'button', required
          - `text` string, required
          - `url` string
          - `variant` 'primary' | 'secondary'
          - `align` 'left' | 'center' | 'right'
        - LandingPageCustomHtmlBlock
          - `id` string, required
          - `sectionId` string
          - `sectionKind` string
          - `sectionLabel` string
          - `sectionVariant` string
          - `sectionLayout` 'stack' | 'split' | 'center'
          - `sectionAlign` 'left' | 'center' | 'right'
          - `slot` 'top' | 'hero' | 'form' | 'body' | 'footer', required
          - `kind` 'custom-html', required
          - `html` string
          - `height` integer
        - LandingPageFeatureGridBlock
          - `id` string, required
          - `sectionId` string
          - `sectionKind` string
          - `sectionLabel` string
          - `sectionVariant` string
          - `sectionLayout` 'stack' | 'split' | 'center'
          - `sectionAlign` 'left' | 'center' | 'right'
          - `slot` 'top' | 'hero' | 'form' | 'body' | 'footer', required
          - `kind` 'feature-grid', required
          - `features` LandingPageFeature[], required
            - `title` string, required
            - `description` string, required
          - `align` 'left' | 'center' | 'right'
          - `columns` integer
          - `layout` 'row' | 'column'
        - LandingPageStatsBlock
          - `id` string, required
          - `sectionId` string
          - `sectionKind` string
          - `sectionLabel` string
          - `sectionVariant` string
          - `sectionLayout` 'stack' | 'split' | 'center'
          - `sectionAlign` 'left' | 'center' | 'right'
          - `slot` 'top' | 'hero' | 'form' | 'body' | 'footer', required
          - `kind` 'stats', required
          - `stats` LandingPageStatistic[], required
            - `value` string, required
            - `label` string, required
          - `align` 'left' | 'center' | 'right'
          - `columns` integer
        - LandingPageTestimonialBlock
          - `id` string, required
          - `sectionId` string
          - `sectionKind` string
          - `sectionLabel` string
          - `sectionVariant` string
          - `sectionLayout` 'stack' | 'split' | 'center'
          - `sectionAlign` 'left' | 'center' | 'right'
          - `slot` 'top' | 'hero' | 'form' | 'body' | 'footer', required
          - `kind` 'testimonial', required
          - `testimonials` LandingPageTestimonial[], required
            - `quote` string, required
            - `name` string, required
            - `role` string
            - `avatarUrl` string
          - `align` 'left' | 'center' | 'right'
          - `columns` integer
          - `layout` 'row' | 'column'
        - LandingPageLogoCloudBlock
          - `id` string, required
          - `sectionId` string
          - `sectionKind` string
          - `sectionLabel` string
          - `sectionVariant` string
          - `sectionLayout` 'stack' | 'split' | 'center'
          - `sectionAlign` 'left' | 'center' | 'right'
          - `slot` 'top' | 'hero' | 'form' | 'body' | 'footer', required
          - `kind` 'logo-cloud', required
          - `heading` string
          - `logos` LandingPageLogo[], required
            - `name` string, required
          - `align` 'left' | 'center' | 'right'
          - `columns` integer
        - LandingPageFaqBlock
          - `id` string, required
          - `sectionId` string
          - `sectionKind` string
          - `sectionLabel` string
          - `sectionVariant` string
          - `sectionLayout` 'stack' | 'split' | 'center'
          - `sectionAlign` 'left' | 'center' | 'right'
          - `slot` 'top' | 'hero' | 'form' | 'body' | 'footer', required
          - `kind` 'faq', required
          - `heading` string
          - `items` LandingPageFaqItem[], required
            - `question` string, required
            - `answer` string, required
          - `align` 'left' | 'center' | 'right'
        - LandingPagePricingBlock — Pricing buttonUrl accepts an HTTPS URL or an in-page anchor such as #form.
          - `id` string, required
          - `sectionId` string
          - `sectionKind` string
          - `sectionLabel` string
          - `sectionVariant` string
          - `sectionLayout` 'stack' | 'split' | 'center'
          - `sectionAlign` 'left' | 'center' | 'right'
          - `slot` 'top' | 'hero' | 'form' | 'body' | 'footer', required
          - `kind` 'pricing', required
          - `eyebrow` string
          - `heading` string, required
          - `description` string
          - `price` string, required
          - `period` string
          - `buttonText` string, required
          - `buttonUrl` string
          - `features` string[], required
          - `align` 'left' | 'center' | 'right'
        - LandingPageFormBlock
          - `id` string, required
          - `sectionId` string
          - `sectionKind` string
          - `sectionLabel` string
          - `sectionVariant` string
          - `sectionLayout` 'stack' | 'split' | 'center'
          - `sectionAlign` 'left' | 'center' | 'right'
          - `slot` 'form', required
          - `kind` 'form', required
          - `heading` string
          - `description` string
          - `form` LandingPageFormConfig — Form audience and submission settings. listMode default uses the workspace default lists; none joins no lists; specific uses listIds. All listIds and tagIds must belong to your company. Custom field names must be unique and cannot be email, firstName, lastName or website. Redirect URLs must pass HTTP/HTTPS validation.
            - `enabled` boolean
            - `duplicateStrategy` 'skip' | 'merge' | 'overwrite'
            - `listMode` 'default' | 'none' | 'specific'
            - `listIds` string[]
            - `tagIds` string[]
            - `showFirstName` boolean
            - `showLastName` boolean
            - `showPhone` boolean
            - `firstNameRequired` boolean
            - `lastNameRequired` boolean
            - `phoneRequired` boolean
            - `emailPlaceholder` string
            - `firstNamePlaceholder` string
            - `lastNamePlaceholder` string
            - `phonePlaceholder` string
            - `customFields` LandingPageFormCustomField[] — Up to eight custom subscriber attributes. Names use letters, numbers, underscores, dots or dashes and must start with a letter. Use unique names; email, firstName, lastName and website are reserved.
              - …
            - `buttonText` string
            - `successMessage` string
            - `redirectUrl` string
          - `cardTilt` integer
          - `cardWidth` 'narrow' | 'medium' | 'wide'
        - LandingPageFooterBlock
          - `id` string, required
          - `sectionId` string
          - `sectionKind` string
          - `sectionLabel` string
          - `sectionVariant` string
          - `sectionLayout` 'stack' | 'split' | 'center'
          - `sectionAlign` 'left' | 'center' | 'right'
          - `slot` 'footer', required
          - `kind` 'footer', required
          - `brandText` string
          - `showBrandText` boolean
          - `showPrivacyLink` boolean
          - `privacyLabel` string
          - `privacyUrl` string
          - `showTermsLink` boolean
          - `termsLabel` string
          - `termsUrl` string
        - LandingPageSpacerBlock
          - `id` string, required
          - `sectionId` string
          - `sectionKind` string
          - `sectionLabel` string
          - `sectionVariant` string
          - `sectionLayout` 'stack' | 'split' | 'center'
          - `sectionAlign` 'left' | 'center' | 'right'
          - `slot` 'top' | 'hero' | 'form' | 'body' | 'footer', required
          - `kind` 'spacer', required
          - `height` integer
        - LandingPageDividerBlock
          - `id` string, required
          - `sectionId` string
          - `sectionKind` string
          - `sectionLabel` string
          - `sectionVariant` string
          - `sectionLayout` 'stack' | 'split' | 'center'
          - `sectionAlign` 'left' | 'center' | 'right'
          - `slot` 'top' | 'hero' | 'form' | 'body' | 'footer', required
          - `kind` 'divider', required

## Response `200`

Landing page published

- object
  - `success` boolean
  - `landingPage` LandingPageSummary
    - `id` string
    - `companyId` string
    - `name` string
    - `slug` string
    - `status` 'draft' | 'published'
    - `content` LandingPageContent — Version 2 landing page builder document. Providing content on update replaces the whole document. Block IDs must be unique throughout the tree. A missing footer is appended automatically; after normalization exactly one footer and at most one form are allowed. Groups may nest at most eight levels, and every child must share its parent slot. See /api-reference/landing-pages/content for block examples and semantic validation. Form and footer blocks must stay at the root, outside groups.
      - `version` 2, required
      - `template` 'from-scratch' | 'waitlist' | 'lead-magnet' | 'launch' | 'demo-request' | 'webinar' | 'newsletter' | 'product-hunt' | 'pricing-offer' | 'agency-lead-gen' | 'feature-announcement'
      - `seo` LandingPageSeo
        - `title` string
        - `description` string
        - `faviconUrl` string — Empty falls back to the company logo.
        - `hideFromSearchEngines` boolean — Adds noindex, nofollow. The page stays reachable by direct link.
      - `header` LandingPageHeader
        - `enabled` boolean
        - `showLogo` boolean
        - `logoUrl` string
        - `logoSize` integer
        - `showName` boolean
        - `name` string
      - `theme` LandingPageTheme
        - `accentColor` string
        - `backgroundColor` string
        - `textColor` string
        - `mutedTextColor` string
        - `cardColor` string
        - `borderRadius` integer
        - `fontPair` 'modern-sans' | 'editorial-serif' | 'classic-serif' | 'friendly-rounded' | 'commerce-sans' | 'technical-mono'
        - `headingFontFamily` string
        - `bodyFontFamily` string
        - `density` 'compact' | 'balanced' | 'spacious'
        - `accentStyle` 'pill' | 'underline' | 'bar' | 'badge'
        - `surfaceStyle` 'soft' | 'outlined' | 'solid' | 'minimal'
        - `sectionAnimation` 'none' | 'fade' | 'slide-up' | 'zoom-in' — Scroll reveal animation; skipped for visitors who prefer reduced motion.
        - `sectionAnimationSpeed` 'slow' | 'normal' | 'fast'
      - `blocks` LandingPageBlock[], required — Blocks render in slot order: top, hero, form, body, footer, preserving order within each slot. Includes nested group children. An empty array is accepted: a default footer is appended whenever no footer is present. The stored document has exactly one footer.
        - union
          - LandingPageGroupBlock — Children share the parent slot. Overlay needs exactly one direct image block with at most one gallery image; other overlay groups normalize to stack. Maximum group depth is eight.
            - `id` string, required
            - `sectionId` string
            - `sectionKind` string
            - `sectionLabel` string
            - `sectionVariant` string
            - `sectionLayout` 'stack' | 'split' | 'center'
            - `sectionAlign` 'left' | 'center' | 'right'
            - `slot` 'top' | 'hero' | 'form' | 'body' | 'footer', required
            - `kind` 'group', required
            - `label` string
            - `layout` 'stack' | 'row' | 'grid' | 'overlay'
            - `columns` integer
            - `gap` integer
            - `padding` integer
            - `overlayColor` string
            - `overlayPosition` 'top' | 'center' | 'bottom'
            - `overlayShade` integer
            - `children` LandingPageBlock[]
          - LandingPageHeadingBlock
            - `id` string, required
            - `sectionId` string
            - `sectionKind` string
            - `sectionLabel` string
            - `sectionVariant` string
            - `sectionLayout` 'stack' | 'split' | 'center'
            - `sectionAlign` 'left' | 'center' | 'right'
            - `slot` 'top' | 'hero' | 'form' | 'body' | 'footer', required
            - `kind` 'heading', required
            - `level` 1 | 2 | 3
            - `content` string, required
            - `align` 'left' | 'center' | 'right'
          - LandingPageTextBlock
            - `id` string, required
            - `sectionId` string
            - `sectionKind` string
            - `sectionLabel` string
            - `sectionVariant` string
            - `sectionLayout` 'stack' | 'split' | 'center'
            - `sectionAlign` 'left' | 'center' | 'right'
            - `slot` 'top' | 'hero' | 'form' | 'body' | 'footer', required
            - `kind` 'text', required
            - `variant` 'paragraph' | 'eyebrow' | 'caption'
            - `content` string, required
            - `align` 'left' | 'center' | 'right'
          - LandingPageImageBlock
            - `id` string, required
            - `sectionId` string
            - `sectionKind` string
            - `sectionLabel` string
            - `sectionVariant` string
            - `sectionLayout` 'stack' | 'split' | 'center'
            - `sectionAlign` 'left' | 'center' | 'right'
            - `slot` 'top' | 'hero' | 'form' | 'body' | 'footer', required
            - `kind` 'image', required
            - `src` string
            - `alt` string
            - `images` LandingPageImageItem[]
              - …
            - `align` 'left' | 'center' | 'right'
            - `width` integer
            - `height` integer
            - `fit` 'cover' | 'contain'
          - LandingPageVideoBlock — Embeds a YouTube share URL. Other video providers and direct video files are not supported.
            - `id` string, required
            - `sectionId` string
            - `sectionKind` string
            - `sectionLabel` string
            - `sectionVariant` string
            - `sectionLayout` 'stack' | 'split' | 'center'
            - `sectionAlign` 'left' | 'center' | 'right'
            - `slot` 'top' | 'hero' | 'form' | 'body' | 'footer', required
            - `kind` 'video', required
            - `url` string
            - `title` string
            - `align` 'left' | 'center' | 'right'
            - `width` integer
            - `aspectRatio` '16:9' | '4:3' | '1:1' | '9:16'
          - LandingPageButtonBlock — CTA url accepts an HTTPS URL or an in-page anchor such as #form, #section-<sectionId>, #block-<blockId>, or #top. Anchor links open in the same tab.
            - `id` string, required
            - `sectionId` string
            - `sectionKind` string
            - `sectionLabel` string
            - `sectionVariant` string
            - `sectionLayout` 'stack' | 'split' | 'center'
            - `sectionAlign` 'left' | 'center' | 'right'
            - `slot` 'top' | 'hero' | 'form' | 'body' | 'footer', required
            - `kind` 'button', required
            - `text` string, required
            - `url` string
            - `variant` 'primary' | 'secondary'
            - `align` 'left' | 'center' | 'right'
          - LandingPageCustomHtmlBlock
            - `id` string, required
            - `sectionId` string
            - `sectionKind` string
            - `sectionLabel` string
            - `sectionVariant` string
            - `sectionLayout` 'stack' | 'split' | 'center'
            - `sectionAlign` 'left' | 'center' | 'right'
            - `slot` 'top' | 'hero' | 'form' | 'body' | 'footer', required
            - `kind` 'custom-html', required
            - `html` string
            - `height` integer
          - LandingPageFeatureGridBlock
            - `id` string, required
            - `sectionId` string
            - `sectionKind` string
            - `sectionLabel` string
            - `sectionVariant` string
            - `sectionLayout` 'stack' | 'split' | 'center'
            - `sectionAlign` 'left' | 'center' | 'right'
            - `slot` 'top' | 'hero' | 'form' | 'body' | 'footer', required
            - `kind` 'feature-grid', required
            - `features` LandingPageFeature[], required
              - …
            - `align` 'left' | 'center' | 'right'
            - `columns` integer
            - `layout` 'row' | 'column'
          - LandingPageStatsBlock
            - `id` string, required
            - `sectionId` string
            - `sectionKind` string
            - `sectionLabel` string
            - `sectionVariant` string
            - `sectionLayout` 'stack' | 'split' | 'center'
            - `sectionAlign` 'left' | 'center' | 'right'
            - `slot` 'top' | 'hero' | 'form' | 'body' | 'footer', required
            - `kind` 'stats', required
            - `stats` LandingPageStatistic[], required
              - …
            - `align` 'left' | 'center' | 'right'
            - `columns` integer
          - LandingPageTestimonialBlock
            - `id` string, required
            - `sectionId` string
            - `sectionKind` string
            - `sectionLabel` string
            - `sectionVariant` string
            - `sectionLayout` 'stack' | 'split' | 'center'
            - `sectionAlign` 'left' | 'center' | 'right'
            - `slot` 'top' | 'hero' | 'form' | 'body' | 'footer', required
            - `kind` 'testimonial', required
            - `testimonials` LandingPageTestimonial[], required
              - …
            - `align` 'left' | 'center' | 'right'
            - `columns` integer
            - `layout` 'row' | 'column'
          - LandingPageLogoCloudBlock
            - `id` string, required
            - `sectionId` string
            - `sectionKind` string
            - `sectionLabel` string
            - `sectionVariant` string
            - `sectionLayout` 'stack' | 'split' | 'center'
            - `sectionAlign` 'left' | 'center' | 'right'
            - `slot` 'top' | 'hero' | 'form' | 'body' | 'footer', required
            - `kind` 'logo-cloud', required
            - `heading` string
            - `logos` LandingPageLogo[], required
              - …
            - `align` 'left' | 'center' | 'right'
            - `columns` integer
          - LandingPageFaqBlock
            - `id` string, required
            - `sectionId` string
            - `sectionKind` string
            - `sectionLabel` string
            - `sectionVariant` string
            - `sectionLayout` 'stack' | 'split' | 'center'
            - `sectionAlign` 'left' | 'center' | 'right'
            - `slot` 'top' | 'hero' | 'form' | 'body' | 'footer', required
            - `kind` 'faq', required
            - `heading` string
            - `items` LandingPageFaqItem[], required
              - …
            - `align` 'left' | 'center' | 'right'
          - LandingPagePricingBlock — Pricing buttonUrl accepts an HTTPS URL or an in-page anchor such as #form.
            - `id` string, required
            - `sectionId` string
            - `sectionKind` string
            - `sectionLabel` string
            - `sectionVariant` string
            - `sectionLayout` 'stack' | 'split' | 'center'
            - `sectionAlign` 'left' | 'center' | 'right'
            - `slot` 'top' | 'hero' | 'form' | 'body' | 'footer', required
            - `kind` 'pricing', required
            - `eyebrow` string
            - `heading` string, required
            - `description` string
            - `price` string, required
            - `period` string
            - `buttonText` string, required
            - `buttonUrl` string
            - `features` string[], required
            - `align` 'left' | 'center' | 'right'
          - LandingPageFormBlock
            - `id` string, required
            - `sectionId` string
            - `sectionKind` string
            - `sectionLabel` string
            - `sectionVariant` string
            - `sectionLayout` 'stack' | 'split' | 'center'
            - `sectionAlign` 'left' | 'center' | 'right'
            - `slot` 'form', required
            - `kind` 'form', required
            - `heading` string
            - `description` string
            - `form` LandingPageFormConfig — Form audience and submission settings. listMode default uses the workspace default lists; none joins no lists; specific uses listIds. All listIds and tagIds must belong to your company. Custom field names must be unique and cannot be email, firstName, lastName or website. Redirect URLs must pass HTTP/HTTPS validation.
              - …
            - `cardTilt` integer
            - `cardWidth` 'narrow' | 'medium' | 'wide'
          - LandingPageFooterBlock
            - `id` string, required
            - `sectionId` string
            - `sectionKind` string
            - `sectionLabel` string
            - `sectionVariant` string
            - `sectionLayout` 'stack' | 'split' | 'center'
            - `sectionAlign` 'left' | 'center' | 'right'
            - `slot` 'footer', required
            - `kind` 'footer', required
            - `brandText` string
            - `showBrandText` boolean
            - `showPrivacyLink` boolean
            - `privacyLabel` string
            - `privacyUrl` string
            - `showTermsLink` boolean
            - `termsLabel` string
            - `termsUrl` string
          - LandingPageSpacerBlock
            - `id` string, required
            - `sectionId` string
            - `sectionKind` string
            - `sectionLabel` string
            - `sectionVariant` string
            - `sectionLayout` 'stack' | 'split' | 'center'
            - `sectionAlign` 'left' | 'center' | 'right'
            - `slot` 'top' | 'hero' | 'form' | 'body' | 'footer', required
            - `kind` 'spacer', required
            - `height` integer
          - LandingPageDividerBlock
            - `id` string, required
            - `sectionId` string
            - `sectionKind` string
            - `sectionLabel` string
            - `sectionVariant` string
            - `sectionLayout` 'stack' | 'split' | 'center'
            - `sectionAlign` 'left' | 'center' | 'right'
            - `slot` 'top' | 'hero' | 'form' | 'body' | 'footer', required
            - `kind` 'divider', required
    - `viewCount` integer
    - `conversionCount` integer
    - `publishedAt` string, date-time, nullable
    - `createdAt` string, date-time
    - `updatedAt` string, date-time
    - `url` string, uri — Dashboard edit URL.
    - `appPublicUrl` string, uri, nullable — Sequenzy-hosted public URL when published.
    - `customDomain` string, nullable — Preferred verified custom hostname for this page.
    - `customDomainScope` 'page' | 'workspace' | 'null', nullable — Whether the preferred hostname is dedicated to this page or inherited from the workspace.
    - `publicUrl` string, uri, nullable — Custom-domain public URL when a verified custom domain is connected, otherwise the Sequenzy-hosted public URL.
    - `previewUrl` string, uri, nullable — Signed, unlisted visitor-facing preview of the current content. Works for drafts. Not indexed.

## Other responses

- `400` — Validation error
- `401` — Unauthorized
- `404` — Landing page not found

## Changes

- **2026-09-08** `f1d8cfd9faaf` — 11 breaking, 25 warning, 25 info
  - added `#/components/schemas/LandingPageSeo` to the `content/seo` request property `allOf` list
  - added `#/components/schemas/LandingPageTheme` to the `content/theme` request property `allOf` list
  - request property `content/template` was restricted to a list of enum values
  - request property `content/version` was restricted to a list of enum values
  - …57 more
- **2026-08-27** `73f826277d9a` — 1 info
  - added the optional property `landingPage/previewUrl` to the response with the `200` status
- **2026-08-20** `99f9c58cab67` — 2 info
  - added the new optional request property `content/theme`
  - added the optional property `landingPage/content/theme` to the response with the `200` status
- **2026-08-19** `ba3a29c6eb33` — 5 info
  - added the optional property `landingPage/customDomain` to the response with the `200` status
  - added the optional property `landingPage/customDomainScope` to the response with the `200` status
  - added the optional property `retryable` to the response with the `400` status
  - added the optional property `retryable` to the response with the `401` status
  - …1 more
- **2026-08-16** `6fd2903b91ce` — 3 info
  - added the optional property `code` to the response with the `400` status
  - added the optional property `code` to the response with the `401` status
  - added the optional property `code` to the response with the `404` status

[Full history](https://skmtc.dev/sequenzy/apis/sequenzy-api/changes/landing-pages/:landingPageId/publish/post.md)

---

[API](https://skmtc.dev/sequenzy/apis/sequenzy-api.md) · [All operations](https://skmtc.dev/sequenzy/apis/sequenzy-api/llms.txt) · [OpenAPI document](https://skmtc.dev/sequenzy/apis/sequenzy-api/revisions/e93563b0d37e?raw)
