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

# Publish one or many articles to a CMS provider

`POST /v3/cms/publish`

Publish existing SnowSEO articles to connected CMS providers. This does not create or generate new article content.

## Request body

- union
  - object
    - `teamId` string
    - `articleSlug` string, required
    - `provider` 'wordpress' | 'shopify' | 'webflow' | 'ghost' | 'webhook' | 'framer' | 'grigora' | 'embed', required
    - `status` 'draft' | 'publish'
    - `items` object[]
      - `articleSlug` string, required
      - `provider` 'wordpress' | 'shopify' | 'webflow' | 'ghost' | 'webhook' | 'framer' | 'grigora' | 'embed', required
      - `status` 'draft' | 'publish'
  - object
    - `teamId` string
    - `articleSlug` string
    - `provider` 'wordpress' | 'shopify' | 'webflow' | 'ghost' | 'webhook' | 'framer' | 'grigora' | 'embed'
    - `status` 'draft' | 'publish'
    - `items` object[], required
      - `articleSlug` string, required
      - `provider` 'wordpress' | 'shopify' | 'webflow' | 'ghost' | 'webhook' | 'framer' | 'grigora' | 'embed', required
      - `status` 'draft' | 'publish'

## Response `200`

Default Response

- object
  - `success` boolean
  - `succeeded` number
  - `failed` number
  - `results` object[]
    - `articleSlug` string
    - `provider` string
    - `success` boolean
    - `status` string
    - `postId` string
    - `postUrl` string
    - `error` string
  - `articleSlug` string — Article slug, echoed from the request.
  - `postId` string — CMS item ID (all providers)
  - `postUrl` string — Published or draft URL (all providers)
  - `status` string — draft | publish or CMS status

## Other responses

- `400` — Default Response
- `404` — Default Response
- `409` — Default Response
- `500` — Default Response

## Changes

- **2026-08-27** `fb2ac524c158` — 1 info
  - added the non-success response with the status `409`
- **2026-08-23** `78929b45c4f8` — 2 info
  - added the new `embed` enum value to the request property `items/items/provider`
  - added the new `embed` enum value to the request property `provider`
- **2026-08-09** `8f92b00b75d6` — 2 breaking
  - added `subschema #1` to the request body `allOf` list
  - removed `subschema #1, subschema #2` from the request body `oneOf` list
- **2026-07-26** `60ff6690f93c` — 2 info
  - added the new `grigora` enum value to the request property `items/items/provider`
  - added the new `grigora` enum value to the request property `provider`

[Change history](https://skmtc.dev/snowseo/apis/snowseo-api/changes/v3/cms/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-service-production.skmtc.workers.dev/v1/apis/snowseo/snowseo-api/revisions/dd05cfe959f3/schema)
