Webhooks
Mira receives webhook events from integrated services. This page documents the webhook events that flow through the platform.
Recall.ai Webhooks
Mira uses Recall.ai to capture meeting transcripts. When a meeting bot finishes recording, Recall sends a webhook to trigger transcript processing and coaching report generation.
Bot Status Change
Fired when a meeting bot's status changes (e.g. joining, recording, done).
{
"event": "bot.status_change",
"data": {
"bot_id": "bot_abc123",
"status": {
"code": "done",
"sub_code": "recording_done"
},
"meeting_url": "https://meet.google.com/xxx-yyyy-zzz"
}
}Transcript Ready
When the transcript is ready, Mira automatically fetches it and begins generating the coaching report using your configured scoring template.
Stripe Webhooks
For billing events, Mira integrates with Stripe webhooks to handle subscription changes, payment success/failure, and plan upgrades.
| Event | Description |
|---|---|
checkout.session.completed | New subscription created |
customer.subscription.updated | Plan changed or renewed |
customer.subscription.deleted | Subscription canceled |
invoice.payment_succeeded | Payment processed successfully |
invoice.payment_failed | Payment failed, action required |
Outgoing Webhooks
Configure outgoing webhooks to receive real-time notifications when key events happen in your Mira workspace. Manage webhooks from Settings → Webhooks in your admin dashboard.
Supported Events
| Event | Description |
|---|---|
report.completed | A coaching report has been generated |
meeting.transcript_ready | A meeting transcript is available |
meeting.failed | A meeting recording or transcript failed |
roleplay.completed | A roleplay session has been scored |
Payload Format
Each webhook delivery is a POST request with a JSON body containing the event type, data, and a timestamp.
{
"event": "report.completed",
"data": {
"report_id": "uuid",
"meeting_id": "uuid",
"user_id": "uuid"
},
"timestamp": "2025-01-15T10:30:00.000Z"
}Signature Verification
Every webhook delivery includes an X-Mira-Signature header — an HMAC-SHA256 hex digest of the request body, signed with your webhook's signing secret. Always verify the signature before processing.
import { createHmac, timingSafeEqual } from "crypto";
function verifyWebhook(body, signature, secret) {
const expected = createHmac("sha256", secret)
.update(body)
.digest("hex");
return timingSafeEqual(
Buffer.from(expected),
Buffer.from(signature)
);
}Request Headers
X-Mira-Signature— HMAC-SHA256 hex signatureX-Mira-Event— The event type (e.g.report.completed)X-Mira-Timestamp— ISO 8601 delivery timestampContent-Type— Alwaysapplication/json
Delivery Logs
All webhook deliveries are logged and viewable in your admin dashboard under Settings → Webhooks. You can see response codes, errors, and payloads for each delivery attempt.