---
title: "Query call data"
description: "Returns Call AI recordings and their metadata, participants, transcripts, themes, stats, and scores with the recordingsV2 query."
contentType: "api-reference"
url: "https://developer.mindtickle.com/docs/call-ai/graphql-api/query-call-data/"
---

## Prerequisites

1. [Authentication](/docs/call-ai/authentication/): A valid Call AI access token.

## Endpoint

```http
POST /public/graphapi
```

Base URL: `https://api-gateway.callai.mindtickle.com`.

Headers: `Authorization: Bearer ACCESS_TOKEN`, `Content-Type: application/json`.

## Request

The primary query for retrieving data is `recordingsV2`. This query lets you fetch details of all the recordings.

| Parameter | Required | Description |
| --- | --- | --- |
| `first` | Required | Specifies the number of recordings to fetch. |
| `after` | Required | Indicates the cursor position to start fetching from. Required for pagination. |
| `filters` | Required | Defines criteria to filter the results. Accepts a `RecordingsV2Filters` object with the properties listed below. |
| `filters.categoryId` | Required | A string denoting the category of recordings. Values: `1` for all accessible recordings, including the recordings of your team members, `2` for recordings where you were a participant, `3` for recordings shared with you, `4` for recordings bookmarked by you, `5` for recordings where you and your team members participated, and `6` for recordings shared by you. |
| `filters.personIds` | Optional | An array of IDs to filter by specific people. |
| `filters.date` | Optional | Filters by a specific date range. Requires an array of two values: start time and end time. |
| `filters.duration` | Optional | Filters recordings exceeding a minimum duration. Requires an array containing a single integer value in milliseconds. |
| `filters.title` | Optional | Filters recordings by matching the title string. |
| `filters.themeIds` | Optional | An array of IDs to filter by specific themes. |
| `filters.libraryIds` | Optional | An array of IDs to filter by specific libraries. |
| `filters.callScore` | Optional | An array of integers to filter by specific call scores. |
| `filters.recorderType` | Optional | An array of integers to filter by recorder type. |
| `filters.language` | Optional | An array of strings to filter by language. |
| `sort` | Optional | Defines the sorting order for the response. Pass an array where each element contains `sortOrder` and `sortType`. |
| `sort.sortOrder` | Not specified | `asc` or `desc`. |
| `sort.sortType` | Not specified | `score`, `start_date`, `call_score`, or `last_shared`. |

Provide both `sortOrder` and `sortType` when sorting, as shown below.

### Request example

```graphql
{
  recordingsV2(
    first: 1
    after: "0"
    filters: { categoryId: "1" }
    sort: { sortType: "start_date", sortOrder: desc }
  ) {
    pageInfo {
      hasNextPage
      endCursor
    }
    edges {
      node {
        id
        mediaUrls {
          streamingSource
        }
      }
    }
  }
}
```

For subsequent pages, pass `data.recordingsV2.pageInfo.endCursor` as `after` while `hasNextPage` is `true`. Keep the filters and sorting unchanged. Check [GraphQL errors](/docs/call-ai/graphql-api/#error-handling) before advancing; stop if a required continuation cursor is missing or repeats.

## Response

The following fields are available within the `node` object, a nested field of `edges`, returned by the `recordingsV2` query.

| Field | Description |
| --- | --- |
| `id` | A unique numerical identifier for the meeting. |
| `title` | The title of the meeting as it appears in the calendar event. |
| `description` | The description of the meeting as it appears in the calendar event. |
| `date` | The scheduled date and timestamp of the meeting, for example `2025-11-02T09:00:00.000Z`. |
| `actualStartedAt` | The time when any participant actually joined the meeting. This may differ from the scheduled start time. |
| `aspectRatio` | The video display ratio, for example `16:9` for widescreen. Use this to size video players so recordings display correctly in your interface. |
| `actualEndedAt` | The time when all participants left the meeting. |
| `isNew` | Currently documented as returning `null` rather than a boolean value. |
| `duration` | The total duration of the meeting in seconds, for example `1385.72`. |
| `sharedBy` | The name of the user who shared the meeting. |
| `sharedAt` | The timestamp indicating when the meeting was shared. |
| `sharedWithInternalV2` | A list of internal users, within the organization, with whom the meeting was shared. Returns an array of `InternalShareObjectV2`. See Notes. |
| `sharedWithExternal` | A list of external users, outside the organization, with whom the meeting was shared. Returns an array of `ExternalShareUser`, where each element contains `id`, a unique share identifier, `email`, the email address of the recipient, and `externalShareObject`, which contains `sharedBy`, `allowDownload`, `accessRemoved`, and `externalLink`. Parameter: `showAccessRemoved`, boolean, default `false`. |
| `speakerEventsV2` | Captures every instance a participant speaks. Multiple events may trigger for the same participant. Returns an array of `SpeakerEventV2`, one per speaker, containing `speaker`, the `ParticipantV2` object who triggered the event, `events`, an array of `SpeakerEvents` detailing `startTime` in seconds, `endTime` in seconds, and `startChunk`, `time`, the total aggregated speaking time for this speaker, and `percentage`, the percentage of the total meeting time this speaker talked. |
| `participantsV2` | Details of all meeting attendees. Returns an array of `ParticipantV2`, containing subfields such as `id`, `name`, `email`, and `type`. Parameters: `excludeBots`, boolean, specify whether to exclude the Call AI bot, and `excludeUnknowns`, boolean, specify whether to exclude unidentified participants. |
| `transcription` | The full meeting transcript. Contains `meetingId`, the ID of the meeting, `chunks`, an array of `TranscriptChunk` objects each containing `text`, `startTime`, `endTime`, and `speakerEmails`, and `languageDirection`, which indicates text direction with the values `ltr` for left to right or `rtl` for right to left. |
| `account` | Customer account information from your CRM, for example Salesforce or HubSpot. Contains subfields including `id`, `name`, and `stage`, for example "Prospect" or "Customer". Use this to link recordings to customer accounts. |
| `themesV2` | Details of all themes detected during the meeting. Returns a `MeetingThemeV2` object containing `meetingId`, the ID of the meeting, `spoken`, an array of `MeetingThemeDetails` for themes spoken by internal reps, `heard`, an array of `MeetingThemeDetails` for themes spoken by external participants, and `filler`, an array of `MeetingThemeDetails` for filler words spoken by internal participants. Each `MeetingThemeDetails` object includes `id`, `themeDetails` with name, keywords, and counts, and `keywordOccurrence`. |
| `aggregatedThemes` | A consolidated view of spoken and heard themes, similar to `themesV2`. Returns an array of `AggregatedThemes` containing `type`, the `THEME_TYPE` of `SPOKEN`, `HEARD`, or `ALL`, and `themes`, an array of `AggregatedTheme` objects containing `theme` with id, name, and keywords, `startChunk`, `endChunk`, `startTime`, and `endTime`. If `type` is `ALL`, the `themes` field includes both. Parameter: `types`, an input array of `THEME_TYPE` to specify which themes to request. |
| `mediaUrls` | URLs to access the recording. Includes `streamingSource`, the URL for online playback, `downloadSource`, the URL for downloading the file, and `label`, the quality type, for example "HD" or "Audio". |
| `isBookmarked` | Returns `true` if you have bookmarked this recording. |
| `isDeleted` | Returns `true` if the recording has been deleted. |
| `stats` | Conversation analytics and engagement metrics. Includes `interchanges`, the number of speaker turn-taking occurrences, `avgPatienceTeam` and `avgPatienceProspect`, the average response time in seconds, `talktime`, the total team talk time in milliseconds with team talk percentage and team listen percentage, `questions`, team and prospect question arrays containing fields such as `displayId` and `chunkId`, and `longestMonologue`, the longest uninterrupted speaking segments for team and prospect. |
| `notes` | Your private, paginated notes on this recording. Returns an array of `Note` objects containing `id`, `noteEntities`, `type`, `content`, and `taggedTimestamps`. Parameters: `count`, how many notes to fetch, and `cursor`, the next cursor position for pagination. |
| `notesTaggedTimestamps` | A list of all video timestamps you have referenced in your notes. |
| `conversations` | Paginated one-on-one message threads about the recording. Returns an array of `Conversation` objects containing `id`, `author`, `recipient`, and an array of `messages`. Parameters: `count` and `cursor`. |
| `conversationsTaggedTimestamps` | All video timestamps referenced in conversation messages. |
| `discussions` | Paginated group discussion threads about this recording. Returns an array of `Discussion` objects containing an `id` and an array of `comments`. Parameters: `count` and `cursor`. |
| `discussionsTaggedTimestamps` | All video timestamps referenced in discussion comments. |
| `libraries` | Content libraries containing this recording. Includes `id`, `name`, `description`, `type`, which is `SCOPED` or `PUBLIC`, and creator user details. |
| `notesByIds` | Specific notes fetched without pagination. Parameter: `ids`, an array of note IDs. |
| `conversationsByIds` | Specific private conversation threads fetched without pagination. Parameter: `ids`, an array of conversation IDs. |
| `discussionsByIds` | Specific public group discussion threads fetched without pagination. Parameter: `ids`, an array of discussion IDs. |
| `snippets` | Shorter video clips created from this recording. Returns `id`, `startTime`, and `endTime`. Parameters: `contexts` and `snippetIds`. |
| `sharedWithMTDetails` | Status of sharing to the Mindtickle learning platform. Includes `status`, which is `SUCCESS`, `PENDING`, `FAILURE`, or `NOT_INITIATED`, `sharedBy`, and `sharedOn` timestamps. |
| `score` | AI-powered call quality scores and analysis. Includes `callScore`, `score`, `scoreLevel`, and `totalLevel`. |
| `host` | Information about the meeting organizer. Includes `id`, `name`, `emails`, `type`, which is `TEAM`, `PROSPECT`, or `UNKNOWN`, and a full `user` object if the host is a registered user. |
| `recorderType` | Numeric code indicating which recording tool was used in the meeting, for example Zoom or Google Meet. |
| `recordingType` | Returns `VIDEO` or `AUDIO`. Helps determine if video features such as thumbnails are available. |
| `thumbnailUrlV2` | Preview image URL for video recordings. Returns `null` for audio. Parameter: `type`, which currently only accepts `TEAM_FIRST`. |
| `allPermittedUsers` | Complete list of users who have permission to access the recording. Includes `id`, `name`, `email`, and `designation`. |
| `nextStepsV2` | AI-extracted action items from the meeting. Includes descriptions, timestamps of mentions, and user feedback on accuracy. |
| `meetingUrl` | Different URL formats for accessing the recording page. Includes `primary` for the main view, `embedded`, and `standalone` URLs. |
| `meetingType` | Categorizes the recording as `EXTERNAL`, with customers, or `INTERNAL`, team only. |
| `transcriptReady` | Returns `true` if transcription is complete and available. |
| `movieReady` | Returns `true` if the video is processed and ready for playback. |
| `language` | The primary language code for the recording, for example `en` for English or `es` for Spanish. |
| `internalAccessType` | Returns `ALL`, everyone in the company, or `DEFAULT`, restricted access. |
| `externalShareUrl` | Public URL for sharing outside your organization. Returns `null` if not shared. |
| `hasExternalSharePublicLink` | Returns `true` if a public share link exists, even if it is expired or revoked. |
| `keyMomentsV2` | AI-identified key moments from the meeting. Includes `timestamp`, `endTime`, `text` description, and `topic`. |
| `keyMomentsByIds` | Specific key moments fetched by ID. Parameter: `ids`, an array of key moment IDs. |
| `copilot` | Contains an `isEnabled` boolean indicating whether Mindtickle Copilot features are available for this recording. |
| `callSummary` | AI-generated meeting summary. Includes concise summary text, processing `state`, `errorCode`, and `genericFeedback`. |

## Notes

- **Behavior:** The response contains only the fields you request in the query.
- **Shared with internal users:** `sharedWithInternalV2` segregates recipients into two lists: `users`, onboarded Mindtickle users, and `emails`, users who are not onboarded but share the company email domain and are not Call AI users. Items in both lists include `snippet` and `sharedAt` metadata, items in the `users` list contain a `user` object, and items in the `emails` list contain an `email` address field.
- **Rate limits:** Use a batch size of fewer than 10 meetings where possible and wait at least 60 seconds between successive batches. See [Interacting with the API](/docs/call-ai/graphql-api/#interacting-with-the-api).
- **Errors:** A failed GraphQL request can still return HTTP `200 OK` with an `errors` array in the body. See [Error handling](/docs/call-ai/graphql-api/#error-handling).
- **Permissions:** You can only access data for call recordings you are authorized to view within Call AI.

## Related

- [Download call recordings](/docs/call-ai/graphql-api/download-call-recordings/): Retrieve pre-signed media URLs from the same query.
- [Refresh an access token](/docs/call-ai/authentication/refresh-an-access-token/): Refresh an expired token after checking the GraphQL authentication error.
