API reference
Run one X action over many items
x_batch — One X write operation (post_set_like, user_set_follow, dm_send, post_reply…) over up to 1 000 items.
x_batch · Write on X (creates a job)
One X write operation (post_set_like, user_set_follow, dm_send, post_reply…) over up to 1 000 items. Give items [{account, args}] or a selector {account_ids, group_ids} plus args_list (every account × every args). Each item is queued like a direct call (same limits, run hours, do-not-contact). Optional spacing_seconds {min,max} between items of the same account. dry_run=true returns what would be queued and why any item is refused. Follow with x_batch_get; the batch.completed event fires when every item has ended.
| REST | POST /api/public/v1/batches |
| MCP tool | x_batch |
| Permission needed | accounts.run — Owner, Manager, Operator |
| Scope group | x:engage |
| Group | Actions on X |
| Shown up front in profiles | Automation, Infrastructure |
Input
| Field | Type | Required | Description |
|---|---|---|---|
operation |
string (0–64 chars) | Yes | Operation id of an X write that takes an account (see tools_search). |
items |
array of object (0–1000 items) | No | |
selector |
object | No | Which accounts: the union of account_ids and the members of group_ids. Empty = no account (never all). |
args_list |
array of object (0–1000 items) | No | With selector: each args object runs on every selected account. |
spacing_seconds |
object | No | Extra wait between two items of the same account (default none: the account's own queue order and human pacing only). |
dry_run |
boolean | No |
Result
Creates a job for the X account's VPS. REST waits up to wait seconds (default 15, max 20): when done it returns 200 with the result, otherwise 202 with Location: /api/public/v1/jobs/{job_id}. The final status is succeeded, failed, cancelled or unknown.
Needs an idempotency key (Idempotency-Key, 8–128 characters). Retrying with the same key never repeats the action.
A job that ends unknown may already have happened on X: never resend it with a new idempotency key.
Example
Call over REST
curl -X POST "https://reach-link-craft.lovable.app/api/public/v1/batches" \
-H "Authorization: Bearer $XBUDDY_API_KEY" \
-H "Idempotency-Key: 6f1c2a90-example-key" \
-H "Content-Type: application/json" \
-d '{"operation":"example"}'
Call over MCP
{
"method": "tools/call",
"params": {
"name": "x_batch",
"arguments": {
"operation": "example",
"idempotency_key": "6f1c2a90-example-key"
}
}
}
Errors you may get
| Code | HTTP | Retryable |
|---|---|---|
unauthorized |
401 | No |
key_expired |
401 | No |
integration_revoked |
401 | No |
connection_not_linked |
403 | No |
integration_paused |
403 | No |
workspace_integrations_paused |
403 | No |
integration_authorization_lost |
403 | No |
workspace_suspended |
403 | No |
forbidden |
403 | No |
invalid_input |
422 | No |
rate_limited |
429 | Yes |
internal |
500 | Yes |
read_only |
403 | No |
idempotency_key_required |
428 | No |
idempotency_conflict |
409 | No |
idempotency_processing |
409 | Yes |
conflict |
409 | No |
precondition_failed |
422 | No |
agent_too_old |
422 | No |
unsupported_by_account |
422 | No |