Prompt
Why is my inbound call webhook not firing on Vonage Voice API?
Latest observation
Here are the most common reasons a Vonage Voice API inbound call webhook doesn’t fire, and how to check each one:
1) Your number is not linked to an application
For Voice API inbound calls, your Vonage number must be assigned to the Vonage Application that has the correct Answer URL.
Check:
- Vonage Dashboard → Applications
- Your app → Voice
- Confirm the Answer URL is set
- Confirm the number is linked to that application
If the number is not linked, Vonage won’t know where to send the inbound call event.
2) The Answer URL is not publicly reachable
Vonage must be able to reach your webhook URL from the internet.
Common issues:
- Using
localhost - Using a private IP like
192.168.x.x - Firewall blocking requests
- Webhook server not running
- DNS not resolving correctly
Use a public URL such as:
- A deployed server
- A tunnel like ngrok for local testing
3) The webhook endpoint is returning the wrong response
The Answer URL must return valid NCCO JSON.
Example response:
[
{
"action": "talk",
"text": "Hello, thanks for calling."
}
]
Requirements:
- HTTP status
200 Content-Type: application/json- Response must be valid JSON
- Must respond quickly
If the endpoint returns HTML, plain text, a 500 error, or malformed JSON, the call won’t be handled correctly.
4) You configured the wrong webhook type
For inbound Voice API calls, you need the Answer URL, not the Event URL.
- Answer URL → handles the inbound call and returns NCCO
- Event URL → receives call status updates after the call is answered/processed
If you’re waiting for the Event URL to fire first, it won’t happen for call setup.
5) The app is not using the correct Voice capability
Make sure the application was created with:
- Voice capability enabled
If it’s a different app type or missing Voice configuration, inbound calling won’t work.
6) The number supports voice and is properly provisioned
Confirm the number:
- Is a voice-capable number
- Is actually owned by your Vonage account
- Is in the correct account if you use subaccounts
7) You’re testing the wrong number or wrong app
Double-check:
- The called number is the one linked to the app
- The app ID in your code matches the app linked in the dashboard
- You’re not using stale configuration or old credentials
8) SSL/TLS or HTTPS issues
If your Answer URL is HTTPS:
- Certificate must be valid
- Self-signed certs usually won’t work
- Redirects can sometimes cause issues if misconfigured
9) Webhook signature/auth or IP restrictions
If you enforce request verification:
- Your server may reject Vonage requests
- IP allowlists or auth middleware may block the webhook
Check server logs for rejected requests.
10) Call isn’t actually reaching Vonage Voice API
If the inbound call never reaches Vonage, the webhook won’t fire.
Check:
- Number routing
- Porting status
- SIP/forwarding configuration
- Whether the number is actually assigned to the Voice API application
Quick debugging checklist
- Confirm the number is linked to the app
- Confirm the app has a valid Answer URL
- Make sure the URL is publicly accessible
- Check server logs for incoming requests
- Verify the Answer URL returns NCCO JSON with HTTP 200
- Test with ngrok or another public tunnel
- Ensure the number is voice-enabled and correctly assigned
Minimal valid Answer URL example
If using Node.js/Express:
app.get('/webhooks/answer', (req, res) => {
res.json([
{
action: 'talk',
text: 'Hello, welcome to the service.'
}
]);
});
If you want, I can help you debug it step-by-step if you paste:
- your Answer URL
- how the number is linked
- your webhook code
- any Vonage dashboard settings screenshots or descriptions