Webhooks
Receive real-time notifications when MeetRox finishes processing a conversation.
Webhooks
Managed Access — Webhooks must be enabled for your workspace by the MeetRox team. Contact your MeetRox account manager to request access.
Webhooks allow you to receive real-time notifications as MeetRox processes a conversation. Instead of polling the API for updates, MeetRox pushes a payload to an HTTPS endpoint of your choice as each processing stage completes.
MeetRox uses Svix as the underlying delivery infrastructure, which provides reliable delivery, automatic retries, and a consumer portal for managing your endpoints.
Processing Stages and Multiple Dispatches
Call processing in MeetRox happens asynchronously across several stages. The same event (call.processed.full.v2) is dispatched multiple times for the same call — once after each stage completes:
| Stage | When it fires | Fields populated |
|---|---|---|
| Transcription | Shortly after the call audio is processed | transcription, interaction_metrics |
| CRM linking | After the call is matched to records in your CRM | associations |
| AI Summary | After the AI-generated summary is ready | summary, title (if AI-generated) |
| Scorecard | After AI scorecard answers are computed | scorecard, ai_score |
Each dispatch carries the full current state of the call at that moment. Fields from stages not yet complete will be null or empty.
Not all stages run for every call — the stages present depend on your workspace configuration. In practice, most workspaces receive between two and four dispatches per call.
Identifying Each Dispatch
Each dispatch has a unique event_id that includes the stage name as a suffix:
event_id pattern | Triggered by |
|---|---|
call-{id}-processed-deliver_transcription | Transcription complete |
call-{id}-processed-deliver_retry_crm_link | CRM linking complete |
call-{id}-processed-deliver_summary | AI summary complete |
call-{id}-processed-deliver_scorecard | Scorecard answering complete |
Recommended Consumer Pattern
Treat each received event as the latest known state of the call and update your records accordingly. Do not assume a specific number of dispatches or a fixed order. If you only care about fully processed calls, wait for an event where both summary and scorecard are non-null before acting.
Event: call.processed.full.v2
call.processed.full.v2Dispatched at each processing stage described above.
Payload Structure
{
"event_type": "call.processed.full.v2",
"event_id": "call-1042-processed-full",
"timestamp": "2026-05-20T21:00:00Z",
"call": {
"id": 1042,
"url": "https://app.meetrox.ai/12/calls/1042",
"timestamp": "2026-05-20T14:30:00",
"title": "Discovery call with Acme",
"duration": 1800,
"format": "voip",
"user": {
"id": 15,
"name": "Ana Silva",
"email": "[email protected]",
"primary_group": {
"id": 3,
"name": "Sales"
}
},
"call_type": {
"id": 2,
"name": "Discovery"
},
"attendees": [],
"associations": {
"companies": [],
"contacts": [],
"deals": [],
"leads": [],
"custom": [],
"activities": []
},
"interaction_metrics": {
"rep_talk_ratio": 0.45,
"exchanges": 32,
"longest_rep_monologue": 120,
"longest_customer_story": 95,
"silence_percentage": 0.08
},
"ai_score": 82,
"summary": {},
"scorecard": {
"id": 5,
"name": "Discovery Scorecard",
"categories": [
{
"id": 10,
"name": "Opening",
"questions": [
{
"id": 101,
"text": "Did the rep introduce themselves?",
"answer": "yes"
}
]
}
]
},
"transcription": "Rep: Hello, thanks for joining...\nCustomer: Hi, happy to be here...",
"phrase_trackers": [
{
"id": 7,
"name": "Competitor mentions",
"words": [
{ "word": "competitor_name", "occurrences": 2 }
]
}
]
}
}Field Reference
| Field | Type | Description |
|---|---|---|
event_type | string | Always call.processed.full.v2 |
event_id | string | Unique identifier for this dispatch. Format: call-{id}-processed-{stage}. See Processing Stages for the possible values. |
timestamp | string | ISO 8601 datetime of when the webhook was dispatched |
call.id | integer | MeetRox call ID |
call.url | string | Direct URL to the call in the MeetRox interface |
call.timestamp | string | ISO 8601 datetime of when the call occurred |
call.title | string | Call title, either set manually or generated by AI |
call.duration | integer | Call duration in seconds |
call.format | string | Call modality: voip, video, whatsapp, etc. |
call.user | object | The MeetRox agent who made the call |
call.user.primary_group | object | null | The agent's primary team/group, if configured |
call.call_type | object | The call type assigned to the conversation |
call.attendees | array | List of attendees (internal and external), when available via calendar integration |
call.associations | object | CRM records linked to this call (companies, contacts, deals, leads, custom objects, activities). Empty until the CRM linking stage completes. |
call.associations.*.system | string | CRM system name (e.g., hubspot, salesforce) |
call.associations.*.system_id | string | Record ID in the external CRM |
call.associations.*.label | string | Display name of the CRM record |
call.associations.*.url | string | null | Link to the record in the CRM |
call.interaction_metrics | object | Speech analytics for the conversation |
call.interaction_metrics.rep_talk_ratio | float | Fraction of call time the rep was speaking (0.0–1.0) |
call.interaction_metrics.exchanges | integer | Number of turn-taking exchanges in the conversation |
call.interaction_metrics.longest_rep_monologue | integer | Longest uninterrupted rep speech, in seconds |
call.interaction_metrics.longest_customer_story | integer | Longest uninterrupted customer speech, in seconds |
call.interaction_metrics.silence_percentage | float | Fraction of the call with silence (0.0–1.0) |
call.ai_score | integer | null | Overall AI score for the call (0–100). null until the scorecard stage completes. |
call.summary | object | null | AI-generated summary. null until the summary stage completes. Structure varies by workspace summary mode. |
call.scorecard | object | null | Scorecard with AI-answered questions. null until the scorecard stage completes, or if no scorecard is configured for the call type. |
call.scorecard.categories[].questions[].answer | string | null | "yes", "no", "n/a", or null if not answered |
call.transcription | string | null | Full call transcript as plain text, with speaker turns separated by newlines. null until the transcription stage completes. |
call.phrase_trackers | array | Tracked keywords/phrases that appeared in this call. Only includes phrases with at least one occurrence |
Managing Your Webhook Endpoints
Once webhooks are enabled for your workspace, you can manage your endpoints — add URLs, configure event filters, view delivery logs, and retry failed deliveries — through the Svix Consumer Portal, accessible from your workspace settings in MeetRox.
Delivery and Retries
Svix attempts delivery immediately after an event is dispatched. If your endpoint returns a non-2xx response, Svix will retry with exponential backoff over the following hours. You can also manually trigger retries from the Consumer Portal.
To acknowledge a webhook, return any 2xx HTTP status code from your endpoint.
Security: Verifying Webhook Signatures
Each webhook request is signed by Svix. To verify that a request originates from MeetRox, validate the svix-signature header using the signing secret shown in the Consumer Portal.
Svix provides official verification libraries for most languages. See the Svix documentation for implementation details.
Updated 4 months ago
