---
title: "Publish generated content"
method: POST
path: "/org/content-engine/publish"
tags: ["Content Engine"]
---

# Publish generated content

`POST /org/content-engine/publish`

## Request

- Base URL: `https://apiv2.senso.ai/api/v1`
- URL: `https://apiv2.senso.ai/api/v1/org/content-engine/publish`
- Auth: API key in header `X-API-Key`

Publishes generated markdown as a content item to the org's destinations. Returns `201` when the content is created/published, or `200` when the content is created but publishing to the destinations failed (inspect `publish_status` and `publish_destinations`). Requires the GEO product.

## Request body

- ContentEnginePublishRequest: Publishes generated markdown as a content item. `raw_markdown` and `seo_title` are required; `geo_question_id` is optional. `builder_workspace_id` and `expected_workspace_version_id` must be supplied together.
  - `geo_question_id` string, uuid: The prompt this content answers.
  - `content_id` string, uuid: The existing content item to publish a new version of, if updating.
  - `generation_run_id` string, uuid: The generation run this publish belongs to, if any.
  - `generation_receipt_id` string, uuid
  - `ever_published` boolean: Legacy compatibility field; ignored by the server.
  - `raw_markdown` string, required
  - `seo_title` string, required
  - `summary` string
  - `publisher_ids` string[]: The destinations to publish to. Omit to use the org's configured destinations.
  - `mark_as_published` boolean: Record the content as already published externally rather than publishing it now.
  - `manual_published_at` string, date-time: When it was published externally (mark_as_published only).
  - `manual_published_url` string: Where it went live (mark_as_published only); used for citation attribution.
  - `builder_workspace_id` string, uuid
  - `expected_workspace_version_id` string, uuid

## Response `200`

Content created, but publishing to one or more destinations failed.

- ContentEnginePublishResponse: The result of publishing a content item.
  - `content_id` string, uuid, required
  - `version_id` string, uuid, required
  - `version_num` integer, required
  - `citeables_action` string, required: Legacy informational field.
  - `publish_status` string, required: Overall publish status: `success` or `failed`.
  - `editorial_status` string, required: The content's editorial state after publishing (e.g. `published`, `draft`).
  - `publish_destination` string, required: Legacy single-destination label.
  - `publish_destinations` PublishDestResult[]: Per-destination publish results.
    - `publisher` string, required
    - `display_url` string, required
    - `status` string, required: The per-destination publish status: `success`, `failed`, or `queued`.
    - `error_msg` string
  - `marked_as_published` boolean: Whether the content was recorded as manually published.
  - `source_workspace_version_id` string, uuid

## Other responses

- `201`: Content created and published.
- `400`: The request was malformed — a bad path/query parameter or an invalid value.
- `401`: Missing or invalid credentials — supply a valid org API key in the `X-API-Key` header.
- `403`: The API key is authenticated but not permitted to access this resource.
- `404`: The requested resource does not exist or is not visible to this key.
- `409`: The request conflicts with the current state (e.g. a duplicate).
- `502`: An upstream dependency failed or rejected the request.

---

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