---
title: "Delete feedback records by user ID"
method: DELETE
path: "/v1/feedback-records"
tags: ["Feedback Records"]
---

# Delete feedback records by user ID

`DELETE /v1/feedback-records`

Permanently deletes feedback record data points for the specified user_id/data subject.
Omit tenant_id to delete that user_id across all tenants for GDPR Article 17 (Right to Erasure)
requests. Provide tenant_id to restrict deletion to that tenant only. Derived embeddings for deleted
feedback records are removed by database cascade. The operation is idempotent; repeated calls return
deleted_count 0 after matching records have already been deleted.

## Query parameters

- `user_id` string, required — Delete records matching this user ID (required). NULL bytes not allowed.
- `tenant_id` string — Optional tenant scope. Omit this parameter to delete all records matching user_id across tenants; provide it to delete only records for this tenant. Empty strings and NULL bytes are not allowed.

## Response `200`

OK

- DeleteFeedbackRecordsByUserOutputBody
  - `deleted_count` integer, required — Number of records deleted
  - `message` string, required — Human-readable status message

## Other responses

- `400` — Bad Request (e.g. validation error on query parameters)
- `409` — Conflict (code `tenant_write_conflict`) – the erasure could not be serialized: either a tenant data purge is in progress for a tenant holding records for this user, or the user's records changed mid-deletion (drift guard). No records were deleted. The conflict is transient; retry the request.
- `default` — Error

## Changes

> 35 revisions in range; 4 could not be searched.

- **2026-06-26** `17c77a1a3031` — 3 warning
  - added the new `content_too_large` enum value to the `code` response property for the response status `400`
  - added the new `content_too_large` enum value to the `code` response property for the response status `409`
  - added the new `content_too_large` enum value to the `code` response property for the response status `default`
- **2026-06-16** `d2fa5d9f2e98` — 2 warning, 1 info
  - added the new `tenant_write_conflict` enum value to the `code` response property for the response status `400`
  - added the new `tenant_write_conflict` enum value to the `code` response property for the response status `default`
  - added the non-success response with the status `409`
- **2026-06-03** `6907a0a9de00` — 2 breaking, 2 warning, 12 info
  - the `instance` response's property type/format changed from `string`/`uri` to `string`/`` for status `400`
  - the `instance` response's property type/format changed from `string`/`uri` to `string`/`` for status `default`
  - removed the optional property `errors` from the response with the `400` status
  - removed the optional property `errors` from the response with the `default` status
  - …12 more
- …earlier changes not shown

[Full history](https://skmtc.dev/formbricks/apis/formbricks-hub-api/changes/v1/feedback-records/delete.md)

---

[API](https://skmtc.dev/formbricks/apis/formbricks-hub-api.md) · [All operations](https://skmtc.dev/formbricks/apis/formbricks-hub-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/formbricks/formbricks-hub-api/revisions/84bba639c72b/schema)
