---
title: "Download call recordings"
description: "Returns pre-signed URLs for Call AI audio and video recordings, along with transcript data."
contentType: "api-reference"
url: "https://developer.mindtickle.com/docs/call-ai/graphql-api/download-call-recordings/"
---

## Prerequisites

1. [Authentication](/docs/call-ai/authentication/): A valid Call AI access token.
2. [Query call data](/docs/call-ai/graphql-api/query-call-data/): The recordingsV2 parameters and output fields this query uses.

## Endpoint

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

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

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

## Request

Query the `mediaUrls` field within the `recordingsV2` query. The query takes the same parameters as [Query call data](/docs/call-ai/graphql-api/query-call-data/#request). The download example sets `movieReady` and `transcriptReady` to `true`. You can retrieve the transcript with `transcription` and meeting host details with `host`.

### Request example

```graphql
{
  recordingsV2(
    first: 1
    after: "0"
    movieReady: true
    transcriptReady: true
    sort: { sortType: "start_date", sortOrder: asc }
    filters: { categoryId: "1" }
  ) {
    edges {
      node {
        id
        title
        date
        duration
        transcription {
          meetingId
          languageDirection
          chunks {
            displayId
            chunkId
            text
            startTime
            endTime
            speakers {
              id
              name
              emails
              type
            }
          }
        }
        host {
          id
          name
          emails
          type
        }
        mediaUrls {
          streamingSource
          downloadSource
          label
        }
      }
    }
    pageInfo {
      hasNextPage
      total
      endCursor
    }
  }
}
```

## Response

| Field | Description |
| --- | --- |
| `mediaUrls.streamingSource` | URL for online playback. |
| `mediaUrls.downloadSource` | Pre-signed URL for downloading the file. |
| `mediaUrls.label` | Quality type, for example "HD" or "Audio". |
| `host` | Details of the meeting host, including the host ID, name, emails, and type. |
| `transcription` | Transcript data returned inline, including meeting ID, language direction, and timestamped chunks with speaker details. |
| `pageInfo` | Pagination information requested alongside `edges`: `hasNextPage`, `total`, and `endCursor`. |

## Notes

- **Permissions:** To access the download URLs for media files, you must have a specific permission enabled for your client ID. Contact [Mindtickle Support](mailto:support@mindtickle.com) to request this permission.
- **URL format:** The `downloadSource` URL is a pre-signed URL. You may need to prepend `https:` to it if it is returned without the protocol.
- **Expiration:** The pre-signed download URL is valid for 24 hours. Complete the download within that window.
- **Rate limits:** The recommended rate limit for downloading recordings is about 1 meeting per minute. Add a wait time of 50 to 60 seconds between successive queries to avoid rate limit errors.
- **Bulk downloads:** Iterate through your recordings with pagination using `first` and `after`, extract the `downloadSource` URL for each recording, download the media file from that URL, save the returned `transcription` data separately, wait between requests, for example 60 seconds, to respect the rate limit, and include retry logic to handle failures or timeouts.
- **Use cases:** Migrating data, creating offline backups, and retrieving data after access to the Call AI user interface has ended.

## Related

- [Query call data](/docs/call-ai/graphql-api/query-call-data/): Fetch the rest of the recording metadata in the same query.
