API reference
Change the account's settings on X
x_settings_set — Set some of the account's own settings on X, through X's Settings pages, each read back after a reload: protected posts, sensitive media (show / mark your own), discoverability by email / phone, perso
x_settings_set · Write on X (creates a job)
Set some of the account's own settings on X, through X's Settings pages, each read back after a reload: protected posts, sensitive media (show / mark your own), discoverability by email / phone, personalised ads, location on posts, notification quality filter, photo tagging (all / following / none). Give only the keys to change; one already at its target is changed=false with no click. Direct-message settings live in X Chat and are not here. Owner / Manager only; protected / discoverability / tagging changes are audited with the old value. Not limited.
| REST | POST /api/public/v1/accounts/{account}/actions/settings |
| MCP tool | x_settings_set |
| Permission needed | infra.manage — Owner, Manager |
| Scope group | x:engage |
| Group | Actions on X |
| Shown up front in profiles | Operate X accounts |
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. |
protected |
boolean | No | Protect posts: only approved followers see them. |
displaySensitiveMedia |
boolean | No | Show media that may contain sensitive content. |
markMediaSensitive |
boolean | No | Mark the account's own media as sensitive. |
discoverableByEmail |
boolean | No | People who have the account's email can find it. |
discoverableByPhone |
boolean | No | People who have the account's phone number can find it. |
personalizedAds |
boolean | No | Personalised ads. |
locationInfo |
boolean | No | Add location information to the account's posts. |
qualityFilter |
boolean | No | Notification quality filter. |
allowMediaTagging |
all · following · none |
No | Who can tag the account in photos: all, following or none. |
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/accounts/%40your_x_account/actions/settings" \
-H "Authorization: Bearer $XBUDDY_API_KEY" \
-H "Idempotency-Key: 6f1c2a90-example-key" \
-H "Content-Type: application/json" \
-d '{}'
Call over MCP
{
"method": "tools/call",
"params": {
"name": "x_settings_set",
"arguments": {
"account": "@your_x_account",
"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 |
agent_too_old |
422 | No |
unsupported_by_account |
422 | No |