How does a webhook work?
You register an endpoint URL with the service and choose the events you want. When one happens, the service sends an HTTP POST to that URL, usually with a JSON body describing the event. For example, GitHub can send a push event to your CI server, which starts a build without checking the repository every minute.
Your endpoint should reply quickly with a 2xx status and do slow work afterwards. Stripe, for example, tells developers to return a successful status before any complex logic, because a slow reply can time out and count as a failed delivery.
Anyone can send a request to a public URL, so services sign their deliveries. GitHub puts an HMAC SHA-256 signature of the body, made with a secret you choose, in the X-Hub-Signature-256 header, and your code recomputes it and compares the two in constant time before trusting the event.
Deliveries can arrive more than once or out of order. Stripe doesn’t guarantee event order and notes that the same event can arrive twice, so a handler should record the event IDs it has processed and skip repeats.
Why do webhooks matter for a website voice agent?
Teams often want each finished conversation to reach another system straight away, such as a help desk ticket, a CRM note or a message to the team. A voice agent that sends a webhook when a call ends makes that possible without a scheduled job.
Without webhooks, the same result needs polling: a job that calls the API on a schedule, remembers what it has seen and fetches anything new. GitHub’s guidance notes that calling the API is fine when you need information only now and then or from a few resources. The cost is delay, because each new item waits for the next poll.
How Kawl Now handles events without webhooks
Kawl Now doesn’t send webhooks or other outbound events, and it has no help desk, CRM or Slack connections. To pick up new conversations, poll GET /api/manage/workspace, which returns your latest 100 conversations, or have a coding agent call the list_conversations MCP tool.
Each conversation in that list has an ID, a status and a flag for dashboard tests, so a script can leave tests out. A conversation appears as soon as a visitor starts a call, and its transcript is saved as the call goes, so wait until its status is no longer pending or active before you fetch it with GET /api/manage/conversations/{id} and mark its ID as handled.
Email notices go to the workspace owner when the free allowance runs low or runs out, customer calls are switched on or off, allowed origins change, or a token is created or revoked. If you use human handover, an early release, they also cover turning it on or off and any handover that couldn’t be prepared for a caller. They’re emails rather than webhooks, and they never include caller names, transcripts or summaries.
Common questions
How is a webhook different from an API?
With an API, your code sends a request when it wants data. With a webhook, the service sends a request to your code when something happens. Many services offer both: an API for reading and changing data, and webhooks to tell you when to look.
Does Kawl Now send webhooks?
No. Kawl Now has no webhooks or outbound events. Poll GET /api/manage/workspace for new conversations, then fetch each finished conversation’s transcript with GET /api/manage/conversations/{id}.