API reference
Schedule a post
post_schedule — Put a post or thread in the calendar of one account: at a time, in the account's next good slot, or as a draft.
post_schedule · Changes an X-Buddy setting
Put a post or thread in the calendar of one account: at a time, in the account's next good slot, or as a draft. Duplicate guard and limits apply when it publishes. Text is posted word for word.
| REST | POST /api/public/v1/posts |
| MCP tool | post_schedule |
| Permission needed | posts.manage — Owner, Manager, Operator |
| Scope group | x:publish |
| Group | Posts |
| Shown up front in profiles | Automation |
Input
| Field | Type | Required | Description |
|---|---|---|---|
account |
string (1–100 chars) | Yes | The X account to use: its X-Buddy account_id (from account_list) or its @handle. Ambiguous names return candidates instead of guessing. |
parts |
array of object (1–25 items) | Yes | |
when |
at · queue · draft |
Yes | at = at at; queue = next good slot of the account; draft = not scheduled. |
at |
string (date-time) | No | ISO time for when=at (≤ 60 days ahead). |
pin |
boolean | No |
Result
Returns the operation's result in the { data, meta } envelope.
Needs an idempotency key (Idempotency-Key, 8–128 characters). Retrying with the same key never repeats the action.
Example
Call over REST
curl -X POST "https://reach-link-craft.lovable.app/api/public/v1/posts" \
-H "Authorization: Bearer $XBUDDY_API_KEY" \
-H "Idempotency-Key: 6f1c2a90-example-key" \
-H "Content-Type: application/json" \
-d '{"account":"@your_x_account","parts":[{"text":"Hello from X-Buddy"}],"when":"at"}'
Call over MCP
{
"method": "tools/call",
"params": {
"name": "post_schedule",
"arguments": {
"account": "@your_x_account",
"parts": [
{
"text": "Hello from X-Buddy"
}
],
"when": "at",
"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 |
ambiguous_account |
409 | No |
account_not_allowed |
403 | No |
not_found |
404 | No |