---
title: "Delete a user's feedback records"
method: DELETE
path: "/api/v3/feedbackRecords"
tags: ["V3 Feedback Records"]
---

# Delete a user's feedback records

`DELETE /api/v3/feedbackRecords`

## Request

- Base URL: `https://app.formbricks.com`
- URL: `https://app.formbricks.com/api/v3/feedbackRecords`
- Auth: API key in header `x-api-key`

Permanently deletes every record in the dataset whose `user_id` matches — the erasure operation
for GDPR Article 17 requests. Derived embeddings are removed with the records. Idempotent:
repeating the call answers `deleted_count: 0`.

`tenant_id` is **required**: the gateway scopes erasure to one dataset. (The underlying store
can erase a user across every dataset when `tenant_id` is omitted; that form is not reachable
through this API.) Records written without a `user_id` cannot be reached this way — delete them
individually.

Deletion is unrecoverable, so it requires an API key with **manage** permission on a workspace
the dataset is assigned to, and the dataset must be assigned to **exactly one** workspace: on a
shared dataset no workspace permission can say whose records these are, so API-key mutations
are refused with **403**.

## Query parameters

- `user_id` string, required
- `tenant_id` string, cuid2, required

## Response `200`

Records deleted

- DeleteFeedbackRecordsByUserResult
  - `deleted_count` integer, required: Number of records deleted. `0` when the user had no remaining records — the operation is idempotent.
  - `message` string, required: Human-readable status message.

## Other responses

- `400`: Bad Request. From the **gateway** (`text/plain`): a missing or malformed `tenant_id`; a request body that is not a single JSON object; a body whose top-level keys can be read more than one way (a repeated key, a key with non-ASCII characters, or a key that differs from `tenant_id` only in letter case); a `tenant_id` query parameter given more than once; or a path under `/api/v3/feedbackRecords` that is not one of the documented operations. A record id that is not a UUID and a path such as `/count` both fall in that last case and share the one `Unsupported FeedbackRecords route` body, so the two cannot be told apart from the response. From the **feedback store** (`application/problem+json`): schema validation failures — an unknown enum value, an inverted range, a malformed or re-ordered cursor, or a string with NULL bytes or invalid UTF-8.
- `401`: Unauthorized — no credentials, or an API key that does not exist or is revoked. Answered by the gateway as `text/plain`, before the request reaches the feedback store.
- `403`: Forbidden. Answered by the gateway as `text/plain` whenever the request cannot be authorized: the dataset does not exist, is archived, or is not assigned to a workspace the API key has the required permission on; the organization lacks the Unify Feedback entitlement; a mutation was attempted with an API key on a dataset shared by more than one workspace; or the record id does not exist. Existence is not leaked: an unknown dataset or record is refused here rather than with a 404. The single-record operations are the one exception, and only for a minute after a delete — see their `404`.
- `409`: Conflict (`application/problem+json`, `code: tenant_write_conflict`). The dataset is being **purged** while you write to it. Transient: retry the request unchanged once the purge completes. Only creates can conflict on a duplicate, so this operation never answers `code: conflict`.
- `500`: Internal Server Error from the feedback store (`application/problem+json`, `code: internal_server_error`).
- `503`: Service Unavailable. From the **gateway** (`text/plain`): the record's dataset could not be resolved because the feedback store did not answer, the authorization service itself was unreachable, or the record's stored `tenant_id` is not a dataset id this API can address. From the **feedback store** (`application/problem+json`, `code: service_unavailable`): the operation needs a capability that is not configured on this instance — semantic search and similar records require an embedding model.

## Changes

- **2026-09-09** `b127aa22f81c`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/formbricks/apis/formbricks-api-v3/changes/api/v3/feedbackRecords/delete.md)

---

[API](https://skmtc.dev/formbricks/apis/formbricks-api-v3.md) - [All operations](https://skmtc.dev/formbricks/apis/formbricks-api-v3/llms.txt) - [OpenAPI document](https://skmtc.dev/formbricks/apis/formbricks-api-v3/revisions/25335c959a13?raw)
