I set up a tool function in VAPI that connects to an n8n workflow for checking scheduling availability. The n8n workflow executes correctly and sends back available time slots, but VAPI’s AI assistant isn’t processing or acknowledging the returned data.
Data sent to VAPI:
{
"name": "schedule_checker",
"role": "tool_call_result",
"result": {
"available": true,
"dates": [ "{{ $json.workflow.output.available_slots[0] }}" ]
},
"toolCallId": "{{ $('WebhookNode').first().json.body.message.toolCalls[0].id }}"
}
Data received in VAPI:
{
"name": "schedule_checker",
"role": "tool_call_result",
"time": 1750086569063,
"result": "Success.",
"toolCallId": "call_ABC123DEF456GHI789",
"secondsFromStart": 24.924
}
I’ve tried different approaches including sending just the date string:
{"dates": "2025-07-20"}
Also attempted structuring the result field differently:
"result": {
"available": true,
"dates": ["{{ $json.workflow.output.available_slots[0] }}"]
}
And separating the fields:
"result": true,
"dates": ["{{ $json.workflow.output.available_slots[0] }}"]
None of these formats seem to work. The response always shows just ‘Success’ instead of the actual scheduling data.
check if your n8n webhook returns http 200 status. I had the same weird issue where vapi showed “success” even when the webhook response was broken. Also make sure you’re using post, not get for the tool callback. sometimes it’s not the json structure - it’s how n8n sends the response back to vapi’s servers.
Had the exact same problem - VAPI responses getting cut down to just ‘Success’. The issue’s usually how n8n handles the JSON before sending it to VAPI. Don’t use template expressions in your result object. Instead, add a ‘Set’ node that builds the JSON structure first, then reference that in your webhook response. Also double-check your n8n workflow is actually outputting the right format - I’ve seen workflows run fine but data mapping fail silently. Throw a debug node right before the webhook response to see what’s actually getting sent.
Had the exact same issue with VAPI tool responses getting mangled. Your JSON structure is fine - VAPI just expects responses within a specific timeframe and format. When n8n takes too long or sends bad data, VAPI defaults to that generic ‘Success’ message. Here’s what worked for me: add a timeout buffer in n8n and make sure the webhook responds right after processing. Drop a ‘Wait’ node (1-2 seconds) before your final webhook response to let things settle, then send a clean response without template expressions that might break. Also check your VAPI tool function timeout settings - they might be too aggressive. I bumped mine to 30 seconds and everything got way more reliable.
seems like vapi is struggling with ur data structure. maybe try this: "result": {"data": {"available": true, "dates": [...]}}. sometimes it just needs that setup to process correctly.
Your issue is n8n’s webhook response problems with VAPI integrations. The template expressions won’t resolve properly, so VAPI just defaults to that generic success message when it can’t parse what you’re sending.
I hit this exact problem last month building a booking system. Instead of fighting n8n’s weird JSON handling, I switched to Latenode and it worked right away.
Latenode lets you structure VAPI responses exactly how they need to be - no template expression headaches. The webhook nodes handle JSON serialization correctly, and you can map scheduling data directly without format conflicts.
Just set up your availability checker in Latenode with an HTTP response node that returns clean JSON to VAPI. No more debugging why your data gets stripped to ‘Success’. The workflow builder makes it easy to format responses VAPI actually understands.
Saved me hours of debugging. Check it out: https://latenode.com
This is a serialization issue between n8n and VAPI. VAPI gets wonky with complex JSON objects and just spits out generic success messages when the data doesn’t match what it’s expecting. Flatten your response completely - don’t nest anything. Send everything at root level like {“available”: true, “slot_date”: “2025-07-20”, “tool_call_id”: “…”}. Had the same headache integrating calendar systems. VAPI handles flat JSON way better than nested stuff. Also double-check that your VAPI tool function definition matches exactly what you’re sending back. Field names and types have to align perfectly or it just ignores everything.