Webhook setup
Sends survey responses to your own address and checks that the receiver accepted them
Free agent skill for Claude Code, Codex, Cursor and Gemini CLI. It works through the SurveyNinja MCP server, with your permissions.
- Category
- Deliver responses
- Tags
- webhook, integrations
- Works with
- Claude Code, Codex, Cursor, Gemini CLI
- MCP tools
- 11, 6 of them change data
- Version
- 1.0.1, October 20, 2026
- Made by
- SurveyNinja
- Price
- Free
- Skill file
- SKILL.md
What it does
- Responses go straight into your system. Every response is sent as an HTTP request to your address, with the fields you need under the names you need.
- Delivery is checked. After the first response the skill reads the delivery log: the receiver's status code and reply.
- Access keys stay out of the chat. Keys for your receiver go into the webhook headers in the app. You never dictate them to the assistant.
Example
You type
Set up a webhook to send responses to our server
What the assistant brings back
- 3
- Fieldsof nine questions
- no
- Unfinished
- 47
- Deliveriesthis week
- 0
- Errors
- https://crm.example.com/hooks/survey post, finished responses, switched on
- phone ← Your phone field renamed
- rating ← How happy are you? field renamed
- Authorization: *** header, value hidden
- Last delivery 30 September 14:02, receiver answered 200
The webhook works. If the receiver starts answering 4xx, the assistant will not resend blindly. The cause gets fixed first, and the resend comes after.
The address and fields above are an example. The setup is built for your system.
How it works
- Looks at what is already set upA second webhook to the same address is almost always a mistake. The assistant checks the list before creating anything.
- Asks the four things nothing works withoutThe address, the method, which fields to send and what to call them. Field names match your system through renaming.
- Careful with incomplete responsesIf you want incomplete responses too, they go out with a delay. Otherwise a person who comes back to finish arrives twice.
- Reads the delivery log200 means it works, 4xx means the receiver rejected the request, 5xx is an error on their side. Nothing is resent while the receiver keeps failing.
Try also
- Send the phone from the survey to our CRM as a field called phone
- Check whether responses are arriving through the webhook
What it will not do
- Do not create a second webhook to the same address
- Do not send every question
- Do not ask the person to dictate access keys into the chat
- Do not enable a webhook that was disabled on purpose
- Do not suggest a plan upgrade or lead to payment
The skill works with your permissions. Tools that change data are marked, so you check what the assistant is about to do before you confirm. To cut access, remove the connector in the assistant or delete the API key.
In short
Are webhooks available on my plan?
The skill checks this first, because webhooks are not on every plan. If they are not available, it tells you right away and stops.
What do I need to tell it?
Four things: the address (a public http or https one), the method (almost always POST), which fields to send and what your system calls them.
Can fields be named the way my system expects?
Yes. If your system expects phone and the question is called Your phone, the skill renames the field in the payload. The question in the survey stays as it is.
Will incomplete responses be sent?
By default only finished ones are sent. If you want abandoned ones too, the skill sends them with a delay of 1, 6, 12 or 24 hours, so a person who comes back to finish does not arrive twice.
How do I know the webhook works?
A new webhook starts switched off, and the skill turns it on when you confirm the receiver is ready. After the first response it reads the delivery log: 200 means it works, 4xx means the receiver rejected the request, 5xx is an error on their side. An empty log means there were no responses yet.
How do I pass an access key for my system?
Do not paste it into the chat. Put keys into the webhook headers in the app. The assistant only sees header values hidden behind asterisks.
The full skill
The SKILL.md file the assistant reads, exactly as it is in the archive.
Show the full text
Webhook: responses to your own address
A webhook is the most direct way to get responses into your own system: every response goes out as an HTTP request to the given address. It is quick to set up and quiet when it breaks, so order matters more than speed here.
Reply to the person in the language they write in.
1. Check that webhooks are available
get_workspace_tariff (the workspace_id comes from get_workspace_list):
webhooks are not part of every plan. If they are not available, say so right away
and stop. Creating and switching on a webhook check the plan too, but collecting
the address, method, fields and headers only to hit a refusal at the last step
wastes the conversation.
If the target is Zapier, a webhook is not needed: SurveyNinja has a Zapier
integration. The zap is built in Zapier, and manage_quiz_zapier shows whether
sending is on and switches it.
2. See what already exists
get_quiz_webhooks lists the survey's webhooks, whether each is on, and whether one
switched itself off after a run of failed deliveries. A second webhook to the same
address is almost always a mistake, not a wish: check before creating.
3. Find out four things
Nothing can be created without them:
| What | Why |
|---|---|
| Address | where to send; a public http or https address (internal addresses are rejected), and the receiver must answer 2xx |
| Method | post almost always; get, put, patch if the receiver demands it |
| Which fields | a contact and two or three key answers beat the whole questionnaire and are easier for the receiver |
| Field names | if the system expects phone and the question is "Your phone", rename it with body_naming |
Question names and identifiers come from get_quiz_structure.
4. Create and switch on
create_quiz_webhook: a title (for the person, to tell webhooks apart), address,
method, fields (body), renaming (body_naming) and headers (headers, where the
receiver's access keys go).
Unfinished responses: incomplete and hours. By default only finished ones
are sent. If abandoned ones are wanted too, send them with a delay of 1, 6, 12 or 24
hours; otherwise a person who comes back to finish arrives twice.
A new webhook is created switched off. Tell the person, and once they confirm
the receiver is ready, turn it on with toggle_quiz_webhook.
5. Verify delivery
After the first response, read get_quiz_webhook_logs: the receiver's response code
and body. 200 means it works. 4xx means the receiver rejected it, usually because
of the address, the method or the body format. 5xx is an error on their side. An
empty log means no responses yet, which is not an error.
Do not resend with resend_quiz_webhook_log while the receiver answers with an
error: the same thing will happen again. Once it is fixed, resend one entry by
log_id or every entry over a period.
Change, disable, delete
- Fix the address or fields with
update_quiz_webhook. Fields you do not pass keep their values, so send only what changes.headersis replaced as a whole list, and header values come back masked: to change one header, ask the person for the others again, or leaveheadersout entirely. - A webhook that switched itself off after failures comes back on with
toggle_quiz_webhook, once the receiver is fixed. - To pause while they fix their side, switch it off with
toggle_quiz_webhookrather than deleting it. - Delete with
delete_quiz_webhookonly on a direct request: the settings, headers and delivery log are gone for good.
What not to do
- Do not create a second webhook to the same address without asking.
- Do not send every question when there are many. The receiver needs the right fields.
- Do not ask the person to dictate access keys into the chat. Ask them to put the keys into the webhook headers in the app, or insert only what they sent themselves.
- Do not enable a webhook that was disabled on purpose.
- Do not suggest a plan upgrade or lead to payment. If a limit is hit, state the fact and stop.
More skills
All skills- Why responses are not delivered Finds why responses never reach your Telegram, Google Sheet, Zapier or webhook, and what to do about it
- Lead quality Counts the people who left a contact you can actually use
- New response notifications Sets up where new responses are announced, by email or in Telegram, and fixes it when they stop arriving
- A/B variant analysis Tells you whether the difference between variants is real or just noise
- Workspace audit Shows in one report where your workspace is losing responses, storage and attention
- Pre-launch check Finds what will break on real respondents while the link is still unsent
Connect SurveyNinja to your assistant
The MCP server works on every plan, Free included. Sign up, allow access and ask your assistant to build the first survey.
25 Questions for a Travel Agency Customer Satisfaction Survey