Docs
Get started

Real-time webhooks for WhatsApp calls

Every WhatsApp call your number receives can fire an HTTP webhook to your automation platform. Use it for missed-call follow-ups, CRM contact creation, or paging the on-call team. This is not a voice AI, it's a clean event stream.

Overview

WhatsApp Call Webhooks let Wazzap send a real-time HTTP request to a URL of your choice every time one of four call events happens on a connected number. The most valuable use case is missed calls: turn each one into a contact and a follow-up workflow so no lead falls through.

!

This feature is strictly a webhook event handler. It does not answer calls, transcribe audio, or run a voice agent. For voice answering, look at the voice messaging tools.

Events

  1. Incoming call: fires when the call is offered to your number.
  2. Call accept: fires when the call is answered.
  3. Call reject: fires when the call is declined.
  4. Call missed: fires when the call is not answered.

Each event sends a separate HTTP request, so you can wire each to a different downstream URL.

Configuration

Webhooks are configured at number level inside the sub-account panel:

  1. Open WhatsApp Numbers.
  2. Select the specific number.
  3. Open Settings.
  4. Go to Calls Settings.
  5. Paste the webhook URL for each event you want to track.
  6. Save.
  7. Test with a live call. The endpoint only activates once a real call event hits it.

Each connected number must be configured independently.

Payload

Every event ships the same compact JSON payload:

{
  "event": "call.missed",
  "phone": "+5215512345678",
  "country": "MX",
  "ts": "2026-05-14T14:32:11Z"
}

The event string is one of call.incoming, call.accept, call.reject, call.missed. phone is the caller's number in E.164 format, country is the ISO 3166-1 alpha-2 country code.

HighLevel walkthrough

In HighLevel, wire the webhook to an Inbound Webhook Trigger. The trigger fires when Wazzap posts the call event. From there you can:

  1. Find contact by phone in the CRM.
  2. If exists: update the contact with the latest call timestamp.
  3. If not: create a new contact with phone and country.
  4. Optional action: send an SMS or fire a WhatsApp using a tag trigger.

The inbound webhook trigger is a premium action in HighLevel and may carry an extra cost. Check the official HighLevel docs for current pricing.

Example: missed call

  1. A prospect calls your WhatsApp number, nobody picks up.
  2. Wazzap posts to your missed-call webhook:
{
  "event": "call.missed",
  "phone": "+5215587654321",
  "country": "MX",
  "ts": "2026-05-14T14:32:11Z"
}
  1. HighLevel finds no contact with that phone, creates one, and applies a missed-call-followup tag.
  2. A workflow listening to that tag fires a WhatsApp via Wazzap: "Hey, sorry we missed your call, here's a link to book a time".

Important notes

  • Webhooks are per-number. A new number means a new configuration.
  • The endpoint only activates after a live call test. Don't expect the URL to receive traffic until you trigger every event you wired.
  • The payload contains only phone, country, event and ts. Don't design workflows around fields that aren't there.
  • Always send webhooks to HTTPS endpoints with a secret token in the URL or header.
  • Common automation platforms that consume these include Zapier, Pabbly, HighLevel, and n8n via the native integration.

Troubleshooting

The webhook URL never receives a request

Confirm the URL is publicly reachable and returns a 2xx status. Wazzap will not follow redirects and will not retry on 5xx errors. Test with a tool like webhook.site first.

Calls fire but only some events arrive

Each event needs its own URL in the Calls Settings panel. If you only filled in missed, that's the only event that will fire.

For complex routing (find contact, branch, retry, log), use n8n as the webhook target. You'll keep the call-event payload small and let n8n do the heavy lifting.

Was this page helpful?