---
title: "Replace mailbox rules"
method: PUT
path: "/mailboxes/{id}/rules"
tags: ["Mailboxes"]
---

# Replace mailbox rules

`PUT /mailboxes/{id}/rules`

## Request

- Base URL: `https://shipmail.to/api/v1`
- URL: `https://shipmail.to/api/v1/mailboxes/{id}/rules`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://shipmail.to/api/auth/oauth2/authorize`, token URL `https://shipmail.to/api/auth/oauth2/token`)

Replace all deterministic server-side inbox rules for a mailbox. Call GET first to preserve rules that should remain and inspect folder IDs.

## Headers

- `X-Shipmail-Organization` string

## Request body

- UpdateMailboxRulesRequest
  - `rules` MailboxRule[], required
    - `id` string, uuid, required
    - `name` string, required
    - `enabled` boolean, required
    - `position` integer, required
    - `match_mode` 'all' | 'any', required
    - `stop` boolean, required: Stop evaluating later rules after this rule matches.
    - `conditions` MailboxRuleCondition[], required
      - union
        - object
          - `type` 'from_is' | 'from_contains' | 'recipient_is' | 'recipient_contains' | 'plus_tag_is' | 'subject_contains', required
          - `value` string, required
        - object
          - `type` 'has_attachment' | 'list_unsubscribe_exists', required
        - object
          - `type` 'group', required
          - `match_mode` 'all' | 'any', required
          - `conditions` MailboxRuleCondition[], required
    - `actions` MailboxRuleAction[], required
      - union
        - object
          - `type` 'move', required
          - `target` union, required
            - object
              - …
            - object
              - …
        - object
          - `type` 'mark_read' | 'star' | 'send_webhook', required

## Response `200`

Updated mailbox rules.

- MailboxRules
  - `object` 'mailbox_rules', required
  - `mailbox_id` string, required
  - `address` string, email, required
  - `rules` MailboxRule[], required
    - `id` string, uuid, required
    - `name` string, required
    - `enabled` boolean, required
    - `position` integer, required
    - `match_mode` 'all' | 'any', required
    - `stop` boolean, required: Stop evaluating later rules after this rule matches.
    - `conditions` MailboxRuleCondition[], required
      - union
        - object
          - `type` 'from_is' | 'from_contains' | 'recipient_is' | 'recipient_contains' | 'plus_tag_is' | 'subject_contains', required
          - `value` string, required
        - object
          - `type` 'has_attachment' | 'list_unsubscribe_exists', required
        - object
          - `type` 'group', required
          - `match_mode` 'all' | 'any', required
          - `conditions` MailboxRuleCondition[], required
    - `actions` MailboxRuleAction[], required
      - union
        - object
          - `type` 'move', required
          - `target` union, required
            - object
              - …
            - object
              - …
        - object
          - `type` 'mark_read' | 'star' | 'send_webhook', required
  - `folders` MailboxRuleFolder[], required
    - `id` string, required
    - `name` string, required
    - `parent_id` string, nullable, required: Parent folder ID for subfolders, or null for a root folder.
    - `role` string, nullable, required
    - `kind` 'custom' | 'system', required

## Other responses

- `401`: Authentication failed.
- `403`: Insufficient permissions.
- `404`: Resource not found.
- `422`: Validation failed.
- `429`: Rate limit exceeded.

---

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