SDKREST APIAPI keysWebhooksMCP
Identify your users
Usertick.identify(userId, traits, { hash })is now sent with each response: the user id, the traits and an anonymous id for this browser. Nothing is sent before Submit. The site’s Send user identity with responses and the survey’s Anonymous responses turn it off. Identify your users.Usertick.logout()forgets the id, the traits and the token, and starts a new anonymous id.identify(null)now clears the traits too.- Identity verification. Your server computes a user hash, the HMAC-SHA256 of the user ID with your organization’s
utid_secret, once per user; it never expires. Verification has three modes (Off, Monitor and Enforced), the keys rotate with 24 hours of overlap, and the results say why a hash failed. The guide and Settings have server examples in Node.js, Python, PHP, Ruby, Go, Java and .NET, and Settings checks a user ID and its hash. Changing the mode or deleting a key asks for two-factor authentication, like creating a key. Verify your users. - Link surveys read the user from
uidanduhin the link, then remove both from the address bar. A reload of the same tab keeps them, and a link with a hash can be emailed or printed, because the hash never expires. Link surveys. - Console warnings name a hash passed as the bare third argument of
identify(), a hash that isn’t 64 hex characters and an options object that still carriestoken. - The site switch holds on the server. With Send user identity with responses off, Usertick drops an identity that reaches it from that site anyway.
- REST API and webhooks. The Response resource has
respondent, andcontactis the linked contact in webhook deliveries too.GET /responsestakesuserId, andPOST /responses/erasetakes{ "userId" }next to{ "email" }. The Response resource, Erase personal data. - Integrations name the person by your user id or the email, never the anonymous id. How a tool knows who answered.
REST API v1
The REST API now covers responses, surveys, metrics, erasure and webhooks. It replaces the earlier endpoints.- Base URL
https://app.usertick.com/api/public/v1. Replies are plain JSON. Lists are{ data, nextCursor }with alimitof 1 to 100. Pagination. - Responses: list with the inbox’s filters, including
updatedSincefor syncing, read one, change status, type, urgency and assignees, and read, add, edit and delete notes. Files download through short-lived links. Overview. - Surveys and more: list surveys, read one with its questions, pause and resume it, and list sites, members and the analysis tree.
- Metrics: counts, NPS, CSAT, CES and average scores, time series and breakdowns. Metrics.
- Erasure: erase one response, or everything one person sent, as a job you can follow. Erase personal data.
- One Response resource for API answers and webhook deliveries. The Response resource.
- Conventions: every error has a stable
code, plus anerrorslist for invalid fields. Every reply hasX-Request-Idand rate limit headers for the key and the organization. Every POST takes anIdempotency-Key. Changes within v1 are additive, and anything that will go away is announced six months ahead. Errors, Idempotency, Versioning. - API reference: every endpoint has its own page, with Try it on each one. The API reference.
- OAuth for approved apps, like Zapier: authorization code with PKCE, rotating refresh tokens and revocation. OAuth for apps.
- Removed:
GET /auth/test(useGET /me),GET /zapier/responses(useGET /responses/recent), the earlier response list (use the newGET /responses), and the publicGET /openapi.json(the API reference documents every endpoint).
API keys belong to the organization
A key keeps working when the person who made it leaves. Changes it makes show in the activity log as made through the key. Keys can expire and rotate with 24 hours of overlap, and Edit access changes what a live key can do from its next request. Each key shows a usage chart and its latest calls, and Show all opens its request log of the last 7 days with a Status filter. New scopes:surveys:read, surveys:write, responses:delete, analytics:read and webhooks:read. Authentication.Webhooks
- Deliveries are signed the Standard Webhooks way:
webhook-id,webhook-timestampandwebhook-signature, withwhsec_secrets. TheX-Usertick-SignatureandX-Usertick-Deliveryheaders are gone. Verify signatures. - A response delivery is
{ id, type, createdAt, data }, with the Response resource indata. Events. - The delivery log keeps request and response bodies for 30 days, and Send again resends a delivery with the same
webhook-id. Account notifications are now retried like responses. Delivery and retries. - Notifications about one person, such as mentions, are no longer sent to webhooks.
- Four AI events:
response.status_changed,response.classification_corrected,response.urgentandtheme.spiking, for subscriptions and for endpoints in Settings. Filters now takethemesnext to types and urgencies, andGET /responses/recentlists status changes and urgent responses. AI events. - Events wait during a failure pause. While failures keep a workflow, survey events or a subscription paused, Usertick keeps the events for up to 7 days, at most 1,000 for each, and sends them in the order they arrived after Turn on, Resume or a new subscribe. A workflow or endpoint turned off by hand, or a pause of the whole organization, keeps nothing. Events that arrive during a pause.
- Up to 100 webhooks per organization under Settings → Developers → Webhooks. Adding one more fails with
WH-005-009. Subscriptions keep their own limits. Other limits. - A workflow’s Zapier step.
POST /webhooks/subscribetakes the eventworkflow.stepwithworkflowIdandstepId, and the subscription then receives the responses the workflow sends to that step, in the envelope of the event that started the run.GET /workflows/zapier-stepslists the steps, and the new codes areAPK-006-013,APK-006-014andWH-005-010. A workflow’s Zapier step.
MCP
- Sign in instead of a key. Every assistant connects by URL and signs in to Usertick: Claude, ChatGPT, Claude Code, Cursor, VS Code and Gemini CLI on their own, Windsurf and other assistants through the
mcp-remotebridge. Any member can connect one and chooses what it may do; it works with that member’s own role. The MCP server no longer takes API keys, which stay for the REST API. Connect an assistant. - Disconnect from Security. Settings → Security lists the assistants you connected, each with Revoke access. Members who manage integrations or developer settings see everyone’s under Settings → Developers → API keys. Disconnect an assistant.
- OAuth for assistants. Authorization server metadata, Client ID Metadata Documents and client registration, required PKCE, tokens bound to the MCP server and
issin every authorization response. AI assistants. - A tool for every scope, 23 in all: list surveys and sites, pause and resume surveys, list themes, update responses and their notes, list members, erase responses, read metrics, and list webhooks and their deliveries and send them again. Every tool says whether it only reads or removes data. Tools.
list_responsestakes every response filter and pages by cursor.test_authshows what the connection may do and its rate limits.subscribe_webhookandget_recent_responsestake the AI events and athemesfilter, andget_recent_responsestakes alimitof 1 to 100 (3 by default).- Clearer errors. A failed tool call carries the API’s error code with its message, or every invalid field with its message, and how long to wait when the API sends
Retry-After, as it does with a429. MCP server.
SDK
identify, and events that carry properties
Usertick.identify(userId, traits)tells the widget who the visitor is, for the new sign-in state and trait targeting. Every survey on the page is re-checked at once. (Since October 2026 a response also carries the id and traits; see the October entry.)identify(null)on logout. Reference.Usertick.trigger(name, payload)payloads now matter: a custom event trigger can carry property rules, soplanisproopens one survey andplanisenterpriseanother. Dotted keys reach nested values.Usertick.reset()also forgets theidentifyrecord and the per-visit counters.- Several surveys on a page all arm their triggers; the first to fire wins. Surveys are re-evaluated on SPA navigation, after
identify, and when the config refreshes.
MCPREST API
Coming soon: mobile SDKs
Surveys inside native iOS, Android, React Native and Flutter apps are planned, built in the same editor with the same question types and triggered by screens and events in your app.MCP server
Usertick now supports the Model Context Protocol. The hosted endpoint atmcp.usertick.com/mcp connects any MCP client, such as Claude Code or Cursor, without an install. With the URL and your API key in the client’s configuration, a request like “summarize this week’s feedback” becomes a tool call against your data. Setup guide.REST API reference, expanded
- A dedicated errors page lists the envelope, every stable error code and which errors are safe to retry.
- A pagination guide with complete paging loops in JavaScript and Python. The paged list it covered was replaced in October 2026.
- The flat recent responses endpoint,
GET /zapier/responses, is now fully documented. It was replaced byGET /responses/recentin October 2026. - JavaScript and Python examples on the endpoint pages, next to the existing cURL.
Webhooks
Webhooks
Webhooks send signed HTTP deliveries to any system you run, with an HMAC-SHA256 signature on every payload, automatic retries with backoff, a log of every attempt and in-app alerts when an endpoint keeps failing. See the webhook reference.Foundation
The developer foundation:
- The snippet: one script tag, isolated from the page in a Shadow DOM, with response delivery that survives going offline. Install it.
- The JavaScript SDK: the same runtime as an npm package, with the public API (
init,on,trigger,show,reset,destroy) and framework guides. SDK reference. - The REST API: scoped
utk_live_keys from Settings → Developers, response listing with cursor paging, webhook subscriptions, and 120 requests per minute per key withX-RateLimit-*headers. API reference.