MichaelVitamin
03/11/2026, 12:48 PMVapi Support Bot
03/11/2026, 12:49 PMjson
{
"results": [
{
"toolCallId": "call_123",
"result": "Your response as single-line string"
}
]
}
Tips:
- Always return HTTP 200, even for errors.
- Ensure toolCallId matches the incoming request exactly, and keep the result value on a single line (no \n line breaks).
For more details, see the [Custom Tools Troubleshooting documentation](https://docs.vapi.ai/tools/custom-tools-troubleshooting).
Source:
- [Custom Tools Troubleshooting documentation](https://docs.vapi.ai/tools/custom-tools-troubleshooting)MichaelVitamin
03/11/2026, 12:51 PMMichaelVitamin
03/11/2026, 12:53 PMVapi Support Bot
03/11/2026, 12:54 PMChiranjeet Mishra
03/11/2026, 12:55 PMMichaelVitamin
03/11/2026, 12:58 PMMichaelVitamin
03/11/2026, 12:58 PMMichaelVitamin
03/11/2026, 1:06 PMMichaelVitamin
03/11/2026, 1:09 PMChiranjeet Mishra
03/13/2026, 2:36 PM{
"toolCallId": "<exact ID from message.toolCalls\[0\].id>",
"result": "your result as a string"
}
]
}
Two things to double-check in your n8n workflow:
1. The response must have a top-level results array - not result, not a bare object
2. The toolCallId must exactly match the ID sent in the incoming request (message.toolCalls[0].id)
3. The result value must be a string
The most common n8n mistake is either missing the results wrapper or n8n double-wrapping the response in an extra array. Make sure your Respond to Webhook node is returning the structure above verbatim.
Let us know if it's still not working after that and share a call ID - happy to dig further!
Best,
Vapi Support