# Queue actions

> Queue: 14 Xholic actions (3 read, 11 change), each with its MCP tool, REST endpoint and CLI command.

Source: https://docs.xholic.ai/actions/queue/

14 actions. Every field marked *Required* must be sent; `account`, `dryRun`, `idempotencyKey`, `confirmCredits` and `quoteId` are the [control fields](/api/responses/#control-fields) every surface adds.

## Queue and drafts

`queue.list` · read

Scheduled posts and drafts, soonest first.

- **MCP tool:** `get_queue`. Loaded by default in MCP clients.
- **REST:** `GET /v1/queue/list`
- **CLI:** `xholic queue list`
- **Scope:** `read`
- **Plan:** Every plan, including the trial
- **Cost:** Free.
- **Rate limit bucket:** `read`

**Input**

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `view` | "all" \\| "queued" \\| "drafts" \\| "posted" \\| "failed" | No | Default: `"all"`. |
| `limit` | integer 1–20 | No | Default: `10`. |
| `account` | string ≤ 64 chars | No | X account to act on, as @handle. Leave it out to use the connection's default account. |

## Reschedule a post

`queue.reschedule` · publish

Move a queued post to a new time. Call it only when the user asked for this in the conversation; never on your own initiative.

- **MCP tool:** `reschedule_post`. Loaded by default in MCP clients.
- **REST:** `POST /v1/queue/reschedule`
- **CLI:** `xholic queue reschedule`
- **Scope:** `publish`
- **Plan:** Every plan, including the trial
- **Cost:** Free.
- **Rate limit bucket:** `write`

**Input**

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `postId` | string (uuid) | Yes |  |
| `scheduledAt` | string | Yes | The local date and time in timezone, such as 2026-10-25T10:00. Write the time the user means; do not convert it to UTC or add an offset. |
| `timezone` | string ≤ 80 chars | Yes |  |
| `account` | string ≤ 64 chars | No | X account to act on, as @handle. Leave it out to use the connection's default account. |
| `dryRun` | boolean | No | Return exactly what would happen without doing it. |
| `idempotencyKey` | string ≤ 200 chars | No | A unique key for this write. Repeating a call with the same key returns the first result instead of acting twice. |

## Unschedule a post

`queue.unschedule` · write

Take a scheduled post out of the queue and keep it as a draft.

- **MCP tool:** `unschedule_post`. Loaded by default in MCP clients.
- **REST:** `POST /v1/queue/unschedule`
- **CLI:** `xholic queue unschedule`
- **Scope:** `write`
- **Plan:** Every plan, including the trial
- **Cost:** Free.
- **Rate limit bucket:** `write`

**Input**

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `postId` | string ≤ 120 chars | Yes |  |
| `account` | string ≤ 64 chars | No | X account to act on, as @handle. Leave it out to use the connection's default account. |
| `dryRun` | boolean | No | Return exactly what would happen without doing it. |
| `idempotencyKey` | string ≤ 200 chars | No | A unique key for this write. Repeating a call with the same key returns the first result instead of acting twice. |

## Edit a queued post

`queue.edit` · publish

Change the text, thread, media or automations of a draft or scheduled post.

- **MCP tool:** `edit_queued_post`. Loaded by default in MCP clients.
- **REST:** `POST /v1/queue/edit`
- **CLI:** `xholic queue edit`
- **Scope:** `publish`
- **Plan:** Every plan, including the trial
- **Cost:** Free.
- **Rate limit bucket:** `write`

**Input**

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `postId` | string ≤ 120 chars | Yes |  |
| `text` | string ≤ 25000 chars | Yes |  |
| `threadParts` | array of string ≤ 25000 chars (min 2, max 25) | No | For a thread: every part in order, starting with the same first post as text. |
| `media` | array of object (max 4) | No | Media from upload_media, by mediaId. Up to 4 images, or 1 GIF or video. |
| `automation` | object | No | Post automations (auto-repost, auto-plug reply, auto-delete, auto-DM). Shape as in the docs: docs.xholic.ai/api/automations. |
| `account` | string ≤ 64 chars | No | X account to act on, as @handle. Leave it out to use the connection's default account. |
| `dryRun` | boolean | No | Return exactly what would happen without doing it. |
| `idempotencyKey` | string ≤ 200 chars | No | A unique key for this write. Repeating a call with the same key returns the first result instead of acting twice. |

## Delete a draft or scheduled post

`queue.delete` · write

Delete a draft or scheduled post from Xholic. It does not delete anything already on X. Call it only when the user asked for this in the conversation; never on your own initiative.

- **MCP tool:** `delete_queued_post`. Loaded by default in MCP clients.
- **REST:** `POST /v1/queue/delete`
- **CLI:** `xholic queue delete`
- **Scope:** `write`. Destructive: it can't be taken back
- **Plan:** Every plan, including the trial
- **Cost:** Free.
- **Rate limit bucket:** `write`

**Input**

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `postId` | string ≤ 120 chars | Yes |  |
| `account` | string ≤ 64 chars | No | X account to act on, as @handle. Leave it out to use the connection's default account. |
| `dryRun` | boolean | No | Return exactly what would happen without doing it. |
| `idempotencyKey` | string ≤ 200 chars | No | A unique key for this write. Repeating a call with the same key returns the first result instead of acting twice. |

## Queue counts

`queue.counts` · read

How many posts are queued, drafted, posted and failed.

- **MCP tool:** `queue_counts`. Catalog: reach it with `find_actions` and `run_read_action`, or turn on the full toolset.
- **REST:** `GET /v1/queue/counts`
- **CLI:** `xholic queue counts`
- **Scope:** `read`
- **Plan:** Every plan, including the trial
- **Cost:** Free.
- **Rate limit bucket:** `read`

**Input**

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `account` | string ≤ 64 chars | No | X account to act on, as @handle. Leave it out to use the connection's default account. |

## Get a queued post

`queue.get_post` · read

One draft, scheduled, posted or failed post in Xholic with its text, thread, media, automations and status.

- **MCP tool:** `queue_get_post`. Catalog: reach it with `find_actions` and `run_read_action`, or turn on the full toolset.
- **REST:** `GET /v1/queue/get-post`
- **CLI:** `xholic queue get-post`
- **Scope:** `read`
- **Plan:** Every plan, including the trial
- **Cost:** Free.
- **Rate limit bucket:** `read`

**Input**

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `postId` | string ≤ 120 chars | Yes | Xholic scheduled post id, from get_queue. |
| `account` | string ≤ 64 chars | No | X account to act on, as @handle. Leave it out to use the connection's default account. |

## Post a queued post now

`queue.post_now` · publish

Publish an existing draft or scheduled post to X right away. Send its text (the current text from queue.get_post, or the edited one). Call it only when the user asked for this in the conversation; never on your own initiative. Spends a post credit.

- **MCP tool:** `queue_post_now`. Catalog: reach it with `find_actions` and `run_write_action`, or turn on the full toolset.
- **REST:** `POST /v1/queue/post-now`
- **CLI:** `xholic queue post-now`
- **Scope:** `publish`. Destructive: it can't be taken back
- **Plan:** Every plan, including the trial
- **Cost:** Spends a post credit when the post goes live.
- **Rate limit bucket:** `write`

**Input**

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `postId` | string ≤ 120 chars | Yes | Xholic scheduled post id, from get_queue. |
| `text` | string ≤ 100000 chars | Yes |  |
| `threadParts` | array of string ≤ 100000 chars (max 100) | No | For a thread: every part in order, starting with the same first post as text. |
| `media` | array of object (max 400) | No | Media by mediaId, placed by thread part and position (0-3). |
| `automation` | object | No | Post automations (auto-repost, auto-plug reply, auto-delete, auto-DM). Shape as in the docs: docs.xholic.ai/api/automations. |
| `expectedUpdatedAt` | string (date-time) | No | The post's updatedAt from queue.get_post; refuses if it changed since. |
| `account` | string ≤ 64 chars | No | X account to act on, as @handle. Leave it out to use the connection's default account. |
| `dryRun` | boolean | No | Return exactly what would happen without doing it. |
| `idempotencyKey` | string ≤ 200 chars | No | A unique key for this write. Repeating a call with the same key returns the first result instead of acting twice. |

## Cancel a post

`queue.cancel` · write

Cancel a draft, scheduled or failed post so it never goes out. Call it only when the user asked for this in the conversation; never on your own initiative.

- **MCP tool:** `queue_cancel`. Catalog: reach it with `find_actions` and `run_write_action`, or turn on the full toolset.
- **REST:** `POST /v1/queue/cancel`
- **CLI:** `xholic queue cancel`
- **Scope:** `write`. Destructive: it can't be taken back
- **Plan:** Every plan, including the trial
- **Cost:** Free.
- **Rate limit bucket:** `write`

**Input**

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `postId` | string ≤ 120 chars | Yes | Xholic scheduled post id, from get_queue. |
| `account` | string ≤ 64 chars | No | X account to act on, as @handle. Leave it out to use the connection's default account. |
| `dryRun` | boolean | No | Return exactly what would happen without doing it. |
| `idempotencyKey` | string ≤ 200 chars | No | A unique key for this write. Repeating a call with the same key returns the first result instead of acting twice. |

## Share a draft link

`queue.share_draft` · write

Create a public read-only link to a draft so someone without Xholic can review it. Call it only when the user asked for this in the conversation; never on your own initiative.

- **MCP tool:** `queue_share_draft`. Catalog: reach it with `find_actions` and `run_write_action`, or turn on the full toolset.
- **REST:** `POST /v1/queue/share-draft`
- **CLI:** `xholic queue share-draft`
- **Scope:** `write`
- **Plan:** Every plan, including the trial
- **Cost:** Free.
- **Rate limit bucket:** `write`
- **Undo:** from the activity log, which runs `queue.revoke_share`

**Input**

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `postId` | string ≤ 120 chars | Yes | Xholic scheduled post id, from get_queue. |
| `account` | string ≤ 64 chars | No | X account to act on, as @handle. Leave it out to use the connection's default account. |
| `dryRun` | boolean | No | Return exactly what would happen without doing it. |
| `idempotencyKey` | string ≤ 200 chars | No | A unique key for this write. Repeating a call with the same key returns the first result instead of acting twice. |

## Turn off draft links

`queue.revoke_share` · write

Turn off every public link to a draft.

- **MCP tool:** `queue_revoke_share`. Catalog: reach it with `find_actions` and `run_write_action`, or turn on the full toolset.
- **REST:** `POST /v1/queue/revoke-share`
- **CLI:** `xholic queue revoke-share`
- **Scope:** `write`
- **Plan:** Every plan, including the trial
- **Cost:** Free.
- **Rate limit bucket:** `write`

**Input**

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `postId` | string ≤ 120 chars | Yes | Xholic scheduled post id, from get_queue. |
| `account` | string ≤ 64 chars | No | X account to act on, as @handle. Leave it out to use the connection's default account. |
| `dryRun` | boolean | No | Return exactly what would happen without doing it. |
| `idempotencyKey` | string ≤ 200 chars | No | A unique key for this write. Repeating a call with the same key returns the first result instead of acting twice. |

## Add an automation to a live post

`queue.add_automation_step` · publish

Add one automation step to a post that is already live: repost, unrepost, delete, a plug reply after enough likes, or DMs to people who reply with a keyword. Call it only when the user asked for this in the conversation; never on your own initiative.

- **MCP tool:** `queue_add_automation_step`. Catalog: reach it with `find_actions` and `run_write_action`, or turn on the full toolset.
- **REST:** `POST /v1/queue/add-automation-step`
- **CLI:** `xholic queue add-automation-step`
- **Scope:** `publish`
- **Plan:** Every plan, including the trial
- **Cost:** Free.
- **Rate limit bucket:** `write`

**Input**

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `postId` | string ≤ 120 chars | Yes | Xholic scheduled post id, from get_queue. |
| `type` | "AUTO_REPOST" \\| "AUTO_UNREPOST" \\| "AUTO_DELETE" \\| "AUTO_PLUG" \\| "AUTO_DM_DISCOVERY" | Yes | The step. Each type takes only its own fields. |
| `delayMinutes` | integer 0–9007199254740991 | No | AUTO_REPOST, AUTO_UNREPOST, AUTO_DELETE: minutes after the post went live. |
| `viewsThreshold` | integer 1–9007199254740991 | No | AUTO_DELETE: delete only if the post has fewer views than this. |
| `likesThreshold` | integer 1–9007199254740991 | No | AUTO_PLUG: likes that trigger the plug reply. |
| `templateName` | string ≤ 60 chars | No | AUTO_PLUG: a short name for the plug. |
| `templateText` | string ≤ 4000 chars | No | AUTO_PLUG: the plug reply text. |
| `monitoringWindowMinutes` | integer 60–10080 | No | AUTO_PLUG: minutes after posting when watching for likes stops. |
| `replyKeyword` | string ≤ 40 chars | No | AUTO_DM_DISCOVERY: one word repliers type. |
| `requireRepost` | boolean | No | AUTO_DM_DISCOVERY: DM only people who also reposted. |
| `maxRecipients` | integer 1–100 | No | AUTO_DM_DISCOVERY: most DMs to send. |
| `messageTemplate` | string | No | AUTO_DM_DISCOVERY: the DM to send. |
| `account` | string ≤ 64 chars | No | X account to act on, as @handle. Leave it out to use the connection's default account. |
| `dryRun` | boolean | No | Return exactly what would happen without doing it. |
| `idempotencyKey` | string ≤ 200 chars | No | A unique key for this write. Repeating a call with the same key returns the first result instead of acting twice. |

## Edit a live post's automation

`queue.update_automation_step` · publish

Change a pending automation step on a live post. Send the whole step with its type. Call it only when the user asked for this in the conversation; never on your own initiative.

- **MCP tool:** `queue_update_automation_step`. Catalog: reach it with `find_actions` and `run_write_action`, or turn on the full toolset.
- **REST:** `POST /v1/queue/update-automation-step`
- **CLI:** `xholic queue update-automation-step`
- **Scope:** `publish`
- **Plan:** Every plan, including the trial
- **Cost:** Free.
- **Rate limit bucket:** `write`

**Input**

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `postId` | string ≤ 120 chars | Yes | Xholic scheduled post id, from get_queue. |
| `ruleId` | string (uuid) | Yes |  |
| `type` | "AUTO_REPOST" \\| "AUTO_UNREPOST" \\| "AUTO_DELETE" \\| "AUTO_PLUG" \\| "AUTO_DM_DISCOVERY" | Yes | The step. Each type takes only its own fields. |
| `delayMinutes` | integer 0–9007199254740991 | No | AUTO_REPOST, AUTO_UNREPOST, AUTO_DELETE: minutes after the post went live. |
| `viewsThreshold` | integer 1–9007199254740991 | No | AUTO_DELETE: delete only if the post has fewer views than this. |
| `likesThreshold` | integer 1–9007199254740991 | No | AUTO_PLUG: likes that trigger the plug reply. |
| `templateName` | string ≤ 60 chars | No | AUTO_PLUG: a short name for the plug. |
| `templateText` | string ≤ 4000 chars | No | AUTO_PLUG: the plug reply text. |
| `monitoringWindowMinutes` | integer 60–10080 | No | AUTO_PLUG: minutes after posting when watching for likes stops. |
| `replyKeyword` | string ≤ 40 chars | No | AUTO_DM_DISCOVERY: one word repliers type. |
| `requireRepost` | boolean | No | AUTO_DM_DISCOVERY: DM only people who also reposted. |
| `maxRecipients` | integer 1–100 | No | AUTO_DM_DISCOVERY: most DMs to send. |
| `messageTemplate` | string | No | AUTO_DM_DISCOVERY: the DM to send. |
| `account` | string ≤ 64 chars | No | X account to act on, as @handle. Leave it out to use the connection's default account. |
| `dryRun` | boolean | No | Return exactly what would happen without doing it. |
| `idempotencyKey` | string ≤ 200 chars | No | A unique key for this write. Repeating a call with the same key returns the first result instead of acting twice. |

## Remove a live post's automation

`queue.remove_automation_step` · write

Remove a pending automation step from a live post before it runs. Call it only when the user asked for this in the conversation; never on your own initiative.

- **MCP tool:** `queue_remove_automation_step`. Catalog: reach it with `find_actions` and `run_write_action`, or turn on the full toolset.
- **REST:** `POST /v1/queue/remove-automation-step`
- **CLI:** `xholic queue remove-automation-step`
- **Scope:** `write`. Destructive: it can't be taken back
- **Plan:** Every plan, including the trial
- **Cost:** Free.
- **Rate limit bucket:** `write`

**Input**

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `postId` | string ≤ 120 chars | Yes | Xholic scheduled post id, from get_queue. |
| `ruleId` | string (uuid) | Yes |  |
| `account` | string ≤ 64 chars | No | X account to act on, as @handle. Leave it out to use the connection's default account. |
| `dryRun` | boolean | No | Return exactly what would happen without doing it. |
| `idempotencyKey` | string ≤ 200 chars | No | A unique key for this write. Repeating a call with the same key returns the first result instead of acting twice. |
