/v1/brands/{brand_id}/content-autopilot Set up, change, pause or resume the content autopilot
Send only what changes; the first change creates the autopilot. Requires the brand owner on Starter or with an active API subscription, except {"enabled": false} alone, which turns the autopilot off on any plan. A policy other than draft_only needs a destination: the target_id of a connection from GET /v1/brands/{brand_id}/publish-targets (target_type defaults to cms_connection), or target_type: hosted_site alone for the brand's hosted blog. Each article costs the brand owner the content credits credits_per_article reports, taken when the run starts. A month whose monthly_cap articles are written is not a pause: next_run_at is then the first slot of the next month, and a higher monthly_cap brings it back into this one. The autopilot pauses itself when the owner runs out of credits, when it finds no topic left, when the destination goes away or after three articles in a row failed to write or to publish; resume: true starts it again once that is fixed. A plan pause (the owner's plan no longer includes the autopilot) has no resume: it lifts on its own within the hour once the plan includes it again, and resume: true on it answers 400. Some fixes lift the pause in the same call: a saved destination lifts target_missing and a new entry in pinned_topics lifts no_topics. A new weekdays, publish_time or time_zone moves an article already queued to its new slot; switching between auto_publish and publish_after_review_window, or a new review_window_hours, retimes the queued publishes on their slot; draft_only or another destination cancels the queued publishes and keeps those articles as drafts.
Path parameters
-
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
-
Optional. A retry with the same key and body within 24 hours replays the first response.
Request body
application/json required- enabled boolean (nullable) nullable
Turn the autopilot on or off.
- excluded_topics array of string (nullable) nullable
Topics never written; replaces the list. Up to 50, each up to 200 characters.
- min_quality integer (nullable) nullable
Lowest quality score, 0 to 100, an article can have and still be published by the autopilot.
- monthly_cap integer (nullable) nullable
Most articles in a calendar month. Left out while
weekdayschange, a cap still at the old weekdays' default follows the new one. - pinned_topics array of string (nullable) nullable
Topics written first, in this order; replaces the list. Up to 50, each up to 200 characters.
- policy enum (nullable) nullable
draft_onlyleaves each article for someone to publish,publish_after_review_windowpublishes itreview_window_hoursafter it is written unless someone stops it,auto_publishpublishes at the slot. - publish_time string (nullable) nullable
Local time of each slot,
HH:MM. - require_links_valid boolean (nullable) nullable
When true an article whose link check removed a link, raised a warning or could not verify a claim is held for review.
- resume boolean (nullable) nullable
True resumes an autopilot that paused itself, after fixing what paused it. A
planpause lifts on its own, and resuming it answers 400. - review_window_hours integer (nullable) nullable
Hours, 1 to 168, an article waits before
publish_after_review_windowpublishes it. - target_id string (nullable) nullable
The connection it publishes to;
nullclears the destination. - target_type enum (nullable) nullable
cms_connectionwith atarget_idfromGET .../publish-targets(the default when onlytarget_idis sent), orhosted_site(the brand's hosted blog; notarget_idneeded). - time_zone string (nullable) nullable
IANA time zone, e.g.
America/New_York. - weekdays array of integer (nullable) nullable
ISO weekdays with a slot, 1 (Monday) to 7 (Sunday).
Responses
-
Articles the current settings write in a month, after the cap.
-
False while the brand never saved an autopilot; the values are then the defaults.
-
Credits one article costs the brand owner.
-
Credits a month costs at the current settings.
-
Whether the autopilot writes and publishes.
-
Topics never written.
-
Lowest quality score an article can have and still be published by the autopilot.
-
Most articles the autopilot writes in a calendar month.
-
Topics written first, in this order.
-
draft_onlyleaves each article for someone to publish,publish_after_review_windowpublishes itreview_window_hoursafter it is written unless someone stops it,auto_publishpublishes at the slot. -
Local time of each slot,
HH:MM. -
When true an article whose link check removed a link, raised a warning or could not verify a claim is held for review.
-
Hours an article waits before
publish_after_review_windowpublishes it. -
Runs whose slot falls in this calendar month (in
time_zone) that count againstmonthly_cap. -
IANA time zone the slots are read in.
-
ISO weekdays with a slot, 1 (Monday) to 7 (Sunday).
- last_error string (nullable) nullable
Why the last attempt to work the autopilot failed on our side; cleared by the next run.
- last_run ContentAutopilotRun (nullable) nullable
The newest run, when there is one.
- last_run_at string (nullable) nullable
When the last run started.
- next_run_at string (nullable) nullable
The next slot the monthly cap allows: once this month's
monthly_caparticles are written, the first slot of the next month. Null wheneverenabledis false or a pause is on. - object string
Always
content_autopilot. - pause_reason enum (nullable) nullable
Why the autopilot paused itself:
credits(the owner ran out),no_topics,target_missing(the destination went away),plan(lifts on its own within the hour once the owner's plan includes the autopilot again) orfailures(three articles in a row failed to write or to publish). Null while it runs. - target_id string (nullable) nullable
The connection or hosted site it publishes to.
- target_type enum (nullable) nullable
cms_connectionorhosted_site; null while the autopilot only leaves drafts.
-
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"
}