Skip to main content
POST
Submit a signal

Authorizations

X-API-Key
string
header
required

Body

application/json

Payload to submit a new signal (consumer-facing).

gtin
string
required

GTIN of the product the signal is about, from the resolution context.

category
string
required

Category code the consumer picked (e.g. quality_issue). Must be a known signal-category code — stable and language-independent, never a translated label.

body
string
default:""

Freeform feedback text. May be empty for a voice-only signal.

sentiment
string | null

Optional consumer-declared sentiment code (positive / neutral / negative). Omit or null if the consumer declined — Closient never infers sentiment.

batch
string | null

Optional batch/lot identifier (GS1 AI 10) from the scan; matched to a known lot of the product.

voice_session_id
string<shortuuid> | null

URL-safe 22-character shortuuid encoding of the row's UUID primary key. Stable across the row's lifetime; suitable for sharing in URLs, log lines, and external SDK clients. Accepted on input as either the shortuuid form or the canonical UUID form (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).

Required string length: 22
Pattern: ^[23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{22}$

Explicit opt-in to be contacted by the brand about this feedback.

contact_email
string | null

Email address the consumer agrees to be contacted at. Must be one of the consumer's own verified account email addresses. Required-shaped only when contact_consent is true.

Response

Created

A signal as the consumer (submitter) sees it.

Carries the full set of consumer-owned fields. category and sentiment are stable codes, never labels. Identifier context (gtin / batch / serial) is surfaced as the human-facing identifier string, not the internal row id.

id
string<shortuuid>
required

Public short-UUID identifier of the signal.

Required string length: 22
Pattern: ^[23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{22}$
gtin
string
required

GTIN of the product this signal is about (the product's GTIN-14 string).

category
string
required

Consumer-picked category as a stable, language-independent code (e.g. quality_issue, packaging_problem). Never a translated label — translation is display-side only.

body
string
required

Freeform feedback text the consumer wrote (may be empty for voice-only signals).

status
string
required

Lifecycle code: active or revoked.

Whether the consumer opted in to be contacted by the brand about this feedback.

has_voice
boolean
required

True when a voice capture session backs this signal (audio handled out-of-band; not exposed here).

created
string<date-time>
required

ISO-8601 timestamp the signal was submitted.

modified
string<date-time>
required

ISO-8601 timestamp the signal was last modified.

batch
string | null

Batch/lot identifier (GS1 AI 10) carried from the scan context, or null if the scan carried none.

serial
string | null

Serialized-unit context carried from the scan, or null. Currently the linked serial pool's public id when a serialized scan was wired through; bare-API submissions leave this null (serial linkage is set by the scan/voice pipeline, C-3314).

sentiment
string | null

Optional consumer-declared sentiment as a stable code (positive / neutral / negative), or null if the consumer declined to declare one. Never inferred by Closient.