---
title: "Bulk update mailboxes"
method: POST
path: "/v1/accounts/bulk"
tags: ["Email Accounts"]
---

# Bulk update mailboxes

`POST /v1/accounts/bulk`

## Request

- Base URL: `https://api.mailbeast.ai`
- URL: `https://api.mailbeast.ai/v1/accounts/bulk`
- Auth: HTTP bearer

Apply ONE settings/limits `patch` OR one `status` change (`active`/`inactive`) across many mailboxes. `patch` and `status` are mutually exclusive.

Requires one of the following scopes: `accounts:write`, `accounts:all`, `all:all`.

## Headers

- `Idempotency-Key` string

## Request body

- BulkAccountsApiDto
  - `ids` string[], required: Target account ids.
  - `status` 'active' | 'inactive': Enable (`active`) or disable (`inactive`) sending across the set. Mutually exclusive with `patch`.
  - `patch` BulkAccountPatchApiDto
    - `displayName` string
    - `firstName` string
    - `lastName` string
    - `maxEmailsPerDay` number
    - `replyToAddress` string: Pass `""` to clear it and reply to each mailbox address again, same as the single PATCH.
    - `sendingGapMinutes` number
    - `campaignSlowRamp` boolean
    - `signature` string
    - `bcc` string
    - `automationLanguage` 'en' | 'ar' | 'bn' | 'zh' | 'cs' | 'da' | 'nl' | 'fi' | 'fr' | 'de' | 'el' | 'he' | 'hi' | 'hu' | 'id' | 'it' | 'ja' | 'ko' | 'ms' | 'no' | 'pl' | 'pt' | 'ro' | 'ru' | 'es' | 'sv' | 'th' | 'tr' | 'uk' | 'vi'
    - `tracking` AccountTrackingApiDto
      - `domainId` string, uuid, nullable: One of your workspace tracking domains. Attaching one enables open/click tracking for this mailbox. When omitted on connect, the workspace default is assigned; pass `null` for no tracking.
    - `warmup` AccountWarmupApiDto
      - `enabled` boolean: Enroll the mailbox in warmup. Defaults to true on connect.
      - `strategy` 'standard' | 'aggressive' | 'custom': `standard` and `aggressive` are fixed profiles (conservative / faster) with their own ramp, cap and reply rate. `custom` is what makes `maxPerDay`, `rampupEnabled`, `dailyRampup`, `randomizer` and `replyRatePercentage` take effect.
      - `maxPerDay` number: Warmup emails per day, up to 30. Separate from `maxEmailsPerDay`, which caps CAMPAIGN sending only. `0` keeps warmup on but sends nothing. While the mailbox is still ramping up this is honoured on `custom` only (the preset strategies use their own cap), but once warmup reaches the steady maintaining stage it is the ceiling for EVERY strategy.
      - `replyRatePercentage` number: Share of warmup emails that get a reply. `custom` strategy only; the presets use their own reply rate.
      - `rampupEnabled` boolean: Grow the daily volume gradually (by `dailyRampup` each day) instead of sending `maxPerDay` from day one. `custom` strategy only.
      - `dailyRampup` number: Emails added per day while ramping up. Read only when `rampupEnabled` is **true**. With ramp-up off the mailbox sends a flat `maxPerDay` every day and this is ignored. `custom` strategy only.
      - `randomizer` number: Percent of warmup sends randomly skipped each day, so volume is not identical day to day. `custom` strategy only.
      - `skipWeekends` boolean: Skip Saturdays and Sundays.
      - `timezone` string: IANA timezone the warmup schedule runs in. Defaults to the workspace timezone.
      - `trackingEnabled` boolean: Track opens on warmup emails.

## Response `200`

- BulkAccountsApiResponseDto
  - `updated` number, required: Accounts updated.
  - `skipped` number, required: Mailboxes that were not eligible for this change.
  - `skippedAccounts` BulkSkippedAccountDto[], required
    - `id` string, uuid, required: The id you passed in `ids`, so a skip can always be matched back to the request.
    - `email` string, nullable, required: Null when the id matches no mailbox in your workspace (`status: "not_found"`).
    - `status` string, required
    - `reason` string, required

## Other responses

- `400`: The request body or parameters failed validation.
- `401`: Missing or invalid API key.
- `403`: The key lacks a required scope, or the plan does not include API access.
- `409`: The request conflicts with current state - e.g. a request with the same Idempotency-Key is still being processed, or the operation partially applied.
- `422`: The Idempotency-Key was already used with a different request body. Use a new key for a new operation.
- `429`: Rate limit exceeded - retry after the interval in the Retry-After header.

---

[API](https://skmtc.dev/mailbeast/apis/mailbeast-public-api.md) · [All operations](https://skmtc.dev/mailbeast/apis/mailbeast-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/mailbeast/apis/mailbeast-public-api/revisions/6440ce0738a4?raw)
