# 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

Source: https://x.builera.app/docs/en/reference/x_settings_set

`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 {#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 {#output}

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.

> [!IMPORTANT]
> Needs an idempotency key (`Idempotency-Key`, 8–128 characters). Retrying with the same key never repeats the action.

> [!WARNING]
> A job that ends `unknown` may already have happened on X: never resend it with a new idempotency key.

## Example {#example}

### Call over REST {#example-rest}

```bash
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 {#example-mcp}

```json
{
  "method": "tools/call",
  "params": {
    "name": "x_settings_set",
    "arguments": {
      "account": "@your_x_account",
      "idempotency_key": "6f1c2a90-example-key"
    }
  }
}
```

## Errors you may get {#errors}

| Code | HTTP | Retryable |
|---|---|---|
| [`unauthorized`](/docs/en/errors/unauthorized) | 401 | No |
| [`key_expired`](/docs/en/errors/key_expired) | 401 | No |
| [`integration_revoked`](/docs/en/errors/integration_revoked) | 401 | No |
| [`connection_not_linked`](/docs/en/errors/connection_not_linked) | 403 | No |
| [`integration_paused`](/docs/en/errors/integration_paused) | 403 | No |
| [`workspace_integrations_paused`](/docs/en/errors/workspace_integrations_paused) | 403 | No |
| [`integration_authorization_lost`](/docs/en/errors/integration_authorization_lost) | 403 | No |
| [`workspace_suspended`](/docs/en/errors/workspace_suspended) | 403 | No |
| [`forbidden`](/docs/en/errors/forbidden) | 403 | No |
| [`invalid_input`](/docs/en/errors/invalid_input) | 422 | No |
| [`rate_limited`](/docs/en/errors/rate_limited) | 429 | Yes |
| [`internal`](/docs/en/errors/internal) | 500 | Yes |
| [`read_only`](/docs/en/errors/read_only) | 403 | No |
| [`idempotency_key_required`](/docs/en/errors/idempotency_key_required) | 428 | No |
| [`idempotency_conflict`](/docs/en/errors/idempotency_conflict) | 409 | No |
| [`idempotency_processing`](/docs/en/errors/idempotency_processing) | 409 | Yes |
| [`conflict`](/docs/en/errors/conflict) | 409 | No |
| [`precondition_failed`](/docs/en/errors/precondition_failed) | 422 | No |
| [`ambiguous_account`](/docs/en/errors/ambiguous_account) | 409 | No |
| [`account_not_allowed`](/docs/en/errors/account_not_allowed) | 403 | No |
| [`not_found`](/docs/en/errors/not_found) | 404 | No |
| [`agent_too_old`](/docs/en/errors/agent_too_old) | 422 | No |
| [`unsupported_by_account`](/docs/en/errors/unsupported_by_account) | 422 | No |

[Back to all operations](/docs/en/reference)
