Documentation

Redback Feedback docs

Everything the dashboard can do, the API and the MCP server can do too, under the same rules. One API key per organisation, JSON in, JSON out, data in Sydney.

Quick start

  1. Sign in at app.redbackfeedback.com and create an API key under API keys. The secret starts with rb_live_ and is shown once.
  2. List your forms:
Terminal
curl https://api.redbackfeedback.com/v1/forms -H "Authorization: Bearer rb_live_..."

  1. Or add the MCP server to Claude Code and ask it to build a form for you:
Terminal
claude mcp add --transport http redback https://api.redbackfeedback.com/mcp --header "Authorization: Bearer rb_live_..."

Authentication

Send Authorization: Bearer rb_live_... on every request to https://api.redbackfeedback.com. A key belongs to one organisation and can do anything a signed-in user can, except create or revoke keys. Keys are stored hashed; revoke one from the dashboard and it stops working within a minute.

Public endpoints (the survey page's calls and footer clicks) take no credential.

Forms and questions

A form has a kind, a status and a list of questions.

A form starts as draft. Set it active before sharing it. archived closes it and keeps the responses.

TypeAnswer valueWhat you get back
csat1 to 5average, CSAT% (the share of 4s and 5s), histogram
rating1 to max (5 or 10)average, histogram
nps0 to 10average, NPS (% of 9 to 10 minus % of 0 to 6), histogram
yesnotrue or falseyes%, histogram
choiceoption index, or an array when multiplehistogram by option
textstring up to maxLength (default 2000)count

Question ids are short lower-case handles like overall ([a-z][a-z0-9_]{0,31}). Stats are keyed on them, so keep them stable once responses exist.

Create a footer form
curl -X POST https://api.redbackfeedback.com/v1/forms \
  -H "Authorization: Bearer rb_live_..." -H "Content-Type: application/json" -d '{
  "kind": "footer", "name": "Support footer", "title": "How was this interaction?", "status": "active",
  "questions": [
    { "id": "rating", "type": "csat", "label": "How was this interaction?" },
    { "id": "resolved", "type": "yesno", "label": "Was your issue resolved?" }
  ],
  "theme": { "colour": "#c8102e" }
}'

Optional fields: intro, thankYou, theme.colour (#rrggbb), theme.logoUrl (https), and settings: collectComment and dedupeByRef (footer forms, both default true), redirectUrl (send the respondent there after submitting), showCredit.

Survey link

https://redbackfeedback.com/f/{formId}. Add attribution so each response tells you what it was about:

https://redbackfeedback.com/f/form_abc?ref=ORD-1043&a=Sam&tag.store=newtown

Footer buttons

Each button is a link to https://redbackfeedback.com/r/{formId}?s=<score> with the same attribution. s is the answer to the first question: 1 to 5 for csat, 1 to max for rating, 0 to 10 for NPS, 1 (yes) or 0 (no) for yes/no. With dedupeByRef on, one response per ref: the first click wins and later clicks reopen the comment box. Without s the link simply opens the survey page.

Get a ready-made snippet with GET /v1/forms/{id}/embed (or the get_embed tool, or the Share tab in the dashboard). It returns email-safe HTML (a table, inline styles, no images, no script) and a plain-text version, in your choice of emoji, numbers, stars or words.

Snippet with merge fields
curl "https://api.redbackfeedback.com/v1/forms/form_abc/embed?style=emoji&ref={{ticket.id}}&agent={{agent.name}}" \
  -H "Authorization: Bearer rb_live_..."

Anything that looks like a merge field ({{ticket.id}}, %AGENT%, [Order], *|FNAME|*) is left exactly as typed, so your helpdesk or email tool fills it at send time. Literal values are URL-encoded for you.

Responses and stats

A response carries answers keyed by question id, an optional comment, the ref, agent and tags from the link, a source (link, invite, footer or api) and the browser's user agent and language. Nothing else about the respondent is stored.

Invite links

For a known list of people, mint single-use survey links. Each is spent on the first submission and the response carries the recipient's ref.

Mint invite links
curl -X POST https://api.redbackfeedback.com/v1/forms/form_abc/invites \
  -H "Authorization: Bearer rb_live_..." -H "Content-Type: application/json" \
  -d '{ "recipients": [ { "ref": "C-1", "label": "Customer one" }, { "ref": "C-2" } ] }'

Or { "count": 20 } for anonymous links. Up to 500 per call. The platform never sends email: you send the links through your own tools.

REST reference

Base URL https://api.redbackfeedback.com. All timestamps are ISO 8601 in UTC.

MethodPathBody or queryReturns
GET/v1/meprincipal and organisation
GET/v1/orgorganisation
PATCH/v1/org{ name?, settings: { website? } }organisation
GET/v1/members{ items }
GET/v1/forms{ items } newest first
POST/v1/formskind, name, title, questions, intro?, thankYou?, theme?, settings?, status?form (201)
GET/v1/forms/{id}form
PATCH/v1/forms/{id}any create field except kindform
DELETE/v1/forms/{id}form, archived
GET/v1/forms/{id}/responseslimit, cursor, since, until{ items, cursor? }
POST/v1/forms/{id}/responses{ answers, comment?, ref?, agent?, tags? }response (201)
GET/v1/forms/{id}/responses.csvsince, untilCSV
GET/v1/forms/{id}/statsstats
GET/v1/forms/{id}/invites{ items }
POST/v1/forms/{id}/invites{ count } or { recipients }{ items } (201)
GET/v1/forms/{id}/embedstyle, ref, agent, tag.*{ link, footer? }
GET/v1/responses/{id}response
DELETE/v1/responses/{id}{ ok }
GET/v1/keyssigned-in users only{ items }
POST/v1/keys{ name }, signed-in users only{ key, secret } (201)
DELETE/v1/keys/{id}signed-in users onlykey, revoked

MCP server

Endpoint https://api.redbackfeedback.com/mcp: Streamable HTTP, stateless, JSON responses, your API key as a bearer header. Works with Claude Code, Cursor, VS Code, Windsurf, n8n and any client that takes a URL and a header. Claude.ai and Claude Desktop custom connectors expect OAuth, which is a planned addition.

ToolDoes
get_orgThe organisation the key belongs to
list_forms, get_formBrowse forms
create_form, update_form, set_form_statusBuild, change, activate or archive a form
get_form_statsCount, CSAT%, NPS, averages, histograms
list_responses, get_response, delete_responseRead or remove responses
record_responseRecord feedback collected elsewhere
export_responses_csvCSV text, one column per question
create_invite_linksSingle-use survey links per recipient
get_embedThe survey link and the footer snippet

Try: "Create a footer form called Support footer with a CSAT question and a yes/no 'Was your issue resolved?', activate it, and give me the emoji snippet with {{ticket.id}} as the ref."

Public endpoints

These take no credential. The survey page uses them; so can a front-end of your own.

MethodPathNotes
GET/v1/public/forms/{id}?t=The form as a respondent may see it; t is an invite token
POST/v1/public/forms/{id}/responses{ answers, comment?, ref?, agent?, tags?, token? }; required questions must be answered
POST/v1/public/responses/{id}/follow-up{ key, comment?, answers? } within 24 hours, with the key the submit reply gave
GET/r/{formId}?s=A footer click; answers with the thank-you page

Limits and errors

Questions or a missing feature? Use the invite form on the home page to reach us.