The Feedback Record schema
Every record has the following fields. Required fields must be mapped by every source.
The right
value_* field is set based on field_type. For example a nps field uses value_number, an open-text comment uses value_text.
Metadata on survey records
Records created from a survey response carry the context of that response on every record of the submission, so you can group and segment by it later:- Flat keys for the response itself:
source,url,browser,os,device,country,action,finished,duration_seconds,ending_idandsurvey_type. - A nested
embedded_dataobject holding the response’s Embedded Data, keyed by field name.
embedded_data, so do not assume every field appears on every record:
- The value is missing on that response, or does not match the field’s type, and the field has no default value. A field with a default falls back to it rather than going missing.
- Two fields share a name. Only one is published: an ingested field wins over a computed one, and between two of the same source, the one declared first. The winner keeps the name even when it has no value on that response, so the other field does not take its place.
embedded_datais capped at 8 KiB, measured as its serialized JSON. Once a response’s fields reach it, any further field that does not fit is skipped while smaller ones still publish — so a field may be present on some responses and absent on others.- The field is named
__proto__. Readers of the record, the record drawer among them, cannot keep a key with that name, so it is not published.
metadata is returned with a record but is not filterable or searchable through the API, so narrowing by a metadata value means fetching and filtering on your side.Viewing and managing records
Inside a workspace, navigate to Analyze → Feedback Data → Feedback Records. You’ll see the latest records across every dataset the workspace has access to, sorted bycollected_at.
From the table you can:
- Filter by dataset, source, field type, or date range.
- Open a record drawer to see the full field set and metadata.
- Edit values inline for cleanup (e.g. relabel a categorical answer).
- Delete a record.
- Add a record manually via the ”+ Add” button.
Idempotent imports
Sources that re-ingest data (CSV uploads, API ingestions) usesubmission_id as the dedup key. Re-importing the same submission_id updates the existing record instead of creating a duplicate.