# Create a Worker

> Create a Worker that writes posts on a schedule or on demand. Call it only when the user asked for this in the conversation; never on your own initiative.

`workers.create` · write

- **MCP tool:** `create_worker`. Loaded by default in MCP clients.
- **REST:** `POST /v1/workers/create`
- **CLI:** `xholic workers create`
- **Scope:** `write`
- **Plan:** Pro plan or higher
- **Cost:** Free.
- **Rate limit bucket:** `write`

## Input

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string ≤ 80 chars | Yes |  |
| `status` | "ACTIVE" \\| "PAUSED" | No | PAUSED saves the worker without running it, for when the plan's active workers are all in use. Default: `"ACTIVE"`. |
| `voiceMode` | "OWN" \\| "CREATOR" \\| "HYBRID" | Yes | OWN is "My voice"; CREATOR writes in the creators' style; HYBRID is the user's voice with the creators' rhythm. |
| `creatorXIds` | array of string ≤ 120 chars (max 3) | No | Creator xid values from findWorkerCreators: one for HYBRID unless the user asks for more (up to three), one to three for CREATOR, none for OWN. Default: `[]`. |
| `instructions` | string ≤ 2000 chars or null | No | The worker's brief, broad boundaries only: who it writes for, who speaks, how the account likes to write, the areas it usually writes in, when to mention products and hard bans. Never a thesis, a point of view to push or specific topics to cover. |
| `applyAccountRules` | boolean | No | Follow the account's saved writing rules. Default: `true`. |
| `mirrorProvenPosts` | boolean | No | Shape posts on formats that already work in the niche. Default: `true`. |
| `topicMode` | "FOR_YOU" \\| "PRODUCT" \\| "CUSTOM_TOPIC" \\| "NICHE_TRENDING" | Yes | FOR_YOU is "For you" (topics from the profile); PRODUCT is "Your products"; CUSTOM_TOPIC is a custom topic; NICHE_TRENDING follows what is trending for its keywords. |
| `customTopic` | string ≤ 500 chars or null | No | CUSTOM_TOPIC: what to post about. NICHE_TRENDING: one to five comma-separated keywords. |
| `productIds` | array of string ≤ 120 chars (max 5) | No | PRODUCT only: saved product IDs from getAutomationSetup or getAccountContext. Default: `[]`. |
| `outputCount` | 8 or 12 or 24 | Yes | Posts written per run: 8, 12 or 24. |
| `scheduleMode` | "ON_DEMAND" \\| "DAILY" \\| "WEEKLY" | Yes |  |
| `scheduleTimeMinutes` | integer 0–1439 or null | No | DAILY or WEEKLY: minutes after midnight in the account's timezone, e.g. 540 for 9:00. |
| `scheduleDayOfWeek` | integer 0–6 or null | No | WEEKLY: 0 is Sunday, 6 is Saturday. |
| `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. |
