> Discover all available Postdom documentation from the machine-readable index: https://postdom.com/llms.txt

Configured tool · write

# `set_approval_rule`

Change when Postdom asks the person before posting, or pause posting, for the whole workspace or for one connected account.

write · non-destructive · closed-world · chat-only

Human and agent roles

## Configured boundary

### Configured workspace

Postdom Chat only, with the signed-in owner's, admin's or member's authority. It is not on the agent MCP menu: it writes through the dashboard's rules routes, which refuse every agent credential. Level 3 keeps its gate: a daily limit and at least one allowed visibility on the account. The gates are in the API, not in the prompt: a rules tool is refused outright after a tool result. Propose, then confirm: the API refuses any call the assistant's own previous answer did not propose and the person's current message does not agree to. The proposal is read from the end of that answer only: the last sentence ending in a question mark, plus the one sentence before it. Those sentences carry the new value and where it lands - the asking level as its own sentence, posts per day as a digit, quiet hours as HH:MM to HH:MM or the words no quiet hours, a pause as pause or resume, brand notes as the section text in double quotes - with @handle for one account or the word everywhere for the workspace. One change per question: a question that offers two changes, joins alternatives with or, or names two accounts (or an account and the workspace) is refused, because a yes does not say which. Anything else is refused with rules_change_not_asked before the call. asking_level 3 is confirmed by its own sentence rather than by yes - Post without asking, which is what the onboarding chip sends.

This reference describes the hosted server at https://api.postdom.com/mcp, which runs current source, with a workspace-scoped key created under Connected apps → For developers. The published `@postdom/mcp@0.4.0` package has 14 of these tools: it lacks list_posts, create_slideshow, account_music and the media array.

Callable schema

## Input fields

Field names match the configured tool schema. Runtime-only constraints are labeled separately from schema validation.

| Field | Type | Contract |
| --- | --- | --- |
| account_id Optional | string | A connected account's id from the workspace facts Scopes the change to one account as an exception to the workspace rule. Omit for the workspace. |
| asking_level Optional | 0 \| 1 \| 2 \| 3 | 0 You schedule everything yourself · 1 Ask me before every post · 2 Ask me once per plan · 3 Post without asking When Postdom asks the person before posting. The L-numbers stay in the API; the chat says the sentence. |
| paused Optional | boolean | Workspace: the pause-all brake · account: that account's own pause Stops new agent work. Anything already handed to a platform still goes out. |

**For AI agents:** Send only fields exposed by the current tool schema.

**Known failure:** Do not invent platform settings, account IDs, media fields, or setup steps.

Synthetic values

## Example call

Identifiers and values are examples. They do not represent a connected workspace or accepted media source.

_EXAMPLE CALL · CONFIGURED TOOL SCHEMA_

```
set_approval_rule({
  account_id: "acct_example_li",
  asking_level: 1
})
```

Observed API record

## Return shape

Returns the rules_change card: the rules before, the rules after, exactly which fields moved, and a one-line summary. applied is false, with a blocked sentence, when nothing was saved.

**`kind · subject` (rules_change · rules)** — The card shape the app renders and the chat reports from.

**`scope` (workspace | account)** — Whose rules changed. An account scope carries its id, platform and handle.

**`applied` (boolean)** — Whether the write landed. False means before equals after and blocked says why.

**`before · after` (rules snapshot)** — asking_level with its sentence, paused, posts_per_day and quiet_hours, read back from the API after the write rather than assumed from the request.

**`changed` (field[])** — Exactly the fields that differ between before and after.

**`blocked` (object | null)** — code and one sentence when nothing was saved. policy_required names what level 3 is missing; policy_version_conflict means someone else saved first, twice.

**`exceptions · exceptions_not_shown` (array · integer)** — Accounts that keep their own asking level when the workspace's changes, so the card never claims a workspace rule over an exception. A card too large to carry all of them drops from the end and counts what it dropped.

**`timezone · summary` (string)** — The workspace clock the limits are counted on, and the one-line before → after.

Stop conditions

## Agent handoff

`applied`

### Say the change

State before → after in the person's words, from the card, never as a prediction.

`policy_required`

### Say what is missing

Repeat the blocked sentence as written and do not claim the level changed.

`policy_version_conflict`

### Show the latest

The rules changed under the write twice. The card carries the latest saved rules; say so.

`post_without_asking_unconfirmed`

### Ask for the sentence

Level 3 was not set. Propose it and ask them to reply with Post without asking; a yes is not enough for this one.

`rules_change_not_asked`

### Propose, do not retry

Nothing you proposed was confirmed. Say the change in one sentence with its values and where it lands, end with a question, and call again on their yes.

 VERIFIED · 26 AUGUST 2026  **PUT /v1/dashboard/policies/workspace-defaults/conditional · POST /v1/dashboard/accounts/trust · POST /v1/dashboard/accounts/pause · POST /v1/dashboard/pause**

Examples are synthetic. Human workspace-key creation and revocation remain in Postdom under Connected apps → For developers.
