---
title: "List posts"
method: GET
path: "/v1/posts"
tags: ["Posts"]
---

# List posts

`GET /v1/posts`

Get a paginated list of published posts with optional filtering

## Query parameters

- `limit` integer — Number of posts per page (1-100)
- `page` integer — Page number
- `order` 'asc' | 'desc' — Sort order by publishedAt
- `categories` string[] — Category slugs to include
- `excludeCategories` string[] — Category slugs to exclude
- `tags` string[] — Tag slugs to include
- `excludeTags` string[] — Tag slugs to exclude
- `query` string — Search query for title and content
- `format` 'html' | 'markdown' — Content format (html or markdown)
- `featured` 'true' | 'false' — Filter by featured status
- `status` 'published' | 'draft' | 'all' — Filter by post status. Use 'published' for live posts, 'draft' for unpublished posts, or 'all' for both.

## Response `200`

Paginated list of posts

- PostsListResponse
  - `posts` Post[], required
    - `id` string, required
    - `slug` string, required
    - `title` string, required
    - `status` 'published' | 'draft', required
    - `featured` boolean, required
    - `coverImage` string, nullable, required
    - `description` string, required
    - `publishedAt` string, date-time, required
    - `updatedAt` string, date-time, required
    - `authors` AuthorRef[], required
      - `id` string, required
      - `name` string, required
      - `image` string, nullable, required
      - `bio` string, nullable, required
      - `role` string, nullable, required
      - `slug` string, required
      - `socials` SocialRef[], required
        - `url` string, uri, required
        - `platform` string, required
    - `category` CategoryRef, required
      - `id` string, required
      - `name` string, required
      - `slug` string, required
      - `description` string, nullable, required
    - `tags` TagRef[], required
      - `id` string, required
      - `name` string, required
      - `slug` string, required
      - `description` string, nullable, required
    - `fields` object, required — Custom field values keyed by field key
    - `content` string, required
  - `pagination` Pagination, required
    - `limit` integer, required
    - `currentPage` integer, required
    - `nextPage` integer, nullable, required
    - `previousPage` integer, nullable, required
    - `totalPages` integer, required
    - `totalItems` integer, required

## Other responses

- `400` — Invalid query parameters or page number
- `500` — Server error

---

[API](https://skmtc.dev/marblecms/apis/marble-api.md) · [All operations](https://skmtc.dev/marblecms/apis/marble-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/marblecms/marble-api/revisions/ce3a22722c0e/schema)
