> ## Documentation Index
> Fetch the complete documentation index at: https://docs.trycontinuum.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Organic+ planning and publishing

> MCP tools for the calendar, drafts, approvals, publishing, and remaking reference posts: inputs, examples, and errors.

Generated from the server's own tool registry, as released on 2026-11-05. Every section lists what the tool needs, whether it waits for a yes, how it completes, each action's inputs, valid example calls, and the errors it can return. Before you call a tool, fetch its live schema with `help_describe`; if the server and this page disagree, the server wins.

| Tool | What it does | Changes things |
| - | - | - |
| [`planner_manage`](#planner_manage) | Reads and proposes a week of posts, approves it, reschedules and copies posts, and attaches media. | Yes |
| [`content_create`](#content_create) | Drafts, approves, and publishes posts, and deletes drafts. | Yes |
| [`organic_draft_list`](#organic_draft_list) | Lists drafts on the calendar. | No |
| [`organic_draft_get`](#organic_draft_get) | Reads one draft. | No |
| [`content_reference`](#content_reference) | Remakes a public Instagram post or reel as your brand's own: its structure, never its words. | Yes |
| [`headless_content`](#headless_content) | Makes vertical reels, stills, and carousels from your brand guide without opening the canvas. | Yes |

### `planner_manage`

Reads and proposes a week of posts, approves it, reschedules and copies posts, and attaches media.

**Good to know:**

* Commit a week the Organic agent planned with `approve_week` (its `plan_id`, `pending_approval_token`, and `placements`). Some server descriptions name `organic_calendar_approve` for this step; that tool isn’t callable.
* `propose_week` runs as a job. `proposal_status` returns its `plan_id` and a `pending_approval_token` that lasts 24 hours.
* `approve_week` commits the whole week in one step and is safe to repeat. The `job_id` from `propose_week` can stand in for `plan_id`, `pending_approval_token`, and `placements`.

| Contract | Behavior |
| - | - |
| Changes things | Yes |
| Listed in your assistant | Always. |
| Role | Viewer or higher for `get_week`, `proposal_status`, and `operation_status`. Operator or higher for every other action. |
| Needs | An active brand. Connection: The one for what you act on: Instagram. |
| Confirmation | Writes preview first and return a `confirm_token` with `expires_at`. Confirm with that token after the person says yes. |
| Completion | Returns right away. Longer work continues as a job; read the id in the result. |
| Retry | Each `confirm_token` works once. Preview again to retry. |
| Rate limit | Calendar changes 120 and week plans 20 an hour, per brand. See [Limits](https://docs.trycontinuum.ai/mcp/reference.md#limits). |

**Actions** (`action`):

| action | Required inputs | Other inputs it uses |
| - | - | - |
| `get_week` | `action` | `week_start`, `timezone` |
| `propose_week` | `action` | `week_start`, `timezone`, `platform_account_ids` |
| `proposal_status` | `action`, `job_id` | — |
| `approve_week` | `action`, `job_id\|plan_id+pending_approval_token+placements` | `operation_id` |
| `reschedule` | `action`, `draft_id`, `day` | `time_of_day`, `expected_updated_at`, `timezone`, `atomicity`, `operation_id` |
| `reschedule_many` | `action`, `targets` | `timezone`, `atomicity`, `operation_id` |
| `copy` | `action`, `day`, `draft_ids\|source_day` | `timezone`, `atomicity`, `operation_id` |
| `attach_media` | `action`, `assets`, `draft_ids\|draft_id` | `replace`, `expected_updated_at`, `atomicity`, `operation_id` |
| `bulk_transition` | `action`, `to_status`, `draft_ids` | `mode`, `confirm_token`, `expected_updated_at`, `atomicity`, `operation_id` |
| `operation_status` | `action`, `operation_id` | — |

In this table, `a|b` means one of them and `a+b` means together.

**Examples** (IDs are illustrative; use the ones earlier calls return):

* Read next week's calendar: `{"name":"planner_manage","arguments":{"action":"get_week","week_start":"2026-11-16","timezone":"America/New_York"}}`
* Propose a week of posts: `{"name":"planner_manage","arguments":{"action":"propose_week","week_start":"2026-11-16","timezone":"America/New_York"}}`
* Move one post: `{"name":"planner_manage","arguments":{"action":"reschedule","draft_id":"8b2d6f0a-4e7c-4b1d-a3f5-7c9e1b3d5f27","day":"2026-11-19","time_of_day":"09:30"}}`

**Errors and statuses:**

| Code | When |
| - | - |
| `CONFLICT` | The item changed or is busy. Read it again, then retry with the current state. |
| `CTX_MISSING_MODE_A_FIELDS` | The call is missing session context. Reconnect the assistant and retry. |
| `INTERNAL` | Something went wrong on our side. Retry once, then contact support. |
| `JOB_ENQUEUE_FAILED` | The job couldn't start. Retry once, then contact support. |
| `JOB_PENDING` | The job is still running. Check `jobs_status` later. |
| `NOT_FOUND` | The item doesn't exist, or this brand can't see it. |
| `VALIDATION_ERROR` | An input is missing or wrong, or it changed since the preview. `details` names the field. |
| `needs_brand` | No brand is active. Call `brands_select`. |
| `needs_role` | The person's role is too low for this call. Needs: Viewer or higher for `get_week`, `proposal_status`, and `operation_status`. Operator or higher for every other action. Ask an Admin or Owner. |
| `needs_integration` | The brand lacks the connection this call needs. Call `integrations_connect` with the `platform` the result names. |
| `CONFIRMATION_REQUIRED` | This write needs a preview first. Preview, get a yes, then confirm with the returned token. |

**Related:** `content_create`.

Full schema: `help_describe {"tool":"planner_manage","action":"get_week"}`. As JSON: [`/mcp/schemas/planner_manage.json`](https://docs.trycontinuum.ai/mcp/schemas/planner_manage.json).

### `content_create`

Drafts, approves, and publishes posts, and deletes drafts.

**Good to know:**

* `approve` returns the `confirm_token` that `publish` needs. Publish only after the person says yes.
* `platform` accepts every network the schema knows. Publishing is live on Instagram; [Publishing](https://docs.trycontinuum.ai/organic/publishing.md) has the status of the others; X and Threads are for planning and drafts only.
* `realize` (generating the creative) and `delete` are two-phase. A `realize` preview returns `approve_with`: send `approve_with.input` back as the next `realize` call to confirm exactly what was previewed. `delete` returns a `confirm_token` instead.
* `reference_assets` (up to 8 Library images) and `unsplash_photos` (up to 4) steer image generation, on `draft` and `realize` only.
* `draft` needs a `prompt` unless you pass `generate: false`; then it saves the `caption` and `hashtags` you pass word for word.

| Contract | Behavior |
| - | - |
| Changes things | Yes |
| Listed in your assistant | Always. |
| Role | Viewer or higher for `list`. Operator or higher for every other action. |
| Needs | An active brand. Connection: The connection for the post’s `platform`. |
| Confirmation | Writes preview first and return a `confirm_token` with `expires_at`. Confirm with that token after the person says yes. |
| Completion | Returns right away. Longer work continues as a job; read the id in the result. |
| Retry | Retry with the same `idempotency_key` to avoid duplicates. |
| Rate limit | Publishing 30, approvals 60, and deletions 30 an hour, per brand. See [Limits](https://docs.trycontinuum.ai/mcp/reference.md#limits). |

**Actions** (`action`):

| action | Required inputs | Other inputs it uses |
| - | - | - |
| `list` | `action` | `publishable_only`, `listStatus`, `limit`, `cursor` |
| `draft` | `action`, `platform` | `prompt`, `format`, `scheduledAt`, `accountId`, `timezone`, `reference_assets`, `unsplash_photos`, `generate`, `caption`, `hashtags`, `idempotency_key` |
| `extend` | `action`, `draftId`, `updates\|prompt` | `idempotency_key` |
| `realize` | `action`, `draftId` | `preview_revision`, `regenerate`, `slides`, `prompt`, `reference_assets`, `unsplash_photos` |
| `approve` | `action`, `draftId` | — |
| `publish` | `action`, `draftId`, `confirm_token` | `accountId`, `operation_id` |
| `delete` | `action`, `draftId`, `mode` | `confirm_token`, `idempotency_key` |

In this table, `a|b` means one of them and `a+b` means together.

**Examples** (IDs are illustrative; use the ones earlier calls return):

* Draft a post from a prompt: `{"name":"content_create","arguments":{"action":"draft","prompt":"a Reel about our summer launch","platform":"instagram"}}`
* Rewrite a draft's caption (natural language): `{"name":"content_create","arguments":{"action":"extend","draftId":"00000000-0000-0000-0000-000000000000","prompt":"Rewrite the caption and CTA in Mexican Spanish; keep the concept and a friendly tone."}}`
* Structured field change (reschedule a draft): `{"name":"content_create","arguments":{"action":"extend","draftId":"00000000-0000-0000-0000-000000000000","updates":{"scheduled_date":"2026-08-01T15:00:00.000Z"}}}`
* Generate the creative — step 1: read the preview waiting for approval: `{"name":"content_create","arguments":{"action":"realize","draftId":"00000000-0000-0000-0000-000000000000"}}`
* Generate the creative — step 2: approve that exact preview and spend: `{"name":"content_create","arguments":{"action":"realize","draftId":"00000000-0000-0000-0000-000000000000","preview_revision":"the preview_revision step 1 returned"}}`
* Redo slide 2 of a realized carousel on the same draft (then confirm with `approve_with.input`): `{"name":"content_create","arguments":{"action":"realize","draftId":"00000000-0000-0000-0000-000000000000","regenerate":true,"slides":[2],"prompt":"warmer, golden-hour light"}}`

**Errors and statuses:**

| Code | When |
| - | - |
| `VALIDATION_ERROR` | action=extend cannot set status to approved/scheduled/published/failed — those are owned by action=approve and action=publish. Only 'draft' and 'placeholder' are settable. |
| `BRAND_NOT_READY` | Finish brand onboarding before creating content. |
| `CONFLICT` | The item changed or is busy. Read it again, then retry with the current state. |
| `INTERNAL` | Something went wrong on our side. Retry once, then contact support. |
| `JOB_ENQUEUE_FAILED` | The job couldn't start. Retry once, then contact support. |
| `NOT_FOUND` | The item doesn't exist, or this brand can't see it. |
| `UPSTREAM_ERROR` | A platform or provider returned an error. `details` carries its message. |
| `VOICE_VIOLATION` | The copy breaks a brand voice rule, such as a banned word. `details` names the rule; rewrite and try again. |
| `needs_brand` | No brand is active. Call `brands_select`. |
| `needs_role` | The person's role is too low for this call. Needs: Viewer or higher for `list`. Operator or higher for every other action. Ask an Admin or Owner. |
| `needs_integration` | The brand lacks the connection this call needs. Call `integrations_connect` with the `platform` the result names. |
| `CONFIRMATION_REQUIRED` | This write needs a preview first. Preview, get a yes, then confirm with the returned token. |

**Related:** `organic_draft_get`, `organic_draft_list`, `agent_ask`, `planner_manage`, `library_manage`, `unsplash_search`.

Full schema: `help_describe {"tool":"content_create","action":"list"}`. As JSON: [`/mcp/schemas/content_create.json`](https://docs.trycontinuum.ai/mcp/schemas/content_create.json).

### `organic_draft_list`

Lists drafts on the calendar.

| Contract | Behavior |
| - | - |
| Changes things | No |
| Listed in your assistant | When your role on a brand you can reach allows it. |
| Role | Viewer or higher |
| Needs | An active brand. |
| Confirmation | None. The call runs when made. |
| Completion | Returns the result in the same call. |
| Retry | Safe to retry: it only reads. |

**Inputs:**

| Input | Type | Required | About |
| - | - | - | - |
| `dateRange` | object | No | — |
| `status` | string | No | The status to filter by or set. See the allowed values. One of `draft`, `placeholder`, `approved`, `scheduled`, `published`, `failed`, `all`. |
| `limit` | integer | No | The most items to return. |
| `cursor` | string | No | The pagination cursor from the previous result; omit it for the first page. |
| `publishable_only` | boolean | No | Only drafts that are ready to publish. |

**Examples** (IDs are illustrative; use the ones earlier calls return):

* Approved drafts ready to publish: `{"name":"organic_draft_list","arguments":{"status":"approved","publishable_only":true,"limit":20}}`

**Errors and statuses:**

| Code | When |
| - | - |
| `INTERNAL` | Something went wrong on our side. Retry once, then contact support. |
| `BRAND_NOT_SELECTED` | No brand is active. Call `brands_select`. |
| `VALIDATION_ERROR` | An input is missing or wrong, or it changed since the preview. `details` names the field. |

**Related:** `organic_draft_get`.

Full schema: `help_describe {"tool":"organic_draft_list"}`. As JSON: [`/mcp/schemas/organic_draft_list.json`](https://docs.trycontinuum.ai/mcp/schemas/organic_draft_list.json).

### `organic_draft_get`

Reads one draft.

| Contract | Behavior |
| - | - |
| Changes things | No |
| Listed in your assistant | When your role on a brand you can reach allows it. |
| Role | Viewer or higher |
| Needs | An active brand. |
| Confirmation | None. The call runs when made. |
| Completion | Returns the result in the same call. |
| Retry | Safe to retry: it only reads. |

**Inputs:**

| Input | Type | Required | About |
| - | - | - | - |
| `draftId` | string | Yes | A Planner draft ID, from `organic_draft_list` or `planner_manage`. |

**Examples** (IDs are illustrative; use the ones earlier calls return):

* Read one draft: `{"name":"organic_draft_get","arguments":{"draftId":"8b2d6f0a-4e7c-4b1d-a3f5-7c9e1b3d5f27"}}`

**Errors and statuses:**

| Code | When |
| - | - |
| `INTERNAL` | Something went wrong on our side. Retry once, then contact support. |
| `NOT_FOUND` | The item doesn't exist, or this brand can't see it. |
| `BRAND_NOT_SELECTED` | No brand is active. Call `brands_select`. |
| `VALIDATION_ERROR` | An input is missing or wrong, or it changed since the preview. `details` names the field. |

**Related:** `organic_draft_list`.

Full schema: `help_describe {"tool":"organic_draft_get"}`. As JSON: [`/mcp/schemas/organic_draft_get.json`](https://docs.trycontinuum.ai/mcp/schemas/organic_draft_get.json).

### `content_reference`

Remakes a public Instagram post or reel as your brand's own: its structure, never its words.

| Contract | Behavior |
| - | - |
| Changes things | Yes |
| Listed in your assistant | Always. |
| Role | Operator or higher |
| Needs | An active brand. |
| Confirmation | Writes preview first and return a `confirm_token` with `expires_at`. Confirm with that token after the person says yes. |
| Completion | Returns a `job_id`. Read the result with `jobs_status`. |
| Retry | Each `confirm_token` works once. Preview again to retry. |

**Actions** (`action`):

| action | Required inputs | Other inputs it uses |
| - | - | - |
| `inspect` | `action`, `url` | — |
| `recreate` | `action`, `plan` | `mode`, `confirm_token`, `max_usd`, `footage_asset_ids` |

In this table, `a|b` means one of them and `a+b` means together.

**Examples** (IDs are illustrative; use the ones earlier calls return):

* Read a reel and plan our version: `{"name":"content_reference","arguments":{"action":"inspect","url":"https://www.instagram.com/reel/DegOQG6Tydw/"}}`

**Errors and statuses:**

| Code | When |
| - | - |
| `JOB_ENQUEUE_FAILED` | The job couldn't start. Retry once, then contact support. |
| `VALIDATION_ERROR` | An input is missing or wrong, or it changed since the preview. `details` names the field. |
| `needs_brand` | No brand is active. Call `brands_select`. |
| `needs_role` | The person's role is too low for this call. Needs: Operator or higher. Ask an Admin or Owner. |
| `CONFIRMATION_REQUIRED` | This write needs a preview first. Preview, get a yes, then confirm with the returned token. |

**Related:** `jobs_status`, `video_editor`, `headless_content`.

Full schema: `help_describe {"tool":"content_reference","action":"inspect"}`. As JSON: [`/mcp/schemas/content_reference.json`](https://docs.trycontinuum.ai/mcp/schemas/content_reference.json).

### `headless_content`

Makes vertical reels, stills, and carousels from your brand guide without opening the canvas.

| Contract | Behavior |
| - | - |
| Changes things | Yes |
| Listed in your assistant | Always. |
| Role | Viewer or higher for `guide`, `inspect`, and `status`. Operator or higher for every other action. |
| Needs | An active brand. |
| Confirmation | None. The call runs when made. |
| Completion | Returns a `job_id`. Read the result with `jobs_status`. |
| Retry | Not idempotent. Check the current state before retrying. |

**Actions** (`action`):

| action | Required inputs | Other inputs it uses |
| - | - | - |
| `guide` | `action` | `portfolio_id`, `schema` |
| `inspect` | `action`, `view` | `id`, `revision` |
| `create` | `action`, `max_usd`, `guidance` | `dry_run`, `shortcuts`, `brandBook` |
| `create_spec` | `action`, `max_usd`, `request_json` | `shortcuts`, `brandBook` |
| `create_stills` | `action`, `max_usd`, `request_json` | `shortcuts`, `brandBook` |
| `act` | `action`, `graph_action`, `payload_json` | `max_usd` |
| `style_draft` | `action`, `payload_json` | — |
| `recompose` | `action`, `reel_asset_id`, `ops_json` | — |
| `status` | `action`, `run_id` | — |

In this table, `a|b` means one of them and `a+b` means together.

**Examples** (IDs are illustrative; use the ones earlier calls return):

* What a reel can be built from: `{"name":"headless_content","arguments":{"action":"guide"}}`
* Plan a collage fast-cut reel first, spending nothing: `{"name":"headless_content","arguments":{"action":"create","guidance":{"reels":1,"stills":0,"language":"en","pacing":"build","layout":"collage"},"max_usd":20,"dry_run":true}}`
* The approved Elements: `{"name":"headless_content","arguments":{"action":"inspect","view":"elements"}}`

**Errors and statuses:**

| Code | When |
| - | - |
| `over_max_usd` | The plan's upper bound is over `max_usd`; nothing was spent. Raise it or ask for less. |
| `elements_need_approval` | The director drafted a person or place; a person approves it in Continuum before anything is generated. |
| `INTERNAL` | Something went wrong on our side. Retry once, then contact support. |
| `JOB_ENQUEUE_FAILED` | The job couldn't start. Retry once, then contact support. |
| `VALIDATION_ERROR` | An input is missing or wrong, or it changed since the preview. `details` names the field. |
| `needs_brand` | No brand is active. Call `brands_select`. |
| `needs_role` | The person's role is too low for this call. Needs: Viewer or higher for `guide`, `inspect`, and `status`. Operator or higher for every other action. Ask an Admin or Owner. |

**Related:** `jobs_status`, `list_elements`, `unsplash_search`.

Full schema: `help_describe {"tool":"headless_content","action":"guide"}`. As JSON: [`/mcp/schemas/headless_content.json`](https://docs.trycontinuum.ai/mcp/schemas/headless_content.json).

## What's next

* [All tools](https://docs.trycontinuum.ai/mcp/tools.md): Every tool on one page, and the machine-readable index.
* [Account, brand, and jobs](https://docs.trycontinuum.ai/mcp/tools/account.md): Lists the brands you can access, and more.
* [Analytics, trends, and competitors](https://docs.trycontinuum.ai/mcp/tools/insights.md): Organic, paid, and website results by platform: accounts, top posts, campaigns, ad sets, and ads, and more.
* [Performance+ ads and optimization](https://docs.trycontinuum.ai/mcp/tools/paid.md): Reads your campaign structure; creates paused campaigns, ad sets, and ads; updates or pauses them; builds audiences and lookalikes; and keeps an audit log of every write, and more.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.