Tether
DocsGitHub

API reference

Feedback

A thumbs up or down on one answer, with an optional comment. The widget sends it when a visitor taps a thumb; your server reads the ratings back to find the answers that went wrong.

POST /v1/chat/feedback
GET  /v1/chat/feedback

Rate an answer

curl -X POST https://api.trytether.ge/v1/chat/feedback \
  -H "X-Api-Key: $TETHER_PUBLISHABLE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "sessionId": "0f2c8b41-6d3e-4a19-9c77-1b2a3e4f5d60",
    "requestId": "7d1e4c0a9b2f4e6d8a1c3b5e7f9d2a4c",
    "rating": "down",
    "comment": "It sent me to a branch that closed an hour ago."
  }'
FieldRequiredNotes
sessionIdyesThe conversation, from the complete frame of the stream
requestIdyesThe answer being rated, from the same frame
ratingyesup or down
commentnoAt most 1,000 characters

A publishable key may call this route, so it works from a page. It is accepted only for a conversation of that key's own tenant, and, when the conversation belongs to a verified customer, only with that customer's token. Anything else is 404 session_not_found. One rating is kept per answer: a second replaces the first.

{ "recorded": true, "rating": "down", "replaced": false }

Read the ratings

With the tenant's secret key, newest first. A publishable key cannot read them.

curl "https://api.trytether.ge/v1/chat/feedback?rating=down&limit=50" \
  -H "X-Api-Key: $TETHER_SECRET_KEY"
QueryNotes
ratingup or down; absent for both
limit1 to 200, default 50
{ "feedback": [
    { "sessionId": "0f2c…", "requestId": "7d1e…", "rating": "down",
      "comment": "It sent me to a branch that closed an hour ago.", "customerId": null,
      "createdAt": "2026-10-15T21:04:11Z", "updatedAt": "2026-10-15T21:04:11Z" } ],
  "count": 1 }