---
title: "Publish a scheduled version immediately"
method: POST
path: "/versions/{versionId}/publish-now"
tags: ["Drafts and publishing"]
---

# Publish a scheduled version immediately

`POST /versions/{versionId}/publish-now`

## Request

- Base URL: `https://studio.weaverse.io/api/v1/content`
- URL: `https://studio.weaverse.io/api/v1/content/versions/{versionId}/publish-now`
- Auth: HTTP bearer

Publishes an already scheduled page or theme version now instead of waiting for `publishAt`. This is the same operation as "Publish now" in Studio's scheduled content manager. To publish an unscheduled page draft, use `POST /publish-versions/{versionId}` instead.

**Outcomes**

- 200: `version` is the published row (`status: "PUBLISHED"`, `outcome: "published"`). For a page, `pageUpdatedAt` and `projectUpdatedAt` give the new live revisions.
- 200 with `cacheDelivery: "degraded"` and a `warning`: content is live but cache invalidation failed. The row keeps its `publishAt` retry marker and edge delivery is retried without replaying content. Do not publish again.
- 409 `CONFLICT`: the version could not be published, for example because live content moved since it was scheduled (it is cancelled; a draft returns to `ACTIVE`), or because it is not scheduled (a theme version, a page version that is neither a draft nor scheduled, or a draft that did not transition). Nothing was applied; `details` carries the stored row when there is one, so you can reconcile.
- 409 `STALE_PAGE`: the draft head or its live base moved. Re-read and retry.

Required scope: `content:publish`

## Request body

- PublishNowBody
  - `projectId` string, required
  - `type` 'page' | 'theme', required

## Response `200`

Published (cacheDelivery=degraded if edge delivery pending)

- object

## Other responses

- `401`: Missing or invalid credentials
- `403`: Foreign project or missing scope (INSUFFICIENT_SCOPE)
- `404`: Not found (never discloses other tenants)
- `409`: CONFLICT: not scheduled (a theme version, a page version that is neither a draft nor scheduled, or a draft that did not transition; nothing was applied), or cancelled at publish time (persisted row in `details`). STALE_PAGE: the draft head or its live base moved

---

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