---
title: "Bulk delete contacts"
method: POST
path: "/v3/contacts/bulk-delete"
tags: ["Contacts"]
---

# Bulk delete contacts

`POST /v3/contacts/bulk-delete`

<small>_Requires the `contacts:write` scope (or a broader one that includes it)._</small>

Use this endpoint when you need to remove several contacts in a single call. Contacts are processed independently: the response maps each contact id that could not be deleted to the reason it was skipped.

## Request body

- object
  - `ids` integer[], required — List of contact IDs to delete

## Response `200`

Non-atomic result. The response body is a dictionary keyed by contact id listing per-item failures. Empty object `{}` means all contacts were deleted successfully.

Per-item failures use the `ContactError` enum. Common per-item slugs:

| Slug | Meaning |
| --- | --- |
| `notFound` | Contact does not exist, or is not visible to the caller |
| `forbidden` | Caller is not allowed to delete this contact |

- object — Dictionary of per-item failures keyed by contact id. Empty object `{}` means all succeeded.

## Other responses

- `400` — Validation failure on the request body, or a business rule rejection.
- `401` — Unauthorized. The response body is empty; check the `WWW-Authenticate` header for the expected scheme.
- `429` — Too Many Requests

---

[API](https://skmtc.net/reply/apis/reply-api.md) · [All operations](https://skmtc.net/reply/apis/reply-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/reply/reply-api/revisions/1c3d32eaf95e/schema)
