API reference
Every endpoint in the FeedbackDots REST API, generated from the OpenAPI spec at /api/v1/openapi.json.
Base URL https://feedbackdots.com/api/v1. Download the spec at /api/v1/openapi.json to generate a client or import it into Postman.
Workspace
The workspace an API key belongs to.
Get the current workspace
GET /me
Returns the workspace and API key used for the request. Handy for checking a key.
curl https://feedbackdots.com/api/v1/me \ -H "Authorization: Bearer $FEEDBACKDOTS_API_KEY"
Returns 200 with a Workspace. Errors: 401.
Projects
Sites and apps that have the widget installed.
List projects
GET /projects
Parameters
limit | integer · query | How many items to return, from 1 to 100. Default 25. 1 to 100. |
cursor | string · query | The `next_cursor` from the previous page. |
curl https://feedbackdots.com/api/v1/projects \ -H "Authorization: Bearer $FEEDBACKDOTS_API_KEY"
Returns 200 with a list of Project objects. Errors: 400, 401.
Get a project
GET /projects/{id}
Parameters
idrequired | string (uuid) · path | The project ID. |
curl https://feedbackdots.com/api/v1/projects/ID \ -H "Authorization: Bearer $FEEDBACKDOTS_API_KEY"
Returns 200 with a Project. Errors: 401, 404.
Reports
Bug reports and feedback, with the context the widget captured.
List reports
GET /reports
Newest first. Archived reports are left out unless `archived=true`.
Parameters
project_id | string (uuid) · query | Only items from this project. |
status | "Triage" | "In Progress" | "In Review" | "Done" · query | Only reports with this status. snake_case forms like `in_progress` also work. |
severity | "Blocker" | "High" | "Medium" | "Low" · query | Only reports with this severity. |
archived | boolean · query | Set to true to list archived reports instead. Default false. |
q | string · query | Search titles and descriptions. Up to 200 characters. |
limit | integer · query | How many items to return, from 1 to 100. Default 25. 1 to 100. |
cursor | string · query | The `next_cursor` from the previous page. |
curl https://feedbackdots.com/api/v1/reports \ -H "Authorization: Bearer $FEEDBACKDOTS_API_KEY"
Returns 200 with a list of Report objects. Errors: 400, 401.
Create a report
POST /reports
Adds a report as if it came from the widget: it is sent to the project’s Linear, Jira, GitHub and Slack, and fires the `report.created` webhook. Counts toward the plan’s monthly reports.
Body
project_idrequired | string (uuid) | |
titlerequired | string | Up to 240 characters. |
description | string | Up to 10000 characters. |
severity | "Blocker" | "High" | "Medium" | "Low" | Default "Medium". |
area | string | Default "General". Up to 80 characters. |
page_url | string (uri) | |
environment | string | Default "production". Up to 40 characters. |
build | string | Up to 120 characters. |
reporter_name | string | Defaults to the API key’s name. Up to 120 characters. |
reporter_email | string (email) |
curl -X POST https://feedbackdots.com/api/v1/reports \
-H "Authorization: Bearer $FEEDBACKDOTS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"project_id":"PROJECT_ID","title":"Checkout button does nothing"}'Returns 201 with a Report with its context. Errors: 400, 401, 402, 404, 409.
Get a report
GET /reports/{id}
Includes the captured context: a signed screenshot URL (valid for an hour), device details, console logs, pins and network requests.
Parameters
idrequired | string (uuid) · path | The report ID. |
curl https://feedbackdots.com/api/v1/reports/ID \ -H "Authorization: Bearer $FEEDBACKDOTS_API_KEY"
Returns 200 with a Report with its context. Errors: 401, 404.
Update a report
PATCH /reports/{id}
Changes only the fields you send. A status change syncs to connected trackers, emails the reporter when it moves to Done (if the project has that on) and fires `report.status_changed`.
Parameters
idrequired | string (uuid) · path | The report ID. |
Body
title | string | Up to 240 characters. |
description | string | Up to 10000 characters. |
status | "Triage" | "In Progress" | "In Review" | "Done" | |
severity | "Blocker" | "High" | "Medium" | "Low" | |
area | string | Up to 80 characters. |
archived | boolean |
curl -X PATCH https://feedbackdots.com/api/v1/reports/ID \
-H "Authorization: Bearer $FEEDBACKDOTS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"status":"Triage"}'Returns 200 with a Report with its context. Errors: 400, 401, 404.
Comments
Team discussion on a report.
List comments on a report
GET /reports/{id}/comments
Oldest first.
Parameters
idrequired | string (uuid) · path | The report ID. |
limit | integer · query | How many items to return, from 1 to 100. Default 25. 1 to 100. |
cursor | string · query | The `next_cursor` from the previous page. |
curl https://feedbackdots.com/api/v1/reports/ID/comments \ -H "Authorization: Bearer $FEEDBACKDOTS_API_KEY"
Returns 200 with a list of Comment objects. Errors: 400, 401, 404.
Comment on a report
POST /reports/{id}/comments
Fires the `comment.created` webhook.
Parameters
idrequired | string (uuid) · path | The report ID. |
Body
bodyrequired | string | Up to 4000 characters. |
author_name | string | Defaults to the API key’s name. Up to 200 characters. |
curl -X POST https://feedbackdots.com/api/v1/reports/ID/comments \
-H "Authorization: Bearer $FEEDBACKDOTS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"body":"Fixed in v2.3.1"}'Returns 201 with a Comment. Errors: 400, 401, 404.
Feature requests
Ideas people suggest and vote on.
List feature requests
GET /feature-requests
Parameters
project_id | string (uuid) · query | Only items from this project. |
status | "new" | "open" | "planned" | "in_progress" | "shipped" | "declined" · query | Only ideas with this status. |
sort | "votes" | "newest" · query | Most votes first, or newest first. Default "votes". |
limit | integer · query | How many items to return, from 1 to 100. Default 25. 1 to 100. |
cursor | string · query | The `next_cursor` from the previous page. |
curl https://feedbackdots.com/api/v1/feature-requests \ -H "Authorization: Bearer $FEEDBACKDOTS_API_KEY"
Returns 200 with a list of FeatureRequest objects. Errors: 400, 401.
Create a feature request
POST /feature-requests
Fires the `feature_request.created` webhook.
Body
project_idrequired | string (uuid) | |
titlerequired | string | Up to 160 characters. |
description | string | Up to 2000 characters. |
status | "new" | "open" | "planned" | "in_progress" | "shipped" | "declined" | Default "open". |
author_name | string | Up to 120 characters. |
author_email | string (email) |
curl -X POST https://feedbackdots.com/api/v1/feature-requests \
-H "Authorization: Bearer $FEEDBACKDOTS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"project_id":"PROJECT_ID","title":"Checkout button does nothing"}'Returns 201 with a FeatureRequest. Errors: 400, 401, 404, 409.
Get a feature request
GET /feature-requests/{id}
Parameters
idrequired | string (uuid) · path | The feature request ID. |
curl https://feedbackdots.com/api/v1/feature-requests/ID \ -H "Authorization: Bearer $FEEDBACKDOTS_API_KEY"
Returns 200 with a FeatureRequest. Errors: 401, 404.
Update a feature request
PATCH /feature-requests/{id}
A status change fires the `feature_request.status_changed` webhook.
Parameters
idrequired | string (uuid) · path | The feature request ID. |
Body
title | string | Up to 160 characters. |
description | string | Up to 2000 characters. |
status | "new" | "open" | "planned" | "in_progress" | "shipped" | "declined" |
curl -X PATCH https://feedbackdots.com/api/v1/feature-requests/ID \
-H "Authorization: Bearer $FEEDBACKDOTS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"status":"new"}'Returns 200 with a FeatureRequest. Errors: 400, 401, 404.
Objects
Workspace
objectrequired | "workspace" | |
idrequired | string (uuid) | |
namerequired | string | |
api_keyrequired | object |
Project
objectrequired | "project" | |
idrequired | string (uuid) | |
namerequired | string | |
customer | string | The client the project is for, if any. |
status | "Launching" | "On track" | "Stalled" | "On hold" | |
widget_public_keyrequired | string | The key the widget script uses. |
allowed_origins | string[] | |
widget_modes | "pin" | "feedback" | "markup" | "idea"[] | |
archivedrequired | boolean | |
created_atrequired | string (date-time) | |
updated_at | string (date-time) |
Report
objectrequired | "report" | |
idrequired | string (uuid) | |
project_idrequired | string (uuid) | |
titlerequired | string | Up to 240 characters. |
description | string | |
statusrequired | "Triage" | "In Progress" | "In Review" | "Done" | |
severityrequired | "Blocker" | "High" | "Medium" | "Low" | |
area | string | |
page_url | string | null | The page the report was sent from. |
route | string | |
environment | string | |
build | string | null | |
reporter | object | |
archived | boolean | |
has_screenshot | boolean | |
has_replay | boolean | |
issues | object | Issues created in connected trackers. |
dashboard_url | string (uri) | |
created_atrequired | string (date-time) | |
updated_at | string (date-time) |
ReportContext
screenshot_url | string | null | A signed link, valid for one hour. |
device | object | Browser, OS, viewport, language and timezone. |
console_logs | object[] | |
pins | object[] | Dots the reporter dropped on the page. |
network_requests | object[] | Request metadata, when the project captures it. URLs are redacted. |
Comment
objectrequired | "comment" | |
idrequired | string (uuid) | |
report_idrequired | string (uuid) | |
author_namerequired | string | |
bodyrequired | string | |
created_atrequired | string (date-time) |
FeatureRequest
objectrequired | "feature_request" | |
idrequired | string (uuid) | |
project_idrequired | string (uuid) | |
titlerequired | string | Up to 160 characters. |
description | string | |
statusrequired | "new" | "open" | "planned" | "in_progress" | "shipped" | "declined" | `new` ideas wait for review and are hidden from the public board, as are `declined` ones. |
votesrequired | integer | |
source | "widget" | "team" | "api" | |
author | object | |
page_url | string | null | |
created_atrequired | string (date-time) | |
updated_at | string (date-time) |
Error
errorrequired | object |