---
title: "Publish many articles to a CMS"
method: POST
path: "/v3/cms/articles/bulk-publish"
tags: ["CMS"]
---

# Publish many articles to a CMS

`POST /v3/cms/articles/bulk-publish`

## Request

- Base URL: `https://api.snowseo.com`
- URL: `https://api.snowseo.com/v3/cms/articles/bulk-publish`
- Auth: one of:
  - HTTP bearer
  - API key in header `x-api-key`
- TypeScript: <https://skmtc.dev/snowseo/apis/snowseo-api/docs/v3/cms/articles/bulk-publish/post.ts> (a function with typed inputs; its response is checked against the schema)

Publishes every selected article that is ready (generated or manual) to the given connected CMS provider. Writes to the live site; confirm the selection with articles_bulk_preview first. Processes up to 10 rows per call: repeat with afterId set to the returned nextCursor until it is null.

## Request body

- object
  - `teamId` string
  - `selection` union, required
    - object
      - `mode` 'ids', required
      - `ids` string[], required
    - object
      - `mode` 'all', required
      - `filters` object, required
        - `search` string
      - `excludedIds` string[], required
  - `afterId` string: The nextCursor from the previous call; omit on the first call.
  - `provider` 'wordpress' | 'shopify' | 'webflow' | 'ghost' | 'webhook' | 'framer' | 'grigora' | 'snowcms' | 'embed', required: Connected CMS to publish to.
  - `status` 'draft' | 'publish': Post status on the CMS. Defaults to publish.

## Response `200`

Default Response

- object
  - `success` boolean
  - `succeeded` number
  - `failed` number
  - `nextCursor` string, nullable
  - `eligibility` object
    - `selected` number, required
    - `eligible` number, required
    - `skipped` number, required
    - `byReason` object, required
  - `results` object[]
    - `id` string
    - `success` boolean
    - `error` string

## Other responses

- `500`: Default Response

## Changes

- **2026-11-03** `31b321592ad7`: 4 info
  - added the optional property `code` to the response with the `500` status
  - added the optional property `message` to the response with the `500` status
  - added the optional property `reference` to the response with the `500` status
  - added the optional property `success` to the response with the `500` status
- **2026-11-01** `6d1dc4928d97`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/snowseo/apis/snowseo-api/changes/v3/cms/articles/bulk-publish/post.md)

---

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