Calls

List and retrieve conversations recorded and analyzed by MeetRox.

Calls

Retrieve conversations recorded and analyzed by MeetRox, including transcriptions, AI summaries, speech metrics, and CRM associations.


List Calls

GET /v1/calls

Returns a paginated list of calls for the authenticated workspace. The list response omits the full analysis, scorecard, and evaluator details — use Get Call for the complete record.

Query Parameters

Pagination

The endpoint uses cursor-based pagination.

ParameterTypeDescription
firstintegerNumber of records to return (default: 50, max: 100)
afterstringCursor to fetch the next page (use end_cursor from the previous response)
lastintegerNumber of records to return from the end
beforestringCursor to fetch the previous page (use start_cursor from the previous response)

Filtering

Calls can be filtered by the following fields. Filters are passed as query parameters in the format filters[0][field]=<field>&filters[0][op]=<operator>&filters[0][value]=<value>.

FieldTypeDescription
idintegerCall ID
typestringFormat — audio, video, file, chat, or group_chat
titlestringCall title
timestampdatetimeWhen the call occurred (ISO 8601)
inserted_atdatetimeWhen the call was created in MeetRox
updated_atdatetimeWhen the call was last updated
durationfloatDuration in seconds
publicbooleanWhether the call is publicly shared
ai_scorefloatAI-generated quality score (0–100)
scorefloatHuman review score (0–100)
lead_namestringName of the prospect
lead_companystringCompany of the prospect
wonbooleanWhether the associated deal was won
rep_talk_ratiofloatFraction of the call time the rep was speaking (0–1)
call_exchangesfloatNumber of speaking turns
longest_rep_monologuefloatLongest uninterrupted rep speech in seconds
longest_lead_storyfloatLongest uninterrupted prospect speech in seconds
silence_percentagefloatFraction of the call with silence (0–1)

Sorting

ParameterDescription
order_by[]Fields to sort by. Sortable: id, agent_name, ai_score, lead_name, lead_company, duration, timestamp, inserted_at, updated_at
order_directions[]asc or desc for each field in order_by[]

Default order: updated_at desc, id desc.

Example

curl "https://api.meetrox.ai/v1/calls?first=20" \
  -H "x-api-key: YOUR_API_KEY"

Response

{
  "data": [
    {
      "id": 42,
      "workspace_id": 7,
      "title": "Demo call with Acme Corp",
      "duration": 1823.4,
      "timestamp": "2026-05-15T14:30:00Z",
      "inserted_at": "2026-05-15T14:55:10Z",
      "updated_at": "2026-05-15T15:42:00Z",
      "format": "video",
      "chat": null,
      "public": false,
      "source": {
        "system": "google_meet",
        "system_id": "abc-xyz-123"
      },
      "url": "https://app.meetrox.com/7/calls/42",
      "agent": {
        "id": 5,
        "name": "Ana Silva",
        "email": "[email protected]"
      },
      "attendees": ["[email protected]"],
      "type": {
        "id": 3,
        "name": "Demo",
        "description": "Product demonstration calls",
        "association_mode": "crm_deal"
      },
      "interaction_metrics": {
        "rep_talk_ratio": 0.48,
        "call_exchanges": 32,
        "longest_rep_monologue": 87.2,
        "longest_lead_story": 54.1,
        "silence_percentage": 0.06,
        "ai_score": 82.5,
        "score": 78.0
      },
      "business_info": {
        "lead_name": "John Doe",
        "lead_company": "Acme Corp",
        "won": null
      },
      "associations": {
        "crm_deals": [
          {
            "system": "hubspot",
            "system_id": "98765432",
            "label": "Acme Corp - Enterprise Deal",
            "url": "https://app.hubspot.com/deals/98765432"
          }
        ],
        "crm_contacts": [
          {
            "system": "hubspot",
            "system_id": "12345",
            "label": "John Doe",
            "url": null
          }
        ]
      }
    }
  ],
  "meta": {
    "page_size": 20,
    "has_next_page": true,
    "has_previous_page": false,
    "start_cursor": "g2wAAAABaAJtAAAACGNhbGxfaWRhKm4=",
    "end_cursor": "g2wAAAABaAJtAAAACGNhbGxfaWRhMm4=",
    "errors": [],
    "params": {}
  }
}

Get Call

GET /v1/calls/:id

Returns the full record for a single call, including the AI-generated analysis (summary and transcription), scorecard, evaluator scores, signed media URLs, and the conversation for chat-type calls.

Path Parameters

ParameterTypeDescription
idintegerThe ID of the call

Example

curl https://api.meetrox.ai/v1/calls/42 \
  -H "x-api-key: YOUR_API_KEY"

Response

The response includes all fields from the list endpoint, plus:

{
  "data": {
    "id": 42,
    "title": "Demo call with Acme Corp",
    "media": {
      "audio_url": "https://signed-url.s3.amazonaws.com/audio/call-42.mp3?...",
      "video_url": null
    },
    "chat": null,
    "analysis": {
      "summary": {
        "topics": [
          { "title": "Pricing", "content": "The prospect asked about annual plans..." },
          { "title": "Next steps", "content": "Follow-up demo scheduled for Friday." }
        ]
      },
      "transcription": "Ana: Good afternoon, John. Thanks for joining...\nJohn: Of course, happy to be here..."
    },
    "scorecard": {
      "id": 1,
      "name": "Demo Scorecard",
      "active": true,
      "categories": [
        {
          "id": 10,
          "name": "Opening",
          "sort_number": 1,
          "questions": [
            {
              "id": 100,
              "text": "Did the rep introduce themselves?",
              "weight": 1.0,
              "default_answer": "n/a"
            }
          ]
        }
      ]
    },
    "evaluators": [
      {
        "id": 201,
        "type": "system",
        "score": 82.5,
        "name": "AI",
        "user_id": null,
        "email": null,
        "answers": [
          {
            "id": 301,
            "question_id": 100,
            "category_id": 10,
            "answer": "yes"
          }
        ]
      }
    ]
  }
}

Association Types

The associations object groups linked CRM records by type:

KeyDescription
crm_dealsCRM deals/opportunities
crm_contactsCRM contacts
crm_accounts / crm_companiesCRM companies/accounts
crm_leadsCRM leads
crm_activitiesCRM activities
crm_eventsCRM calendar events
crm_ticketsCRM tickets
crm_custom_objectsCustom CRM objects
csm_contactsCSM contacts
csm_customersCSM customers
csm_tasksCSM tasks

Each association contains:

FieldTypeDescription
systemstringIntegration name (e.g., hubspot, salesforce, pipedrive)
system_idstringID of the record in the external system
labelstringHuman-readable label
urlstring | nullDirect link to the record in the CRM

Evaluator Answer Values

Scorecard answers are returned as strings:

ValueMeaning
"yes"Positive
"no"Negative
"n/a"Not applicable

Media URLs

The media object contains signed URLs for the call recordings:

FieldTypeDescription
audio_urlstring | nullSigned URL for the audio recording. null if no audio file exists for this call.
video_urlstring | nullSigned URL for the video recording. null if no video file exists for this call.

Signed URLs expire after 30 minutes. Do not cache or store these URLs — always fetch a fresh call record when you need access to the recording.


Chat Conversations

For chat-type calls (WhatsApp conversations), the chat object carries the
conversation: metadata, the participant list and the full message history. For
every other call type, chat is null.

Availability. Before September 2026 this field was always null, including
for chat calls. If you integrated against it previously and found it empty,
that was the cause. It is now populated.

Only on Get Call. The key is present in the List Calls response too, but it
is always null there. Listing endpoints do not carry conversations, since a
direct message stores its entire history in this field. Fetch the single call
to read a conversation.

No audio metrics. Chat calls have no speech analysis, so every field in
interaction_metrics is null.

Two shapes, one field

The payload depends on whether the conversation is a direct message or a group.
Read format on the call, or is_group inside the object, before parsing.

Call formatchat shape
chatDirect message (one contact, one rep)
group_chatWhatsApp group (any number of participants)

The two shapes differ in how senders and participants are identified, so code
written against one will not read the other correctly:

chat (direct)group_chat (group)
Participant id"client" or "internal"The participant's WhatsApp ID
Participant type"external", "internal""contact", "agent", "participant", "bot"
Message sender"client" or "internal"The sender's WhatsApp ID

A check like sender === "client" works on a direct message and silently fails
on a group. Branch on format first.

Denied groups. A WhatsApp group whose processing was denied in MeetRox
returns chat: null, even though the call itself is returned normally. Here
null means withheld, not empty.

App-only fields. viewer_phone on the object and is_viewer on each
participant are not part of this API. They describe the signed-in user looking
at the conversation, and this API authenticates by key, not by user.


Direct messages (format: "chat")

{
  "chat_id": "5511*****[email protected]",
  "channel": "whatsapp",
  "is_group": false,
  "conversation_type": "direct",
  "processing_status": "approved",
  "participants": [
    {
      "id": "client",
      "type": "external",
      "name": "5511*****1234",
      "profile_pic": null,
      "company": null,
      "email": null
    },
    {
      "id": "internal",
      "type": "internal",
      "name": "Ana Silva",
      "user_id": 15,
      "profile_pic": null,
      "company": null,
      "email": null,
      "phone": "",
      "is_owner": true
    }
  ],
  "messages": [
    {
      "id": "3EB0A1B2C3D4E5F6",
      "sender": "client",
      "timestamp": "2026-05-20T14:30:00Z",
      "type": "text",
      "text": "Olá, gostaria de saber mais sobre os planos.",
      "transcription": null,
      "url": null
    },
    {
      "id": "3EB0F1E2D3C4B5A6",
      "sender": "internal",
      "timestamp": "2026-05-20T14:31:05Z",
      "type": "image",
      "text": null,
      "transcription": null,
      "url": "https://media.example.com/image.jpg"
    }
  ]
}

A direct message is returned exactly as MeetRox stored it, so its participant
objects may carry keys beyond the ones shown here depending on the integration
that produced the conversation.


Groups (format: "group_chat")

Group conversations are assembled from participant and message records, so the
payload is stable and every field below is documented.

{
  "chat_id": "1203630*******@g.us",
  "channel": "whatsapp",
  "is_group": true,
  "conversation_type": "group",
  "processing_status": "approved",
  "participants": [
    {
      "id": "5511*****[email protected]",
      "type": "contact",
      "name": "Maria Almeida",
      "push_name": "Maria Almeida",
      "first_seen_at": "2026-05-20T14:28:41Z"
    },
    {
      "id": "5511*****[email protected]",
      "type": "agent",
      "name": "Ana Silva",
      "phone": "5511*****5678",
      "user_id": 15,
      "first_seen_at": "2026-05-20T14:29:02Z"
    }
  ],
  "messages": [
    {
      "id": "3EB0A1B2C3D4E5F6",
      "sender": "5511*****[email protected]",
      "timestamp": "2026-05-20T14:30:00Z",
      "type": "text",
      "text": "Bom dia! Conseguem me enviar a proposta?",
      "transcription": null,
      "url": null
    },
    {
      "id": "3EB0F1E2D3C4B5A6",
      "sender": "5511*****[email protected]",
      "timestamp": "2026-05-20T14:31:05Z",
      "type": "audio",
      "text": null,
      "transcription": "Bom dia, Maria. Já estou enviando a proposta agora.",
      "url": "https://media.example.com/audio/3EB0F1E2D3C4B5A6.ogg"
    }
  ]
}
Conversation fields
FieldTypeDescription
chat_idstringThe conversation's ID on the originating platform
channelstringSource of the conversation (e.g. whatsapp)
is_groupbooleantrue for a group, false for a direct message
conversation_typestring"group" or "direct"
processing_statusstring"pending", "approved" or "denied". A group only reaches this payload as pending or approved, since a denied group returns chat: null
Participant fields
FieldTypeDescription
idstringThe participant's ID on the originating platform
typestringcontact (external person), agent (a MeetRox user's own number), participant (member not resolved to either), bot
namestring | nullDisplay name. Falls back to push_name when no explicit name is known
push_namestring | nullName as set by the participant on WhatsApp
phonestring | nullPhone number, when known
first_seen_atstring | nullISO 8601 datetime of the participant's first message in this conversation
user_idintegerPresent only when the participant is a MeetRox user. Matches the id in the Users endpoint

Participants are deduplicated by id, so each person appears once no matter how
many messages they sent.

Message fields
FieldTypeDescription
idstringMessage ID from the originating platform
senderstringIdentifies the sender. Matches a participant's id
timestampstringISO 8601 datetime of when the message was sent
typestringtext, image, video, document or audio
textstring | nullText content. null for media messages
transcriptionstring | nullWhat the media said or showed, produced by MeetRox. null for text messages, and for media not yet processed
urlstring | nullLink to the media file. null for text messages

Messages are returned oldest first, with a stable tiebreaker for messages
delivered within the same second, so the order does not change between requests.

Media without transcription is media without content. A url alone tells
you a file was exchanged, not what was in it. If you are feeding conversations
into search, analytics or an AI pipeline, read transcription as the content of
audio and image messages.


Did this page help you?