---
title: "Create a new feedback record"
method: POST
path: "/v1/feedback-records"
tags: ["Feedback Records"]
---

# Create a new feedback record

`POST /v1/feedback-records`

Creates a new feedback record data point

## Request body

- CreateFeedbackRecordInputBody
  - `collected_at` string, date-time — When the feedback was collected (defaults to now). Must be between 1970-01-01 and 2080-12-31.
  - `field_id` string, required — Identifier for the question/field. NULL bytes not allowed.
  - `field_label` string, nullable — The actual question text
  - `field_group_id` string — Stable identifier grouping related fields (for ranking, matrix, grid questions). NULL bytes not allowed.
  - `field_group_label` string, nullable — Human-readable question text for the group
  - `field_type` 'text' | 'categorical' | 'nps' | 'csat' | 'ces' | 'rating' | 'number' | 'boolean' | 'date', required — Field type: text (enrichable), categorical, nps, csat, ces, rating, number, boolean, date
  - `language` string — ISO language code. NULL bytes not allowed.
  - `metadata` object — User agent, device, location, referrer, tags, etc. NULL bytes (\x00 or \u0000) are not allowed in JSON keys or values.
  - `source_id` string, nullable — Reference to survey/form/ticket ID
  - `source_name` string, nullable — Human-readable name
  - `source_type` string, required — Type of feedback source (e.g., survey, review, feedback_form). NULL bytes not allowed.
  - `submission_id` string, required — Identifier for the logical submission this record belongs to (tenant-scoped). Required. Enables grouping multi-field submissions and idempotent ingestion. Unique per (tenant_id, submission_id, field_id). If a record has no logical submission, use e.g. field_id.
  - `tenant_id` string, required — Tenant/organization identifier for multi-tenancy. Required.
  - `user_id` string — User ID (e.g., anonymous ID or email hash)
  - `value_boolean` boolean — For yes/no questions
  - `value_date` string, date-time — For date responses. Must be between 1970-01-01 and 2080-12-31.
  - `value_number` number, double — For ratings, NPS scores, numeric responses. Must be between -1e15 and +1e15.
  - `value_text` string, nullable — For open-ended text responses. Omit or null if not applicable. NULL bytes not allowed when present.

## Response `201`

Created

- FeedbackRecordData
  - `collected_at` string, date-time, required — When the feedback was collected
  - `created_at` string, date-time, required — When this record was created
  - `field_id` string, required — Identifier for the question/field
  - `field_label` string — The actual question text
  - `field_group_id` string — Stable identifier grouping related fields (for ranking, matrix, grid questions)
  - `field_group_label` string — Human-readable question text for the group
  - `field_type` 'text' | 'categorical' | 'nps' | 'csat' | 'ces' | 'rating' | 'number' | 'boolean' | 'date', required — Type of field
  - `id` string, uuid, required — UUIDv7 primary key
  - `language` string — ISO language code. NULL bytes not allowed.
  - `metadata` object — Additional context
  - `source_id` string — Reference to survey/form/ticket ID
  - `source_name` string — Human-readable name
  - `source_type` string, required — Type of feedback source
  - `submission_id` string, required — Identifier for the logical submission this record belongs to (required).
  - `tenant_id` string, required — Tenant/organization identifier. NULL bytes not allowed.
  - `updated_at` string, date-time, required — When this record was last updated
  - `user_id` string — User ID (e.g., anonymous ID or email hash)
  - `value_boolean` boolean — Boolean response
  - `value_date` string, date-time — Date response
  - `value_number` number, double — Numeric response
  - `value_text` string — Text response. NULL bytes not allowed.

## Other responses

- `400` — Bad Request (e.g. validation error)
- `409` — Conflict – a feedback record with the same tenant_id, submission_id, and field_id already exists (idempotent create).
- `default` — Error

## Changes

- **2026-04-30** `2fe8dc460c4d` — 3 info
  - the `type` response's property default value `about:blank` was removed for the status `400`
  - the `type` response's property default value `about:blank` was removed for the status `409`
  - the `type` response's property default value `about:blank` was removed for the status `default`
- **2026-04-27** `af1436caa1b4` — 2 warning, 2 info
  - removed the request property `user_identifier`
  - removed the optional property `user_identifier` from the response with the `201` status
  - added the new optional request property `user_id`
  - added the optional property `user_id` to the response with the `201` status
- **2026-03-09** `a1a6593d3612` — 4 info
  - the request property `field_group_label` became nullable
  - the request property `field_label` became nullable
  - the request property `source_id` became nullable
  - the request property `source_name` became nullable
- **2026-03-05** `7af2577fe592` — 1 breaking, 1 info
  - the request property `value_text` became not nullable
  - added the non-success response with the status `400`
- **2026-03-04** `b3611442ba19` — 2 breaking, 2 info
  - the request property `tenant_id` became required
  - the `tenant_id` request property's minLength was increased from `0` to `1`
  - the request property `value_text` became nullable
  - the response property `tenant_id` became required for the status `201`

[Full history](https://skmtc.dev/formbricks/apis/formbricks-hub-api/changes/v1/feedback-records/post.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/2fe8dc460c4d/schema)
