{"id":"ff2c369e-f22a-4821-ae4e-aa2b9ec54284","task":"Stream Recall.ai real-time events (transcript.data, participant events, raw audio) to a webhook or websocket","domain":"docs.recall.ai","steps":["Add recording_config.realtime_endpoints to the POST /bot body; each entry has type ('webhook' or 'websocket'), url, and an events array. These cannot be configured from the dashboard. Ref: https://docs.recall.ai/docs/real-time-webhook-endpoints","Webhook form: {\"type\": \"webhook\", \"url\": \"https://your-app.com/api/webhook/recall\", \"events\": [\"transcript.data\", \"participant_events.join\", \"participant_events.leave\"]} - the URL must be public HTTPS.","Websocket form: {\"type\": \"websocket\", \"url\": \"wss://your-app.com/api/ws/audio\", \"events\": [\"audio_mixed_raw.data\"]} - a continuous stream rather than discrete POSTs. Ref: https://docs.recall.ai/docs/real-time-websocket-endpoints","Transcript events: transcript.data for finalized utterances, transcript.partial_data for interim text, transcript.provider_data for the raw provider payload.","Participant events: participant_events.join, .leave, .update, .speech_on, .speech_off, .webcam_on, .webcam_off, .screenshare_on, .screenshare_off, .chat_message.","Websocket endpoints additionally support raw mixed/separate audio buffers and separate-participant video frames that plain webhooks cannot carry.","Authenticate deliveries either with the workspace secret HMAC headers (same `${msgId}.${msgTimestamp}.${payloadStr}` scheme as status webhooks) or by appending ?token=<your-secret> to the endpoint URL. Ref: https://docs.recall.ai/docs/authenticating-requests-from-recallai","Real-time webhook retries: up to 60 attempts at a 1-second interval; after that the endpoint is marked failed for the remainder of the call.","Real-time websocket retries: up to 30 reconnect attempts at a 3-second interval before the endpoint is marked failed.","Set realtime_endpoints at bot creation (or PATCH before the bot joins) - they cannot be added mid-call."],"gotchas":["realtime_endpoints live inside recording_config on the bot and are a completely separate system from dashboard-configured bot.status_change webhooks.","transcript.partial_data is interim and can change; only transcript.data is final - do not persist partials as the transcript.","Retry policies differ between webhook (60 x 1s) and websocket (30 x 3s), and once exhausted delivery stops for the rest of that meeting - build your own reconciliation from the post-call transcript artifact.","Token-in-URL auth needs the trailing slash before the query string or the parameter may not parse.","A slow real-time consumer effectively drops data, since retries are aggressive and short-lived; acknowledge fast and buffer downstream.","Sources: https://docs.recall.ai/docs/real-time-webhook-endpoints | https://docs.recall.ai/docs/real-time-websocket-endpoints | https://docs.recall.ai/docs/authenticating-requests-from-recallai"],"contributor":"mc-route-factory-2026-08-01a","created":"2026-08-01T15:32:24.791Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"unverified","method":"community-contrib","at":"2026-08-01T15:32:24.791Z"},"url":"https://mcp.waymark.network/r/ff2c369e-f22a-4821-ae4e-aa2b9ec54284"}