PATCH /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

Query parameters

  • dry_run boolean optional

    Preview the call without executing it. Runs auth, scope, eligibility and body validation, then returns 200 with a dry_run object reporting the request-unit and credit cost plus a non-consuming quota snapshot. Nothing is debited, reserved, dispatched or mutated. An invalid body still returns 422.

    default: false

Header parameters

  • Idempotency-Key string optional

    Optional. A retry with the same key and body within 24 hours replays the first response.

Request body

application/json required
Type: ContentAutopilotUpdate
  • 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 weekdays change, 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_only leaves each article for someone to publish, publish_after_review_window publishes it review_window_hours after it is written unless someone stops it, auto_publish publishes at the slot.

  • publish_time string (nullable) nullable

    Local time of each slot, HH:MM.

  • resume boolean (nullable) nullable

    True resumes an autopilot that paused itself, after fixing what paused it. A plan pause 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_window publishes it.

  • target_id string (nullable) nullable

    The connection it publishes to; null clears the destination.

  • target_type enum (nullable) nullable

    cms_connection with a target_id from GET .../publish-targets (the default when only target_id is sent), or hosted_site (the brand's hosted blog; no target_id needed).

  • 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

Set up, change, pause or resume the content autopilot application/json
Type: ContentAutopilot
  • articles_per_month integer required

    Articles the current settings write in a month, after the cap.

  • configured boolean required

    False while the brand never saved an autopilot; the values are then the defaults.

  • credits_per_article integer required

    Credits one article costs the brand owner.

  • credits_per_month integer required

    Credits a month costs at the current settings.

  • enabled boolean required

    Whether the autopilot writes and publishes.

  • excluded_topics array of string required

    Topics never written.

  • min_quality integer required

    Lowest quality score an article can have and still be published by the autopilot.

  • monthly_cap integer required

    Most articles the autopilot writes in a calendar month.

  • pinned_topics array of string required

    Topics written first, in this order.

  • policy enum required

    draft_only leaves each article for someone to publish, publish_after_review_window publishes it review_window_hours after it is written unless someone stops it, auto_publish publishes at the slot.

  • publish_time string required

    Local time of each slot, HH:MM.

  • review_window_hours integer required

    Hours an article waits before publish_after_review_window publishes it.

  • runs_this_month integer required

    Runs whose slot falls in this calendar month (in time_zone) that count against monthly_cap.

  • time_zone string required

    IANA time zone the slots are read in.

  • weekdays array of integer required

    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.

    format: `date-time`

  • next_run_at string (nullable) nullable

    The next slot the monthly cap allows: once this month's monthly_cap articles are written, the first slot of the next month. Null whenever enabled is false or a pause is on.

    format: `date-time`

  • object string

    Always content_autopilot.

    default: `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) or failures (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_connection or hosted_site; null while the autopilot only leaves drafts.

Request validation failed application/json
Type: ApiError
  • error object required
    Show fields
    • code string required

      Stable machine-readable error code from the catalog.

    • message string required

      Human-readable description suitable for logging.

    • details object

      Optional, code-specific context (e.g. errors array for validation_error, retry_after for service_unavailable). Shape depends on error.code; treat as opaque otherwise.

      Show fields

      Empty object (no properties).

  • Server-generated correlation id for the request. Mirrors the X-Correlation-ID response header. Include this when contacting support.

    format: `uuid`

Example response
{
  "error": {
    "code": "validation_error",
    "message": "Request validation failed"
  },
  "request_id": "9f6c4e8a-1d3b-4c8b-9f1e-7a3b1c2d3e4f"
}
Missing or invalid credentials application/json
Type: ApiError
  • error object required
    Show fields
    • code string required

      Stable machine-readable error code from the catalog.

    • message string required

      Human-readable description suitable for logging.

    • details object

      Optional, code-specific context (e.g. errors array for validation_error, retry_after for service_unavailable). Shape depends on error.code; treat as opaque otherwise.

      Show fields

      Empty object (no properties).

  • Server-generated correlation id for the request. Mirrors the X-Correlation-ID response header. Include this when contacting support.

    format: `uuid`

Example response
{
  "error": {
    "code": "unauthorized",
    "message": "Missing or invalid credentials"
  },
  "request_id": "9f6c4e8a-1d3b-4c8b-9f1e-7a3b1c2d3e4f"
}
You do not have permission to access this resource application/json
Type: ApiError
  • error object required
    Show fields
    • code string required

      Stable machine-readable error code from the catalog.

    • message string required

      Human-readable description suitable for logging.

    • details object

      Optional, code-specific context (e.g. errors array for validation_error, retry_after for service_unavailable). Shape depends on error.code; treat as opaque otherwise.

      Show fields

      Empty object (no properties).

  • Server-generated correlation id for the request. Mirrors the X-Correlation-ID response header. Include this when contacting support.

    format: `uuid`

Example response
{
  "error": {
    "code": "forbidden",
    "message": "You do not have permission to access this resource"
  },
  "request_id": "9f6c4e8a-1d3b-4c8b-9f1e-7a3b1c2d3e4f"
}
Resource not found application/json
Type: ApiError
  • error object required
    Show fields
    • code string required

      Stable machine-readable error code from the catalog.

    • message string required

      Human-readable description suitable for logging.

    • details object

      Optional, code-specific context (e.g. errors array for validation_error, retry_after for service_unavailable). Shape depends on error.code; treat as opaque otherwise.

      Show fields

      Empty object (no properties).

  • Server-generated correlation id for the request. Mirrors the X-Correlation-ID response header. Include this when contacting support.

    format: `uuid`

Example response
{
  "error": {
    "code": "not_found",
    "message": "Resource not found"
  },
  "request_id": "9f6c4e8a-1d3b-4c8b-9f1e-7a3b1c2d3e4f"
}
Resource conflict application/json
Type: ApiError
  • error object required
    Show fields
    • code string required

      Stable machine-readable error code from the catalog.

    • message string required

      Human-readable description suitable for logging.

    • details object

      Optional, code-specific context (e.g. errors array for validation_error, retry_after for service_unavailable). Shape depends on error.code; treat as opaque otherwise.

      Show fields

      Empty object (no properties).

  • Server-generated correlation id for the request. Mirrors the X-Correlation-ID response header. Include this when contacting support.

    format: `uuid`

Example response
{
  "error": {
    "code": "conflict",
    "message": "Resource conflict"
  },
  "request_id": "9f6c4e8a-1d3b-4c8b-9f1e-7a3b1c2d3e4f"
}
Request body did not match the expected schema application/json
Type: ApiError
  • error object required
    Show fields
    • code string required

      Stable machine-readable error code from the catalog.

    • message string required

      Human-readable description suitable for logging.

    • details object

      Optional, code-specific context (e.g. errors array for validation_error, retry_after for service_unavailable). Shape depends on error.code; treat as opaque otherwise.

      Show fields

      Empty object (no properties).

  • Server-generated correlation id for the request. Mirrors the X-Correlation-ID response header. Include this when contacting support.

    format: `uuid`

Example response
{
  "error": {
    "code": "body_validation_error",
    "message": "Request body did not match the expected schema"
  },
  "request_id": "9f6c4e8a-1d3b-4c8b-9f1e-7a3b1c2d3e4f"
}
Per-minute rate limit exceeded application/json
Type: ApiError
  • error object required
    Show fields
    • code string required

      Stable machine-readable error code from the catalog.

    • message string required

      Human-readable description suitable for logging.

    • details object

      Optional, code-specific context (e.g. errors array for validation_error, retry_after for service_unavailable). Shape depends on error.code; treat as opaque otherwise.

      Show fields

      Empty object (no properties).

  • Server-generated correlation id for the request. Mirrors the X-Correlation-ID response header. Include this when contacting support.

    format: `uuid`

Example response
{
  "error": {
    "code": "rate_limit_exceeded",
    "message": "Per-minute rate limit exceeded"
  },
  "request_id": "9f6c4e8a-1d3b-4c8b-9f1e-7a3b1c2d3e4f"
}
An unexpected error occurred application/json
Type: ApiError
  • error object required
    Show fields
    • code string required

      Stable machine-readable error code from the catalog.

    • message string required

      Human-readable description suitable for logging.

    • details object

      Optional, code-specific context (e.g. errors array for validation_error, retry_after for service_unavailable). Shape depends on error.code; treat as opaque otherwise.

      Show fields

      Empty object (no properties).

  • Server-generated correlation id for the request. Mirrors the X-Correlation-ID response header. Include this when contacting support.

    format: `uuid`

Example response
{
  "error": {
    "code": "internal_error",
    "message": "An unexpected error occurred"
  },
  "request_id": "9f6c4e8a-1d3b-4c8b-9f1e-7a3b1c2d3e4f"
}
Service temporarily unavailable, please retry application/json
Type: ApiError
  • error object required
    Show fields
    • code string required

      Stable machine-readable error code from the catalog.

    • message string required

      Human-readable description suitable for logging.

    • details object

      Optional, code-specific context (e.g. errors array for validation_error, retry_after for service_unavailable). Shape depends on error.code; treat as opaque otherwise.

      Show fields

      Empty object (no properties).

  • Server-generated correlation id for the request. Mirrors the X-Correlation-ID response header. Include this when contacting support.

    format: `uuid`

Example response
{
  "error": {
    "code": "service_unavailable",
    "message": "Service temporarily unavailable, please retry"
  },
  "request_id": "9f6c4e8a-1d3b-4c8b-9f1e-7a3b1c2d3e4f"
}