Skip to main content

Feedback API

Submit in-app product feedback from the dashboard Feedback dialog Base path: /api/v1/feedback Endpoint count: 1

title: “Deliver feedback from the dialog” description: “What happens when the dashboard Feedback dialog posts here, and what the delivery confirmation tells the caller.”

Deliver feedback from the dialog

The dashboard’s Feedback dialog posts every in-app product note here. The dialog’s three categories (idea, issue, other) and free-text message travel as JSON, and two optional fields carry the reading context: pagePath (the screen the customer was on) and locale (the active dashboard language). Your API key identifies the submitter; the endpoint resolves their name and organization so the reply routed to the Devotel feedback inbox reads as a person, not an anonymous log line. The message is dispatched as a transactional email with the submitter’s address set as reply-to, and the response carries a delivered flag so the dialog renders the right confirmation.
delivered: false means transactional email is not configured on the account — the dashboard falls back to a copy / mail-client hand-off instead of claiming a delivery that never happened. Either way the same [ data, meta ] envelope holds.

Submit product feedback

POST /api/v1/feedback
Deliver in-app product feedback from the dashboard Feedback dialog. The authenticated submitter’s message is dispatched as a transactional email to the Devotel feedback inbox (with the submitter’s address set as reply-to) and a delivery confirmation is returned. Body: category (idea | issue | other), message, and optional pagePath + locale. Responds { delivered: true } when the email was sent (or durably queued for retry) and { delivered: false } when transactional email is not configured, so the dashboard can fall back to its copy / mailto hand-off.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
string (enum: idea|issue|other)
required
Feedback category shown in the dialog’s selector — idea for a suggestion, issue for something not working, or other for general feedback.
string
required
The free-text feedback message (1–4000 characters).
string
Dashboard page the feedback was sent from (e.g. /contacts), up to 512 characters. Included as context in the feedback email.
string
Active dashboard locale (e.g. en), up to 32 characters. Included as context in the feedback email.