How to get Mixed Video MP4 (Async)
Mixed video is enabled by default for all bots.
This guide is for you if you want to view the full audio and video recording of the meeting.
Platforms Support
Platform | |
---|---|
Zoom | ✅ |
Microsoft Teams | ✅ |
Google Meet | ✅ |
Webex | ✅ |
Slack Huddles (Beta) | ✅ |
Go-To Meeting (Beta) | ✅ |
Recording Specifications
- Resolution: 1280x720 (720p)
- FPS: 30 FPS
- Bitrate: 2 Mbps
Implementation
Step 1: Create a bot
Mixed video is enabled by default, so there are no additional parameters needed in your request.
curl --request POST \
--url https://us-east-1.recall.ai/api/v1/bot \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--header 'authorization: YOUR_RECALL_API_KEY' \
--data '
{
"meeting_url": "YOUR_MEETING_URL"
}
'
const response = await fetch("https://us-east-1.recall.ai/api/v1/bot", {
method: "POST",
headers: {
"accept": "application/json",
"content-type": "application/json"
"authorization": "YOUR_RECALL_API_KEY" // Update this
},
body: JSON.stringify({
meeting_url: "YOUR_MEETING_URL", // Update this
recording_config: {
video_mixed_layout: "gallery_view_v2", // Add this to your request body
video_separate_mp4: {} # Add this to your request body
}
})
});
if (!response.ok) {
throw new Error(`Error: ${response.status} ${response.statusText}`);
}
const data = await response.json();
import requests
response = requests.post(
"https://us-east-1.recall.ai/api/v1/bot",
json={
"meeting_url": "YOUR_MEETING_URL", # Update this
"recording_config": {
"video_mixed_layout": "gallery_view_v2" # Add this to your request body
"video_separate_mp4": {} # Add this to your request body
}
},
headers={
"accept": "application/json",
"content-type": "application/json",
"authorization": "YOUR_RECALL_API_KEY" # Update this
}
)
if not response.ok:
errorMessage = f"Error: {response.status_code} - {response.text}"
raise requests.RequestException(errorMessage)
result = response.json()
Step 2: Retrieve the recording
Once the call has ended, you can retrieve its recording with the Retrieve Bot API endpoint.
curl --request GET \
--url https://us-east-1.recall.ai/api/v1/bot/YOUR_RECALL_BOT_ID/ \
--header 'Authorization: YOUR_RECALL_API_KEY' \
--header 'accept: application/json'
const recall_bot_id = 'YOUR_RECALL_BOT_ID' // Update this
const recall_api_key = 'YOUR_RECALL_API_KEY' // Update this
const get_recall_bot = async (args: { recall_bot_id: string, recall_api_key: string }) => {
const { recall_bot_id } = args
const bot_response = await fetch(`https://us-east-1.recall.ai/api/v1/bot/${recall_bot_id}`, {
method: "GET",
headers: {
"accept": "application/json",
"content-type": "application/json",
"authorization": recall_api_key
}
});
if (!bot_response.ok) {
throw new Error(`Error: ${bot_response.status} ${bot_response.statusText}`);
}
return await bot_response.json();
}
const recall_bot = await get_recall_bot({ recall_bot_id, recall_api_key });
import requests
recall_bot_id = 'YOUR_RECALL_BOT_ID' # Update this
recall_api_key = 'YOUR_RECALL_API_KEY' # Update this
def get_recall_bot(args: dict):
recall_bot_id = args.get("recall_bot_id")
recall_api_key = args.get("recall_api_key")
url = f"https://us-east-1.recall.ai/api/v1/bot/{recall_bot_id}"
headers = {
"accept": "application/json",
"content-type": "application/json",
"authorization": recall_api_key
}
response = requests.get(url, headers=headers)
if not response.ok:
raise Exception(f"Error: {response.status_code} {response.reason}")
return response.json()
recall_bot = get_recall_bot({"recall_bot_id": recall_bot_id, "recall_api_key": recall_api_key})
The bot will have an array of recordings in the bot.recording
field as defined in the Retrieve Bot 200 response.
The mp4 recording itself is located in the video_mixed
object in the media_shortcuts
field of the recording object. In the data
field, you'll see a download_url
. You can download this recording or use the download_url
as the source for an HTML video element in your application's UI. For detailed implementation examples and best practices, see our Video Playback Guide.
{
"id": "95db53d7-47f6-4d49-be61-dd4481038958",
...,
"recording": "824ad909-8736-4bb1-92d8-1639aa297cd2",
"recordings": [
{
"id": "824ad909-8736-4bb1-92d8-1639aa297cd2",
...
"media_shortcuts": {
"video_mixed": {
"data": {
"download_url": "https://recallai-production-bot-data.s3.amazonaws.com/_workspace-8ef4bed2-e139-4449-af6a-e26d2d231555/recordings/824ad909-8736-4bb1-92d8-1639aa297cd2/video_mixed/39718d95-a981-450e-b16c-170b9b153d9c/bot/95db53d7-47f6-4d49-be61-dd4481038958/AROA3Z2PRSQAET6FSC3NG%3Ai-0d05e48eb769f7e40/video.mp4?AWSAccessKeyId=ASIA3Z2PRSQAP7V2VTVW&Signature=1qwkdS2KLwxKxjkbqk9fma5lb%2F8%3D&x-amz-security-token=IQoJb3JpZ2luX2VjEKT%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMSJIMEYCIQC01t0cqG%2BJ%2BaXuQliX6hx3ilkkq5kA7cze1y4MEDrgzgIhAO8zSkOKHBa0GsZufper%2FgO%2FJzp4C%2BUqR1o6DXv4YfNpKroFCE0QABoMODExMzc4Nzc1MDQwIgySUiwgZFsPTUKB8MAqlwXPG%2BVAI41s3Ag1SJsLPP5vX8IGxpgE2sT4pj3Z%2B8GnzRdfQCtWYl9ZUbzQ%2FPgAzl7MZfgtKcZ8Sn8qttsGbQIdx3McIqr1XaV7MxibaRETywjeaQGeEFDZQNbSjvvw7zsryRAcB5FKY8ZaTTrbnyrRwSq%2BPTovOh98DNzXteNDNvh6azntys7HcuTfUHrRmp%2FgmmFGIRCdU96x1qvmdqvIJKprWpVuoAmdGVtHR6ArtVtBdxKC%2BjUSivXOdlSkYNTJ0wYXyMmMRLYzNezDEIqrHNahsz%2BcnNfP01rFLlhIfP64gWUgGWMrQb%2FY4q7stPUBTPq2MQDdNC0tE2zHyb1XYzcS0vvpyen8GfUwK5SQhwzmCYEaq648%2FUPvLVR6Akd1CpByAE6zjVFB7G5mwCWoC02Mmua8%2F9t1vToSHB7JWwBdNtwua4glUJ01kzjqkFdACzlJB31FpUSpxkwSPl1Vi1v%2FQa4jvcdm0DtPA6%2B1%2BAI98ddx81WjLkgePqwlEIcH7rNTIlZLElIzjesNGWIFFMSazm1PuntVv9LnWtUttHWmVjlF%2FCyZYF2pevbnaKw%2FmKqWPUT0U92RjrFvaPyZmJ1YQZcOzTg1t8VdeKwMqj5pX2mfAD2MPPZAk5rDGMhjitBKYPnNy%2FP31HsUDuxwKjyoKrI4QelcYUTcAgIT2%2FQUIaBZ%2Bc90hUt7cS9qk8hQzKKZfQuM%2FhTiCGcBS5CE8KBPd9QUtucTYKzzW3e0%2FlYG3u8ha2gBqmR%2FN8%2FiiT0ewVZaFeoDttjnZ1ySN21hLqIxvh%2Fn4rcPn%2FooRjlHOjbrrkX5q%2Bw2eVhOxby0E%2BDqk6HXTHBfC7xlLQI9vCDP3Rc045qaPbToTLYXafExMTdpDVzLGaEwweedugY6sAEebI5sdpC9i3I0wJL%2BYPHKQz9MJzjPc88cN4%2FtHT5XEhQJMCXeakGl3Gbgu%2F1G9dGX%2FtlVwUVZjABUKCNt32RzDbfKQgHa28dgkphubSlA7SxKIObbIJm3o3xJuV%2Fp93qHFK%2FgyWQ9w5CoqPFJJZuMEYyoZZLyhip8su%2Bdnp9eveV7qkHYLFEec4BVu54yImfqf5kYVWumGM8WMcFuuwsE4GuSuRFSeatxXInJs6JBEg%3D%3D&Expires=1732766680"
},
"format": "mp4",
...
},
...
}
}
]
}
Updated about 13 hours ago