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:

StageWhen it firesFields populated
TranscriptionShortly after the call audio is processedtranscription, interaction_metrics
CRM linkingAfter the call is matched to records in your CRMassociations
AI SummaryAfter the AI-generated summary is readysummary, title (if AI-generated)
ScorecardAfter AI scorecard answers are computedscorecard, 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 patternTriggered by
call-{id}-processed-deliver_transcriptionTranscription complete
call-{id}-processed-deliver_retry_crm_linkCRM linking complete
call-{id}-processed-deliver_summaryAI summary complete
call-{id}-processed-deliver_scorecardScorecard 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

Dispatched 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

FieldTypeDescription
event_typestringAlways call.processed.full.v2
event_idstringUnique identifier for this dispatch. Format: call-{id}-processed-{stage}. See Processing Stages for the possible values.
timestampstringISO 8601 datetime of when the webhook was dispatched
call.idintegerMeetRox call ID
call.urlstringDirect URL to the call in the MeetRox interface
call.timestampstringISO 8601 datetime of when the call occurred
call.titlestringCall title, either set manually or generated by AI
call.durationintegerCall duration in seconds
call.formatstringCall modality: voip, video, whatsapp, etc.
call.userobjectThe MeetRox agent who made the call
call.user.primary_groupobject | nullThe agent's primary team/group, if configured
call.call_typeobjectThe call type assigned to the conversation
call.attendeesarrayList of attendees (internal and external), when available via calendar integration
call.associationsobjectCRM records linked to this call (companies, contacts, deals, leads, custom objects, activities). Empty until the CRM linking stage completes.
call.associations.*.systemstringCRM system name (e.g., hubspot, salesforce)
call.associations.*.system_idstringRecord ID in the external CRM
call.associations.*.labelstringDisplay name of the CRM record
call.associations.*.urlstring | nullLink to the record in the CRM
call.interaction_metricsobjectSpeech analytics for the conversation
call.interaction_metrics.rep_talk_ratiofloatFraction of call time the rep was speaking (0.0–1.0)
call.interaction_metrics.exchangesintegerNumber of turn-taking exchanges in the conversation
call.interaction_metrics.longest_rep_monologueintegerLongest uninterrupted rep speech, in seconds
call.interaction_metrics.longest_customer_storyintegerLongest uninterrupted customer speech, in seconds
call.interaction_metrics.silence_percentagefloatFraction of the call with silence (0.0–1.0)
call.ai_scoreinteger | nullOverall AI score for the call (0–100). null until the scorecard stage completes.
call.summaryobject | nullAI-generated summary. null until the summary stage completes. Structure varies by workspace summary mode.
call.scorecardobject | nullScorecard with AI-answered questions. null until the scorecard stage completes, or if no scorecard is configured for the call type.
call.scorecard.categories[].questions[].answerstring | null"yes", "no", "n/a", or null if not answered
call.transcriptionstring | nullFull call transcript as plain text, with speaker turns separated by newlines. null until the transcription stage completes.
call.phrase_trackersarrayTracked 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.


Did this page help you?