---
title: "Remove Synced Accounts"
method: POST
path: "/accounts/bulk-remove"
tags: ["accounts"]
---

# Remove Synced Accounts

`POST /accounts/bulk-remove`

## Request

- Base URL: `https://dev.whispa.net` (the document declares no server; this is the origin it was published from)
- URL: `https://dev.whispa.net/accounts/bulk-remove`
- Auth: one of:
  - OAuth 2
    - Password
    - Token URL: `auth/bearer/login`
  - API key in cookie `access_token`

Remove the selected accounts from the local working set (admin only).

The upstream CRM records are untouched. Campaign membership and pending work
are removed, while hidden tombstones preserve Whispa-only compliance and
call-history state. A later provider sync can re-add the accounts.

Removal is per-account and partial success is reported, not raised: any
account that is already dialling — or is no longer on this surface — comes
back in ``skipped`` while the rest of the batch is removed. A 409 means an
account sync is running and nothing was touched.

## Request body

- RemoveAccountsRequest: Working-set rows to drop, as selected on the Accounts table.
  - `account_ids` string[], required

## Response `200`

Successful Response

- RemoveAccountsResult: Per-account outcome of one removal batch. Partial success is the norm, not an error: a single account already dialling must not strand the rest of the selection, so it comes back in ``skipped`` while everything else is removed.
  - `removed` integer, required
  - `skipped` SkippedAccountRemoval[]
    - `account_id` string, uuid, required
    - `reason` 'not_found' | 'call_in_progress', required

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/whispa/apis/whispa-api.md) - [All operations](https://skmtc.dev/whispa/apis/whispa-api/llms.txt) - [OpenAPI document](https://skmtc.dev/whispa/apis/whispa-api/revisions/12c2e4aca43c?raw)
