> ## Documentation Index
> Fetch the complete documentation index at: https://docs.marzipan.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Get a blog post

> Returns the full detail of a single published blog post by its slug, including the rendered content body, SEO metadata and any collections the post belongs to. Responses are cached (fresh for 10 minutes, served stale for up to 1 hour).



## OpenAPI

````yaml /api-reference/openapi.json get /cms/posts/{slug}
openapi: 3.0.0
info:
  title: Marzipan API
  version: 1.0.0
servers:
  - url: https://api.marzipan.co/v1
security:
  - tenantAuth: []
tags:
  - name: Account
    description: >-
      Account management endpoints including registration, login, and user
      details
  - name: Carts
    description: Shopping cart management endpoints
  - name: Products
    description: Product catalog and search endpoints
  - name: Subscriptions
    description: Subscription management and renewal endpoints
  - name: CMS
    description: Content management system endpoints
  - name: Messaging
    description: Message and communication endpoints
  - name: Search
    description: Search functionality endpoints
  - name: Settings
    description: >-
      Storefront settings and market detection used to configure the web
      components and checkout.
  - name: Analytics
    description: Storefront visit and attribution tracking.
  - name: Rewards
    description: >-
      Loyalty and rewards programme endpoints for the authenticated customer,
      covering points balance, tier status, perks, exclusive products and
      transaction history.
  - name: Forms
    description: Render and submit dynamic storefront forms defined in the CMS.
  - name: Events
    description: >-
      Check event availability, browse occurrences and recurring dates, generate
      ticket QR codes, and manage event waitlists (join, leave, check status,
      and claim promoted spots).
paths:
  /cms/posts/{slug}:
    get:
      tags:
        - CMS
      summary: Get a blog post
      description: >-
        Returns the full detail of a single published blog post by its slug,
        including the rendered content body, SEO metadata and any collections
        the post belongs to. Responses are cached (fresh for 10 minutes, served
        stale for up to 1 hour).
      parameters:
        - name: slug
          in: path
          required: true
          description: URL-friendly identifier of the blog post.
          schema:
            type: string
      responses:
        '200':
          description: The requested blog post.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CmsPostDetail'
              example:
                slug: welcome-to-our-store
                title: Welcome to our store
                excerpt: A short introduction to what we do.
                content: <p>Full HTML content of the post.</p>
                featuredImage: https://cdn.marzipan.co/media/1200x800/welcome.jpg
                author:
                  name: Jane Doe
                seo:
                  title: Welcome to our store
                  description: Everything you need to know to get started.
                  ogImage: https://cdn.marzipan.co/media/1200x630/welcome.jpg
                collections:
                  - slug: news
                    name: News
                createdAt: '2026-05-01T09:00:00Z'
                updatedAt: '2026-05-02T11:30:00Z'
        '404':
          description: No published post with the given slug exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                message: Post not found
components:
  schemas:
    CmsPostDetail:
      type: object
      description: Full detail of a published blog post.
      properties:
        slug:
          type: string
          description: URL-friendly post identifier.
        title:
          type: string
          description: Post title.
        excerpt:
          type: string
          description: Short summary of the post.
        content:
          type: string
          description: Full post content/body (HTML).
        featuredImage:
          type: string
          nullable: true
          description: >-
            Featured image URL (1200x800). Falls back to the tenant's social
            image if none is set.
        author:
          type: object
          description: The post's author.
          properties:
            name:
              type: string
              description: Author name.
        seo:
          type: object
          description: SEO metadata for the post.
          properties:
            title:
              type: string
              description: SEO meta title.
            description:
              type: string
              description: SEO meta description.
            ogImage:
              type: string
              nullable: true
              description: Open Graph image URL (1200x630).
        collections:
          type: array
          description: Collections this post belongs to.
          items:
            type: object
            properties:
              slug:
                type: string
                description: Collection slug.
              name:
                type: string
                description: Collection name.
        createdAt:
          type: string
          format: date-time
          description: Creation timestamp.
        updatedAt:
          type: string
          format: date-time
          description: Last update timestamp.
    Error:
      type: object
      properties:
        message:
          type: string
          description: Error message
      required:
        - message
  securitySchemes:
    tenantAuth:
      type: http
      scheme: bearer
      description: >-
        Bearer authentication header of the form `Bearer <token>`, where
        `<token>` is your API token.
      bearerFormat: JWT

````