Meet API Docs Dashboard
On this page

Webhooks

Meet calls your server when something happens, so you do not have to poll.

A webhook endpoint is an https address on your server. Meet POSTs a signed JSON event to it. Events are scoped to the project and the mode of the key that made the endpoint: a test key gets test events, a live key live ones.

Add an endpoint#

bash
curl "https://meet.respiresoft.com/api/v1/webhooks" \
  -H "Authorization: Bearer $MEET_API_KEY" -H "Content-Type: application/json" \
  -d '{"url": "https://app.acme.com/meet-webhook", "events": ["session.ended", "recording.ready", "transcript.ready"]}'

The answer has a secret that starts whsec_. It is shown once, so store it. Use "events": ["*"] for every event except chat.message, which you must ask for by name. You can have up to 20 endpoints for each project and mode. Send a test event any time: POST /api/v1/webhooks/{id}/test.

Receive and verify#

Verify the signature over the raw body before you trust anything. Code in Node, Python, PHP and Go is on Webhook events and signatures. Then answer with any 2xx quickly.

js
import express from 'express';
import { Meet } from '@respiresoft/meet';

const app = express();
app.post('/meet-webhook', express.raw({ type: '*/*' }), (req, res) => {
  const event = Meet.webhooks.constructEvent(req.body, req.get('Meet-Signature'), process.env.MEET_WEBHOOK_SECRET);
  console.log(event.type, event.data);
  res.sendStatus(204);
});
app.listen(3000);

Delivery rules#

Look at what happened#

GET /api/v1/webhooks/{id}/deliveries lists every attempt with its state. GET /api/v1/events lists events (filter with ?type=). The dashboard shows the same under Webhooks. Endpoint operations are on Webhook endpoints API.