LiveKit Cloud Webhook Events Not Triggering

Hi LiveKit Team,

We are facing an issue with LiveKit Cloud webhooks.

We have configured our webhook endpoint in the LiveKit Cloud dashboard:

https://api.smartcoach360.ai/livekit/webhook

The webhook is configured and shows as active in the dashboard. However, LiveKit Cloud is not triggering any webhook requests to our endpoint.

We have tested the same API endpoint manually using Postman, and it is working correctly. We are receiving the request successfully from Postman.

We also tried using Actions → Send a test event from the LiveKit Cloud Webhooks dashboard, but the test event is not reaching our server.

Could you please check whether there is any issue with webhook delivery from LiveKit Cloud to our project/endpoint?

Details:

  • Webhook URL: https://api.smartcoach360.ai/livekit/webhook

  • LiveKit Cloud webhook is configured successfully.

  • Postman request → Working

  • LiveKit Cloud test event → Not received

  • Actual LiveKit room events → Not received

  • Our endpoint is publicly accessible.

Please check the webhook delivery logs on your side and let us know if there are any delivery failures, connection issues, or configuration problems with our project.

Thank you.

@vmaxhealthtech, Your Postman test does not prove the problem is on LiveKit’s side. LiveKit sends the webhook with Content-Type: application/webhook+json, and your server must accept that exact content type (webhooks). Postman most likely sent application/json, so it took a different path through your stack. If your framework, body parser, or a WAF only accepts application/json, it drops LiveKit’s request before your handler runs. This is the most common reason a webhook shows active but nothing arrives.

Check these first, because each is on your side and you can test each now:

  • Accept application/webhook+json and read the raw body. The receiver validates a signed token, so a pre-parsed JSON body fails validation.
  • Confirm a Signing API key is selected on the webhook config, because LiveKit signs the payload with it and your receiver must use the same key and secret.
  • If api.smartcoach360.ai sits behind Cloudflare or a WAF, allow server-to-server POSTs. A browser-style client like Postman passes, but a plain server request can be challenged and dropped, so nothing reaches your logs.

Minimal receiver (Node):

import { WebhookReceiver } from 'livekit-server-sdk';
const receiver = new WebhookReceiver('apikey', 'apisecret');

// raw body required, not parsed JSON:
app.post('/livekit/webhook', express.raw({ type: 'application/webhook+json' }), async (req, res) => {
  const event = await receiver.receive(req.body, req.get('Authorization'));
  res.sendStatus(200);
});

The one part only LiveKit can see is the delivery log. If the checks above all pass, ask LiveKit Cloud support to confirm whether delivery was attempted and what response it got, and give them your project ID. That log tells you if the request left LiveKit and where it stopped.

You didn’t specify a session but looking at your account I see webhooks being sent and the response code is mostly 200 however I do see some 400 (bad request). The most typical reason for the 400 is your webhook process is blocking subsequent calls from succeeding, and I recommend reviewing this:

In a nutshell, in your logic that processes the webhook, return as quickly as possible and do the actual processing in a separate thread.