---
title: "Set a brand's approval rules (dashboard session only)"
method: PUT
path: "/api/brands/{id}/approvals"
---

# Set a brand's approval rules (dashboard session only)

`PUT /api/brands/{id}/approvals`

## Request

- Base URL: `https://postwire.io`
- URL: `https://postwire.io/api/brands/{id}/approvals`
- Auth: HTTP bearer

Plain rules checked on PostWire's server before anything is sent; no AI is involved. Only a signed-in dashboard session can change them (403 approval_requires_human otherwise), so an agent cannot switch its own approvals off.

## Path parameters

- `id` string, uuid, required

## Request body

- object
  - `enabled` boolean: Switching the rules off is allowed on every plan; on needs a paid plan (Starter and above).
  - `sources` object: Which sources' posts wait. Defaults: api, agents and automations true; dashboard false.
    - `dashboard` boolean
    - `api` boolean
    - `agents` boolean: AI agents over MCP: Claude, ChatGPT, Cursor, the local postwire-mcp.
    - `automations` boolean: n8n, Make, Zapier.
  - `networks` string[]: Only posts that include one of these networks wait (the whole post waits). Empty = every network.
  - `only_if` object: Only posts that match one of these wait. All off = every post from the sources.
    - `link` boolean: Contains a link (URLs, www., bare domains like shop.com/sale).
    - `price` boolean: Mentions a currency amount ($49, 19.99 EUR, S/ 120, 300 soles).
    - `words` string[]: Words or phrases (up to 200), case- and accent-insensitive, whole words; a trailing * matches the start of a word.
  - `approvers` string[]: Extra approvers who approve from their own link without a PostWire account. Pro: 5 per brand, Agency 25, Scale 100; not on Starter.
  - `notify` object
    - `email` boolean: Email the owner (default true).
    - `telegram` boolean: Post the approval link in the brand's connected Telegram (anyone in that chat can approve with it).
    - `discord` boolean
  - `remind_every_hours` integer: Remind with fresh links after this many hours, at most 3 times (0 = never). Default 12.
  - `link_hours` integer: How long each link works. Default 72.

## Response `200`

{ ok, brand_id, policy }

## Other responses

- `400`: bad_request
- `403`: approval_requires_human, plan_feature or approvers_limit (with upgrade)
- `503`: governance_unavailable

---

[API](https://skmtc.dev/postwire/apis/postwire-api.md) · [All operations](https://skmtc.dev/postwire/apis/postwire-api/llms.txt) · [OpenAPI document](https://skmtc.dev/postwire/apis/postwire-api/revisions/513a409ab8f7?raw)
