Usertick
Developers

Build on your feedback with an API, webhooks and MCP

Pull responses and metrics into your own systems, react the moment feedback arrives and let the AI assistant your team already uses work with your data. You can drive the widget from your own code, too.

Ways to build on your feedback

MCP serverLet Claude, ChatGPT, Cursor and other assistants read and act on your feedback.
REST APIPull responses and metrics, update answers and erase a person's data from your code.
WebhooksGet each event at your endpoint the moment it happens, signed and logged.
Widget APITell the widget who is signed in, start surveys from your events and react to them.

Your feedback, inside your AI assistant

Claude, ChatGPT, Cursor, VS Code and other assistants read and act on your feedback through the Usertick MCP server, with each person signed in to their own account.

Work with your feedback from the chat

Ask for this week’s NPS, pull the responses behind a theme, add a note or update a status without leaving your assistant. Usertick adds no model of its own. Starter and above.

OAuth sign-in for every person

Each person signs in, picks one organization and chooses the access to grant. The assistant can never go beyond that person’s role, and no API key changes hands.

One address for every assistant

Add https://mcp.usertick.com/mcp to the assistant, and it asks you to sign in the first time it connects. There is no key to copy or keep safe.

Connect the assistant you already use

Settings › Developers shows the steps for each one, and every person connects with their own sign-in.

ClaudeAdd it as a custom connector

In Claude, open Settings, then Connectors, and add a custom connector with the server's address.

ChatGPTAdd it as a custom MCP server

In ChatGPT, open Plugins, select the plus button, then Add custom MCP server, and enter the address with OAuth.

Claude CodeQuick setup with claude mcp add

Run one command in your terminal, then sign in when Claude Code first connects.

claude mcp add --transport http usertick https://mcp.usertick.com/mcp
CursorQuick setup with a Cursor install link

Open the install link from Settings, or add the server to mcpServers in Cursor's MCP settings.

VS CodeQuick setup with a VS Code install link

Open the install link from Settings, or add the server to your MCP configuration as an http server.

Gemini CLIQuick setup with gemini mcp add

Run one command in your terminal, then sign in when Gemini CLI first connects.

gemini mcp add --transport http usertick https://mcp.usertick.com/mcp
WindsurfSetup through the mcp-remote bridge

Add the server through mcp-remote, which handles the sign-in for Windsurf.

npx -y mcp-remote https://mcp.usertick.com/mcp

When an assistant first connects, Usertick asks you to sign in, pick the organization and choose what the assistant may do. Then you allow access.

Ask in plain words

The assistant picks the Usertick tools it needs and answers from your own data.

How a survey is doing

Ask for a survey's NPS, and the assistant reads the score, the number of answers and the share of detractors for the period you name, beside the period before.

The answers behind a theme

Ask which themes grew, and it reads the themes the AI sorted answers into and the answers under the one that grew, so you see the comments behind the number.

Triage from the chat

Ask it to set a status, assign a teammate or leave a note, and the change shows in the inbox under your name, recorded as made through the assistant.

A deletion request

Ask it to erase everything one person sent, and it starts the erasure, checks the job and tells you what was removed. The erase tools tell it to confirm with you first.

What the assistant can do

Each tool needs the access you allowed, and every tool tells the assistant whether it only reads or makes a change.

Surveys

Makes changes

Lists your surveys by status, site or channel, and your sites. Pauses a published survey or resumes it.

list_surveyslist_sitespause_surveyresume_survey

Responses

Makes changes

Finds responses by survey, email or user ID, status, type, urgency, theme, category, sentiment and time, and reads the newest ones. Changes a response's status, type, urgency or assignees.

list_responsesget_recent_responseslist_themeslist_membersupdate_response

Notes

Makes changes

Reads the team notes on a response, adds one, and edits or deletes the notes the assistant wrote.

list_response_notesadd_response_noteupdate_response_notedelete_response_note

Metrics

Reads

Reads counts, scores and breakdowns over a time window, for one survey or every survey.

get_metrics

Webhooks

Makes changes

Subscribes an https address to an event, and lists, resends or ends the deliveries of the subscriptions the assistant made.

list_webhookssubscribe_webhookunsubscribe_webhooklist_webhook_deliveriesresend_webhook_delivery

Erasure

Makes changes

Erases one response, or everything one person sent by email or user ID, in the background, and checks how far the job got.

delete_responseerase_respondentget_job

Connection

Reads

Shows the organization, the member the assistant acts for, the access it was given and its rate limits.

test_auth

The assistant can't create, edit or publish surveys, manage members, keys or contacts, export data or open the files people attached. Usertick adds no model of its own: the assistant you use does the reading.

A REST API for your own systems

Read surveys, responses and metrics, update answers and erase a person's data with a key that carries only the access you give it.

  1. 01Create a key in Settings › Developers › API keys, with only the scopes it needs and the day it expires
  2. 02Send it as a Bearer token to https://app.usertick.com/api/public/v1
  3. 03Page through any list with nextCursor, up to 100 items at a time
  4. 04Retry a POST with the same Idempotency-Key, and it runs only once
Urgent responses, newest first
Terminal
$ curl -G https://app.usertick.com/api/public/v1/responses \
-d urgency=high -d limit=25 \
-H "Authorization: Bearer utk_live_3f9a…"
{
"data": [{ "id": "3f2a9c1e…", "status": "open",
"ai": { "type": "bug", "urgency": "high" } }],
"nextCursor": "eyJ0IjoxNz…"
}

Endpoints and scopes

Every endpoint needs one scope, and a key carries only the scopes you gave it.

GET /meThe organization, the member and the access of the key you sent
GET /surveys, /surveys/{id}, /sitesSurveys with their questions, and your sites, with surveys:read
POST /surveys/{id}/pause, /resumeStops or restarts a published survey, with surveys:write
GET /responses, /responses/recent, /responses/{id}Responses with every inbox filter and their AI analysis, with responses:read
PATCH /responses/{id}Changes the status, type, urgency or assignees, with responses:write
/responses/{id}/comments, /comments/{id}Reads, adds, edits and deletes team notes, with responses:write
GET /responses/{id}/attachments/{id}A file the person added, through a link that works for 5 minutes
GET /themes, /membersThe themes the AI sorts answers into, and the members to assign
GET /metrics/summary, /timeseries, /breakdownCounts, scores and breakdowns over a window, with analytics:read
/webhooks, /webhooks/subscribe, /webhooks/{id}/deliveriesWebhook subscriptions and their deliveries, with webhooks:read and webhooks:write
DELETE /responses/{id}, POST /responses/erase, GET /jobs/{id}Erases a response or everything one person sent, and follows the job, with responses:delete
surveys:readRead surveys
surveys:writePause and resume surveys
responses:readRead responses
responses:writeUpdate responses
responses:deleteDelete responses
analytics:readRead metrics
webhooks:readRead webhooks
webhooks:writeManage webhooks

The details developers ask about

Keys you control

Choose when a key expires, change its scopes while it is live, and rotate it with 24 hours of overlap. Each key shows 30 days of usage.

One error shape

Every error has a status, a code and a message, and a validation error lists each field. Every answer carries an X-Request-Id you can trace.

Cursor pagination

Page through any list up to 100 items at a time, with a cursor for the next page.

Safe to retry

Retry a POST with the same idempotency key and it runs only once. Every answer carries a request ID you can trace.

A stable /v1

Changes to /v1 only add, and you get 6 months’ notice before anything is retired.

Erasure on request

Act on a deletion request with one call: erase a response, or everything one person sent, including AI readings, notes and files.

Rate limits

120 requests a minute per key and 600 per organization on Pro, and 300 and 1,500 on Business. The MCP server allows 120 a minute.

npm package

Install the widget from npm as @usertick/snippet, with samples for React, Next.js, Vue, Svelte and more.

Plans

Webhooks come with every plan, the MCP server with Starter and above, and the REST API with Pro and above. Identity verification is on every plan.

Events the moment they happen

Webhooks push each event to your endpoint, signed so you can trust it and logged so you can trace it.

Only the events you care about

Choose the events, such as a new response, a finished AI reading or a spiking theme, and narrow them by type, urgency or theme. Every request is signed to the Standard Webhooks spec, and the delivery log keeps each request with your endpoint’s answer.

response.createdSomeone answered a survey
response.analyzedThe AI read the answer, with its type, urgency, theme and sentiment
response.urgentAn answer turned urgent, once for each answer
response.status_changedSomeone moved the answer, with the old status, the new one and who changed it
response.classification_correctedA teammate corrected the AI reading
theme.spikingA theme grew faster than usual

A widget your code can steer

Tell the widget who is signed in, start a survey from your own event and react when one opens, closes or is sent.

Start surveys from your code

Call Usertick.trigger with your event's name, and the surveys that wait for it open when their other conditions match.

Know who answered

Sign each user ID on your server so Usertick can tell real users from forged ones. Monitor logs identities that don't check out, and Enforced drops them while keeping the answers.

Usertick.init({ site_id })Starts the widget with your site's key
Usertick.identify(userId, traits, { hash })Says who is signed in, with up to 50 traits and the hash that proves it
Usertick.trigger(name, payload)Sends your own event to the surveys that wait for it
Usertick.show(), Usertick.hide()Opens or closes the survey on the page
Usertick.on(event, callback)Runs your code on open, close, submit and error, and returns a function that stops it
Usertick.logout(), Usertick.reset()Forgets the signed-in person, or everything the widget stored in the browser

Add the script tag, or install @usertick/snippet from npm, with setup for these frameworks:

ReactNext.jsVueSvelteNuxtAngularAstroRemixGatsby

Sign user IDs with examples in these server languages:

Node.jsPythonPHPRubyGoJava.NET

Frequently asked questions

Pro and Business, with API keys. On Free and Starter, an approved app such as Zapier reaches the API, and from Starter an AI assistant can too, through the MCP server. Webhooks are on every plan.

They follow the Standard Webhooks spec: each request carries an ID, a timestamp and an HMAC-SHA256 signature made with your endpoint’s secret, so a Standard Webhooks library can verify it. When you rotate the secret, the old one keeps signing for 24 hours.

Usertick tries again five times over about seven hours and tells your team when failures repeat. If they continue, sending pauses and up to 1,000 events wait 7 days for you to resume.

No. Each person signs in with OAuth and picks one organization. Reading is selected for them, and changing answers, deleting and webhooks are theirs to allow, one by one. The assistant can never do more than that person's role allows.

Any assistant that connects to remote MCP servers with a sign-in. Settings shows the steps for Claude, ChatGPT, Claude Code, Cursor, VS Code and Gemini CLI, and for Windsurf through the mcp-remote bridge.

Only if you allow Delete responses when you connect it. The erase tools tell the assistant to confirm with you first, and the erasure runs in the background, as it does through the API.

It can't create, edit or publish surveys, manage members, keys or contacts, export data or open the files people attached. It edits only the notes it wrote and sees only the webhooks it set up.

Yes. Each change is recorded as made by you through the assistant, and the erase tools tell the assistant to confirm with you before it erases anything.

No. Each connection reaches the one organization you picked. A role that reaches only some surveys can't connect an assistant.

Settings › Security lists the assistants connected to your account, and removing one ends its access at once. To change what an assistant may do, connect it again and choose its access anew.

Yes, when two-step verification is on for your account: approving the connection asks for your code.

The widget ships as one plain JavaScript package, @usertick/snippet, without TypeScript types. The REST API is documented endpoint by endpoint, with examples.

Yes. Erase one response, or everything one person sent, found by their email or user ID. The erasure runs in the background and also removes AI readings, notes, workflow runs and files.

Listen better, act faster, and build what truly matters.

Start free, see what your customers mean, and get each answer to the person who can act on it.

  • 150 responses a month on Free
  • Every channel and AI analysis
  • No card needed