Skip to content

Submit user feedback

POST
/v1/feedback

Submits free-text feedback, on every plan (Free: 50 a month per project). It is classified into one of bug | feature_request | praise | billing | support (uncategorised when it cannot): by an AI model with a one-line summary on Indie and up, within the plan’s monthly AI allowance, and otherwise by a keyword matcher with no summary. Routing to configured destinations (email, Slack, Linear, GitHub) happens before the response.

A category_hint is the category the person chose (the widget’s type picker, a “Report a bug” button): the keyword matcher takes it as the answer with confidence 1, and the AI model weighs it but may decide otherwise. Optional rating is a whole number from 1 to 5. Optional browser (family and major version, such as Safari 17) and device (desktop, mobile or tablet) are stored as sent; the pattern refuses anything longer, so a raw user agent cannot be stored.

Auth: Publishable key (nv_pub_live_*), browser-safe. No backend proxy needed.

CORS: Access-Control-Allow-Origin: *.

object
feedback_text
required
string
>= 10 characters <= 5000 characters
user_id
string
>= 1 characters <= 256 characters
email
string format: email
<= 254 characters /^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/
page_url
string format: uri
<= 2048 characters
category_hint
string
Allowed values: bug feature_request praise billing support
rating
Any of:
integer
>= 1 <= 5
browser
Any of:
string
<= 32 characters /^[A-Za-z][A-Za-z ]{0,23}(?: \d{1,4})?$/
device
Any of:
string
Allowed values: desktop mobile tablet
changelog_entry_id
Any of:
string
>= 4 characters <= 64 characters

Feedback stored, classified and routed.

object
data
required
object
feedback_id
required
string
/^fb_[0-9A-HJKMNP-TV-Z]{26}$/
classification
required
string
Allowed values: bug feature_request praise billing support uncategorised
confidence
required
number
<= 1
summary
required
Any of:
string
category_hint_used
required
boolean
email
required
Any of:
string format: email
/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/
status
required
string
feedback_text
string
user_id
Any of:
string
page_url
Any of:
string
rating
Any of:
integer
>= 1 <= 5
browser
Any of:
string
device
Any of:
string
linked_entry_id
Any of:
string
shipped_notified_at
Any of:
string
changelog_entry_id
Any of:
string
routed_to
required
Array<string>
Allowed values: email linear github slack
routing_results
required
object
key
additional properties
object
status
required
string
Allowed values: success failed
destination
required
string
Allowed values: email linear github slack
reason
string
detail
string
retry_after
Any of:
integer
>= -9007199254740991 <= 9007199254740991
issue_id
string
issue_number
integer
>= -9007199254740991 <= 9007199254740991
url
string format: uri
message_id
string
http_status
integer
>= -9007199254740991 <= 9007199254740991
created_at
required
string format: date-time
/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$/
error
required
null
meta
object
key
additional properties

Error envelope. See error.code for the discriminator.

object
data
required
null
error
required
object
code
required
string
message
required
string
remediation
required
string
doc_url
string format: uri
param
string
request_id
string
meta
object
key
additional properties

Error envelope. See error.code for the discriminator.

object
data
required
null
error
required
object
code
required
string
message
required
string
remediation
required
string
doc_url
string format: uri
param
string
request_id
string
meta
object
key
additional properties