Feedback Records

Count feedback records

Returns the total number of feedback records matching the given filters. Supports the same query parameters as the list endpoint.

get/v1/feedback-records/count

Query parameters

tenant_idstring required

Tenant ID (required for isolation). NULL bytes not allowed.

Example:org-123

Tenant ID (required for isolation). NULL bytes not allowed.

submission_idstring[]

Filter by submission ID to group records belonging to one logical submission. Repeat the parameter to match any of several submissions; the values are OR-ed, and a single occurrence behaves exactly as it always has. Comma-separated values are NOT split. NULL bytes not allowed.

[
  "550e8400-e29b-41d4-a716-446655440000"
]
source_typestring[]

Filter by source type. Repeat the parameter to match any of several source types; the values are OR-ed. NULL bytes not allowed.

[
  "survey",
  "review"
]
source_idstring[]

Filter by source ID. Repeat the parameter to match any of several sources; the values are OR-ed. NULL bytes not allowed.

[
  "survey-123"
]
field_idstring[]

Filter by field ID — every answer to one question. Repeat the parameter to match any of several fields; the values are OR-ed. NULL bytes not allowed.

[
  "q1"
]
field_group_idstring[]

Filter by field group ID (for ranking/matrix questions). Repeat the parameter to match any of several groups; the values are OR-ed. NULL bytes not allowed.

[
  "feature_priority"
]
field_typeFieldType[]

Filter by field type. Repeat the parameter to match any of several types; the values are OR-ed. An empty value is ignored rather than rejected, so ?field_type= is the same as omitting the filter.

[
  "text",
  "rating"
]
value_idstring[]

Filter by the source system's stable option id (e.g. all records for one survey choice). Repeat the parameter to match any of several options; the values are OR-ed. NULL bytes not allowed.

[
  "opt_very_satisfied"
]
user_idstring[]

Filter by end-user identifier — everything one person submitted. Repeat the parameter to match any of several users; the values are OR-ed. NULL bytes not allowed.

[
  "user-abc-123"
]
source_namestring[]

Filter by source display name — the human-readable label stored alongside source_id. Prefer source_id where the records carry one: a name can be edited or translated, while the id is stable. Repeat the parameter to match any of several names; the values are OR-ed. NULL bytes not allowed.

[
  "After match survey"
]
languagestring[]

Filter by the language the feedback was given in. Repeat the parameter to match any of several languages; the values are OR-ed. NULL bytes not allowed.

[
  "en",
  "ar"
]
sincestring date-time

Filter by collected_at >= since (ISO 8601 format). Must be between 1970-01-01 and 2080-12-31.

Example:2024-01-01T00:00:00Z

Filter by collected_at >= since (ISO 8601 format). Must be between 1970-01-01 and 2080-12-31.

untilstring date-time

Filter by collected_at <= until (ISO 8601 format). Must be between 1970-01-01 and 2080-12-31.

Example:2024-12-31T23:59:59Z

Filter by collected_at <= until (ISO 8601 format). Must be between 1970-01-01 and 2080-12-31.

created_sincestring date-time
Example:2026-01-01T00:00:00Z

Filter by created_at >= created_since (ISO 8601, inclusive). created_at is when Hub stored the record; collected_at (see since) is when the feedback was given. They diverge on a historical re-import, so this is the parameter for "what did this import bring in". Must be between 1970-01-01 and 2080-12-31.

created_untilstring date-time
Example:2026-12-31T00:00:00Z

Filter by created_at <= created_until (ISO 8601, inclusive). See created_since for how created_at differs from collected_at. Must be between 1970-01-01 and 2080-12-31.

value_number_minnumber double
Example:9

Filter by value_number >= value_number_min (inclusive) — e.g. NPS promoters with value_number_min=9. Records whose value_number is NULL (every non-numeric answer) are excluded, so this is never a no-op filter.

value_number_maxnumber double
Example:10

Filter by value_number <= value_number_max (inclusive). Paired with value_number_min it selects a band: 9..10 is the NPS promoters, 0..6 the detractors. Records whose value_number is NULL are excluded. Supplying a max below the min is a 400, not an empty result.

value_date_minstring date-time
Example:2026-01-01T00:00:00Z

Filter by value_date >= value_date_min (ISO 8601, inclusive) — bounds the answer to a date question, not when the feedback was collected. Records whose value_date is NULL are excluded.

value_date_maxstring date-time
Example:2026-12-31T00:00:00Z

Filter by value_date <= value_date_max (ISO 8601, inclusive). Records whose value_date is NULL are excluded.

sentimentSentimentValue[]

Filter by sentiment label. Repeat the parameter to match any of several labels (?sentiment=negative&sentiment=very_negative); the values are OR-ed. An empty value is ignored rather than rejected, so ?sentiment= is the same as omitting the filter. Records that have not been enriched carry no sentiment and are therefore never matched — use has_sentiment=false to find them.

[
  "negative",
  "very_negative"
]
emotionsEmotionValue[]

Filter by emotion label. Repeat the parameter to match ANY of the listed emotions: a record tagged {joy} and a record tagged {joy, anger} both match ?emotions=joy&emotions=anger. There is no "must carry all of them" form. An empty value is ignored rather than rejected, so ?emotions= is the same as omitting the filter.

[
  "anger",
  "fear"
]
sentiment_score_minnumber double
Example:-0.5

Filter by sentiment_score >= sentiment_score_min (inclusive). The score is continuous where the label is bucketed, so this is the parameter for "the most negative feedback". Records that have not been enriched are excluded.

sentiment_score_maxnumber double
Example:0.5

Filter by sentiment_score <= sentiment_score_max (inclusive). Records that have not been enriched are excluded.

has_sentimentboolean
Example:true

Filter on whether sentiment enrichment has produced a label: true selects records where sentiment IS NOT NULL, false selects those where it IS NULL. Omit for no constraint.

has_emotionsboolean
Example:true

Filter on whether the record carries emotion labels: true selects records where emotions IS NOT NULL, false selects those where it IS NULL. Note that false covers both "not yet classified" and "classified, no emotion detected" — the two are indistinguishable here. Omit for no constraint.

has_translationboolean

Filter on whether the record has been translated: true selects records where translation_lang_key IS NOT NULL, false selects those where it IS NULL. Omit for no constraint.

Response

OK

countinteger required

Number of feedback records matching the filters

Example response

{
  "count": 42
}

Changes