/v1/brands/{brand_id}/content-briefs/{brief_id}/publish Publish a content brief
Publish a finished brief and return it with its updated status.
Set target_type to pick where it goes:
cms_connection: push the article to a connected WordPress site. Pass the connection id fromGET /v1/brands/{brand_id}/cms-connectionsastarget_id. Publishing the same brief to the same connection again updates the post in place rather than creating a duplicate.hosted_site: publish to the brand's RankPrompt-hosted blog, which must already be active.external: record anexternal_urlyou published yourself, pushing nothing anywhere.
Use publish_status: draft to land the post as a CMS draft, and scheduled_for to have the CMS publish it later. A scheduled brief stays in needs_review until it actually goes live.
Publishing approves any open review on the article.
Path parameters
-
Content brief id (UUID).
-
Brand UUID.
Query parameters
-
Preview the call without executing it. Runs auth, scope, eligibility and body validation, then returns
200with adry_runobject reporting the request-unit and credit cost plus a non-consuming quota snapshot. Nothing is debited, reserved, dispatched or mutated. An invalid body still returns422.default: false
Header parameters
Request body
application/json required- external_url string (nullable) nullable
Canonical URL where the content was published. Only used when
target_typeisexternal. - publish_status enum
Whether the CMS post goes live (
publish) or is created as a draft for someone to review in the CMS (draft). Ignored forexternal. - scheduled_for string (nullable) nullable
Publish the CMS post at this time instead of now, as an ISO-8601 datetime in the future. The post is created scheduled in the CMS and the brief stays in
needs_reviewuntil it goes live.Re-publishing an already published brief reschedules the existing post to this time.
- target_id string (nullable) nullable
Id of the publish target. Required for
cms_connectionandhosted_site; ignored forexternal. - target_type enum
Where to publish:
cms_connection: push the article to a connected CMS (WordPress). Settarget_idto the connection id fromGET /v1/brands/{brand_id}/cms-connections.hosted_site: publish to the brand's RankPrompt-hosted blog, which is resolved from the brand. The hosted site must already be active; setting one up needs interactive DNS in the app.external: publish nothing, just mark the brief published and recordexternal_url, for when you pushed the article somewhere else yourself.
Responses
-
Owning brand id (UUID).
-
When the brief was created.
-
Content brief id (UUID).
-
Brief lifecycle state. One of
draft,processing,needs_review,published,failed. - assets array of ContentAsset
Generated assets (article HTML, images, meta).
- content_context object
Free-form context folded into the generation prompt.
Show fields
Empty object (no properties).
- content_type string (nullable) nullable
Content format id (e.g.
blog_post,ranked_list). - error_message string (nullable) nullable
User-facing failure reason when
statusisfailed. - generated_at string (nullable) nullable
When content was last generated, if ever.
- object string
Always
content_brief. - outline_json object | array of any
Structured article outline produced during generation.
- quality_report object | array of any
Rule-based checks run on the finished article:
{score, checks[], words}, wherescoreis the percentage of weighted checks that passed. Advisory only; it never blocks publishing. - research_output string (nullable) nullable
Research notes gathered during generation.
- review_due_at string (nullable) nullable
When the article's fastest-ageing fact (a price, a plan tier) is worth re-checking.
- target_keywords array of string
Target keywords for the brief.
- title string (nullable) nullable
Brief title, set on creation or filled in from the article.
- topic string (nullable) nullable
Topic or target keyword the content is written around.
- updated_at string (nullable) nullable
When the brief was last updated.
-
Show fields
-
Stable machine-readable error code from the catalog.
-
Human-readable description suitable for logging.
- details object
Optional, code-specific context (e.g.
errorsarray forvalidation_error,retry_afterforservice_unavailable). Shape depends onerror.code; treat as opaque otherwise.Show fields
Empty object (no properties).
-
- request_id string
Server-generated correlation id for the request. Mirrors the
X-Correlation-IDresponse header. Include this when contacting support.
Example response
{
"error": {
"code": "validation_error",
"message": "Request validation failed"
},
"request_id": "9f6c4e8a-1d3b-4c8b-9f1e-7a3b1c2d3e4f"
}-
Show fields
-
Stable machine-readable error code from the catalog.
-
Human-readable description suitable for logging.
- details object
Optional, code-specific context (e.g.
errorsarray forvalidation_error,retry_afterforservice_unavailable). Shape depends onerror.code; treat as opaque otherwise.Show fields
Empty object (no properties).
-
- request_id string
Server-generated correlation id for the request. Mirrors the
X-Correlation-IDresponse header. Include this when contacting support.
Example response
{
"error": {
"code": "unauthorized",
"message": "Missing or invalid credentials"
},
"request_id": "9f6c4e8a-1d3b-4c8b-9f1e-7a3b1c2d3e4f"
}-
Show fields
-
Stable machine-readable error code from the catalog.
-
Human-readable description suitable for logging.
- details object
Optional, code-specific context (e.g.
errorsarray forvalidation_error,retry_afterforservice_unavailable). Shape depends onerror.code; treat as opaque otherwise.Show fields
Empty object (no properties).
-
- request_id string
Server-generated correlation id for the request. Mirrors the
X-Correlation-IDresponse header. Include this when contacting support.
Example response
{
"error": {
"code": "forbidden",
"message": "You do not have permission to access this resource"
},
"request_id": "9f6c4e8a-1d3b-4c8b-9f1e-7a3b1c2d3e4f"
}-
Show fields
-
Stable machine-readable error code from the catalog.
-
Human-readable description suitable for logging.
- details object
Optional, code-specific context (e.g.
errorsarray forvalidation_error,retry_afterforservice_unavailable). Shape depends onerror.code; treat as opaque otherwise.Show fields
Empty object (no properties).
-
- request_id string
Server-generated correlation id for the request. Mirrors the
X-Correlation-IDresponse header. Include this when contacting support.
Example response
{
"error": {
"code": "not_found",
"message": "Resource not found"
},
"request_id": "9f6c4e8a-1d3b-4c8b-9f1e-7a3b1c2d3e4f"
}-
Show fields
-
Stable machine-readable error code from the catalog.
-
Human-readable description suitable for logging.
- details object
Optional, code-specific context (e.g.
errorsarray forvalidation_error,retry_afterforservice_unavailable). Shape depends onerror.code; treat as opaque otherwise.Show fields
Empty object (no properties).
-
- request_id string
Server-generated correlation id for the request. Mirrors the
X-Correlation-IDresponse header. Include this when contacting support.
Example response
{
"error": {
"code": "conflict",
"message": "Resource conflict"
},
"request_id": "9f6c4e8a-1d3b-4c8b-9f1e-7a3b1c2d3e4f"
}-
Show fields
-
Stable machine-readable error code from the catalog.
-
Human-readable description suitable for logging.
- details object
Optional, code-specific context (e.g.
errorsarray forvalidation_error,retry_afterforservice_unavailable). Shape depends onerror.code; treat as opaque otherwise.Show fields
Empty object (no properties).
-
- request_id string
Server-generated correlation id for the request. Mirrors the
X-Correlation-IDresponse header. Include this when contacting support.
Example response
{
"error": {
"code": "body_validation_error",
"message": "Request body did not match the expected schema"
},
"request_id": "9f6c4e8a-1d3b-4c8b-9f1e-7a3b1c2d3e4f"
}-
Show fields
-
Stable machine-readable error code from the catalog.
-
Human-readable description suitable for logging.
- details object
Optional, code-specific context (e.g.
errorsarray forvalidation_error,retry_afterforservice_unavailable). Shape depends onerror.code; treat as opaque otherwise.Show fields
Empty object (no properties).
-
- request_id string
Server-generated correlation id for the request. Mirrors the
X-Correlation-IDresponse header. Include this when contacting support.
Example response
{
"error": {
"code": "rate_limit_exceeded",
"message": "Per-minute rate limit exceeded"
},
"request_id": "9f6c4e8a-1d3b-4c8b-9f1e-7a3b1c2d3e4f"
}-
Show fields
-
Stable machine-readable error code from the catalog.
-
Human-readable description suitable for logging.
- details object
Optional, code-specific context (e.g.
errorsarray forvalidation_error,retry_afterforservice_unavailable). Shape depends onerror.code; treat as opaque otherwise.Show fields
Empty object (no properties).
-
- request_id string
Server-generated correlation id for the request. Mirrors the
X-Correlation-IDresponse header. Include this when contacting support.
Example response
{
"error": {
"code": "internal_error",
"message": "An unexpected error occurred"
},
"request_id": "9f6c4e8a-1d3b-4c8b-9f1e-7a3b1c2d3e4f"
}-
Show fields
-
Stable machine-readable error code from the catalog.
-
Human-readable description suitable for logging.
- details object
Optional, code-specific context (e.g.
errorsarray forvalidation_error,retry_afterforservice_unavailable). Shape depends onerror.code; treat as opaque otherwise.Show fields
Empty object (no properties).
-
- request_id string
Server-generated correlation id for the request. Mirrors the
X-Correlation-IDresponse header. Include this when contacting support.
Example response
{
"error": {
"code": "service_unavailable",
"message": "Service temporarily unavailable, please retry"
},
"request_id": "9f6c4e8a-1d3b-4c8b-9f1e-7a3b1c2d3e4f"
}