Recall.ai · Schema

BotRequest

Meeting BotsRecordingTranscriptionVideo ConferencingZoomGoogle MeetMicrosoft TeamsReal-TimeArtificial IntelligenceInfrastructure

Properties

Name Type Description
meeting_url string The url of the meeting. For example, https://zoom.us/j/123?pwd=456. This field will be cleared a few days after the bot has joined a call.
bot_name string The name of the bot that will be displayed in the call. *(Note: Authenticated Google Meet bots will use the Google account name and this field will be ignored.)*
join_at stringnull The time at which the bot will join the call, formatted in ISO 8601. This field can only be read from scheduled bots that have not yet joined a call.
recording_config object Configure the recording generated by the bot. Includes options for getting meeting transcript, the layout of the recorded video, when to start recording and more.
output_media object Settings for the bot output media.
automatic_video_output object Settings for the bot to output video. Image should be 16:9. Read more about this here: https://docs.recall.ai/docs/output-video-in-meetings
automatic_audio_output object Settings for the bot to output audio.
chat object Settings for the bot to send chat messages. *(Note: Chat functionality is only supported for Zoom, Google Meet and Microsoft Teams currently.)*
automatic_leave object
variant object Configure bot variants per meeting platforms, e.g. {"zoom": "web_4_core"}.
zoom object Zoom specific parameters
google_meet object Google Meet specific parameters
webex object Webex specific parameters
breakout_room object Configure how the bot handles breakout rooms. Currently, Zoom is supported.Examples: {"mode": "join_main_room"} | {"mode": "join_specific_room", "room_id": ""} | {"mode": "auto_accept_all_invite
metadata object
View JSON Schema on GitHub

JSON Schema

recall-ai-bot-request-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/recall-ai/main/json-schema/recall-ai-bot-request-schema.json",
  "title": "BotRequest",
  "x-generated": "2026-10-14",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/recall-ai-api-openapi.yml#/components/schemas/BotRequest",
  "type": "object",
  "properties": {
    "meeting_url": {
      "type": "string",
      "description": "The url of the meeting. For example, https://zoom.us/j/123?pwd=456. This field will be cleared a few days after the bot has joined a call."
    },
    "bot_name": {
      "type": "string",
      "minLength": 1,
      "default": "Meeting Notetaker",
      "description": "The name of the bot that will be displayed in the call.\n*(Note: Authenticated Google Meet bots will use the Google account name and this field will be ignored.)*",
      "maxLength": 100
    },
    "join_at": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time",
      "description": "The time at which the bot will join the call, formatted in ISO 8601. This field can only be read from scheduled bots that have not yet joined a call."
    },
    "recording_config": {
      "allOf": [
        {
          "$ref": "#/$defs/BotRecordingConfigRequest"
        }
      ],
      "nullable": true,
      "description": "Configure the recording generated by the bot. Includes options for getting meeting transcript,  the layout of the recorded video, when to start recording and more."
    },
    "output_media": {
      "allOf": [
        {
          "$ref": "#/$defs/OutputMediaRequest"
        }
      ],
      "nullable": true,
      "description": "Settings for the bot output media."
    },
    "automatic_video_output": {
      "allOf": [
        {
          "$ref": "#/$defs/AutomaticVideoOutputRequest"
        }
      ],
      "nullable": true,
      "description": "Settings for the bot to output video. Image should be 16:9. Read more about this here: https://docs.recall.ai/docs/output-video-in-meetings"
    },
    "automatic_audio_output": {
      "allOf": [
        {
          "$ref": "#/$defs/AutomaticAudioOutputRequest"
        }
      ],
      "nullable": true,
      "description": "Settings for the bot to output audio."
    },
    "chat": {
      "allOf": [
        {
          "$ref": "#/$defs/ChatRequest"
        }
      ],
      "nullable": true,
      "description": "Settings for the bot to send chat messages. \n*(Note: Chat functionality is only supported for Zoom, Google Meet and Microsoft Teams currently.)*"
    },
    "automatic_leave": {
      "allOf": [
        {
          "$ref": "#/$defs/AutomaticLeaveRequest"
        }
      ],
      "nullable": true
    },
    "variant": {
      "allOf": [
        {
          "$ref": "#/$defs/BotVariantRequest"
        }
      ],
      "nullable": true,
      "description": "Configure bot variants per meeting platforms, e.g. {\"zoom\": \"web_4_core\"}."
    },
    "zoom": {
      "allOf": [
        {
          "$ref": "#/$defs/ZoomRequest"
        }
      ],
      "nullable": true,
      "description": "Zoom specific parameters"
    },
    "google_meet": {
      "allOf": [
        {
          "$ref": "#/$defs/GoogleMeetRequest"
        }
      ],
      "nullable": true,
      "description": "Google Meet specific parameters"
    },
    "webex": {
      "allOf": [
        {
          "$ref": "#/$defs/WebexRequest"
        }
      ],
      "nullable": true,
      "description": "Webex specific parameters"
    },
    "breakout_room": {
      "allOf": [
        {
          "$ref": "#/$defs/_BreakoutRoomSchemaRequest"
        }
      ],
      "nullable": true,
      "description": "Configure how the bot handles breakout rooms. Currently, Zoom is supported.Examples: {\"mode\": \"join_main_room\"} | {\"mode\": \"join_specific_room\", \"room_id\": \"<uuid>\"} | {\"mode\": \"auto_accept_all_invites\"} (default)."
    },
    "metadata": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      }
    }
  },
  "required": [
    "meeting_url"
  ],
  "$defs": {
    "AudioOutputDataKindEnum": {
      "enum": [
        "mp3"
      ],
      "type": "string",
      "description": "* `mp3` - mp3"
    },
    "AudioOutputDataRequest": {
      "type": "object",
      "properties": {
        "kind": {
          "allOf": [
            {
              "$ref": "#/$defs/AudioOutputDataKindEnum"
            }
          ],
          "description": "The kind of data encoded in b64_data\n\n* `mp3` - mp3"
        },
        "b64_data": {
          "type": "string",
          "writeOnly": true,
          "minLength": 1,
          "description": "Data encoded in Base64 format, using the standard alphabet (specified here: https://datatracker.ietf.org/doc/html/rfc4648#section-4)",
          "maxLength": 1835008
        }
      },
      "required": [
        "b64_data",
        "kind"
      ]
    },
    "AudioOutputReplayRequest": {
      "type": "object",
      "properties": {
        "debounce_mode": {
          "allOf": [
            {
              "$ref": "#/$defs/DebounceModeEnum"
            }
          ],
          "default": "trailing",
          "description": "Leading: The debounce timer will start counting down when the first participant joins.\nTrailing: The debounce timer will start counting down when the last participant joins.\nFor example with a debounce_interval of 10, if two participants join 9 seconds apart: \n - In `Leading` mode the audio will play 10 seconds after the 1st participant joined (1 second after the 2nd participant)\n - In `Trailing` mode the audio will play 10 seconds after the 2nd participant joined (19 seconds after the 1st participant)\n\n* `leading` - leading\n* `trailing` - trailing"
        },
        "debounce_interval": {
          "type": "integer",
          "description": "The amount of time to wait for additional participants to join before replaying the audio."
        },
        "disable_after": {
          "type": "integer",
          "description": "The number of seconds after which the audio will no longer replay when new participants join. This parameter is useful to prevent the bot from interrupting a meeting, if a late participant joins."
        }
      },
      "required": [
        "debounce_interval"
      ]
    },
    "AudioOutputRequest": {
      "type": "object",
      "properties": {
        "data": {
          "$ref": "#/$defs/AudioOutputDataRequest"
        },
        "replay_on_participant_join": {
          "allOf": [
            {
              "$ref": "#/$defs/AudioOutputReplayRequest"
            }
          ],
          "description": "Specify this parameter if you want the audio to be replayed when additional participants join the call."
        }
      },
      "required": [
        "data"
      ]
    },
    "AutomaticAudioOutputRequest": {
      "type": "object",
      "properties": {
        "in_call_recording": {
          "$ref": "#/$defs/AudioOutputRequest"
        }
      },
      "required": [
        "in_call_recording"
      ]
    },
    "AutomaticLeaveBotDetectionRequest": {
      "type": "object",
      "properties": {
        "using_participant_events": {
          "$ref": "#/$defs/AutomaticLeaveBotDetectionUsingParticipantEventsRequest"
        },
        "using_participant_names": {
          "$ref": "#/$defs/AutomaticLeaveBotDetectionUsingParticipantNamesRequest"
        }
      }
    },
    "AutomaticLeaveBotDetectionUsingParticipantEventsRequest": {
      "type": "object",
      "properties": {
        "timeout": {
          "type": "integer",
          "minimum": 10,
          "default": 600,
          "description": "The number of seconds after which the bot will automatically leave the call if all other participants(in call) are detected as bots using this heuristic. A participant is considered a bot if they have no audio or screenshare activity for the duration of the call."
        },
        "activate_after": {
          "type": "integer",
          "minimum": 1,
          "default": 1200,
          "description": "The number of seconds(post recording start) after which the bot will start detecting other participants as bots using this heuristic. This parameter can be helpful if the meeting tends to start late, so the bot does not preemptively leave."
        }
      }
    },
    "AutomaticLeaveBotDetectionUsingParticipantNamesRequest": {
      "type": "object",
      "properties": {
        "timeout": {
          "type": "integer",
          "minimum": 10,
          "description": "The number of seconds after which the bot will automatically leave the call if all other participants(in call) are detected as bots using this heuristic. A participant is considered a bot if their name contains any of the strings specified in the `matches` parameter(case insensitive match)."
        },
        "activate_after": {
          "type": "integer",
          "minimum": 1,
          "description": "The number of seconds(post recording start) after which the bot will start detecting other participants as bots using this heuristic. This parameter can be helpful if the meeting tends to start late, so the bot does not preemptively leave."
        },
        "matches": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1
          },
          "description": "A list of strings that the bot will use to detect other bots. If a participant's name contains any of these strings(case insensitive match), they will be considered a bot. If all remaining participants in the call are detected as bots(except the bot itself), the bot will automatically leave the call.For e.g ['notetaker', 'recorder', 'assistant']"
        }
      },
      "required": [
        "activate_after",
        "matches",
        "timeout"
      ]
    },
    "AutomaticLeaveEveryoneLeftRequest": {
      "type": "object",
      "properties": {
        "timeout": {
          "type": "integer",
          "minimum": 1,
          "default": 2,
          "description": "The number of seconds after which the bot will automatically leave the call, if there were other participants in the call who have all left."
        },
        "activate_after": {
          "type": [
            "integer",
            "null"
          ],
          "minimum": 1,
          "description": "The number of seconds after which the bot will start detecting everyone left once it has started recording the call. "
        }
      }
    },
    "AutomaticLeaveRequest": {
      "type": "object",
      "properties": {
        "waiting_room_timeout": {
          "type": "integer",
          "minimum": 30,
          "default": 1200,
          "description": "The number of seconds after which the bot will automatically leave the call, if it has not been let in from the waiting room. If you join Zoom using an OBF token, this timeout also caps how long the bot will wait for the associated user to join the meeting; if the user never joins before the timeout, the join fails with zoom_obf_user_not_in_meeting. Note that this has a max value of 600 seconds for Google Meet and 1800 for Microsoft Teams."
        },
        "noone_joined_timeout": {
          "type": "integer",
          "minimum": 30,
          "default": 1200,
          "description": "The number of seconds after which the bot will automatically leave the call, if it has joined the meeting but no other participant has joined."
        },
        "everyone_left_timeout": {
          "allOf": [
            {
              "$ref": "#/$defs/AutomaticLeaveEveryoneLeftRequest"
            }
          ],
          "description": "The number of seconds after which the bot will automatically leave the call, if there were other participants in the call who have all left. Note: The everyone_left waiter remains active and will trigger even if recording is paused, unlike other automatic leave waiters which are paused when recording is paused."
        },
        "in_call_not_recording_timeout": {
          "type": "integer",
          "minimum": 1,
          "default": 3600,
          "description": "The number of seconds after which the bot will automatically leave the call, if it has joined the call and is not recording.This includes all periods when the bot is not recording, even if the bot has recorded previously."
        },
        "in_call_recording_timeout": {
          "type": "integer",
          "minimum": 1,
          "description": "The number of seconds after which the bot will automatically leave the call, if it has joined the call and started recording it. This can be used to enforce a maximum recording time limit for a bot. There is no default value for this parameter, meaning a bot will continue to record for as long as the meeting lasts."
        },
        "recording_permission_denied_timeout": {
          "type": "integer",
          "minimum": 1,
          "default": 30,
          "description": "The number of seconds after which the bot will automatically leave the call, if it has joined the call but has not started recording. For e.g This can occur due to bot being denied permission to record(Zoom meetings)."
        },
        "silence_detection": {
          "allOf": [
            {
              "$ref": "#/$defs/AutomaticLeaveSilenceDetectionRequest"
            }
          ],
          "default": {
            "timeout": 3600,
            "activate_after": 1200
          }
        },
        "bot_detection": {
          "allOf": [
            {
              "$ref": "#/$defs/AutomaticLeaveBotDetectionRequest"
            }
          ],
          "default": {
            "using_participant_events": {
              "timeout": 600,
              "activate_after": 1200
            },
            "using_participant_names": {
              "matches": [
                "notetaker",
                "recorder",
                "assistant"
              ],
              "timeout": 600,
              "activate_after": 120
            }
          }
        }
      }
    },
    "AutomaticLeaveSilenceDetectionRequest": {
      "type": "object",
      "properties": {
        "timeout": {
          "type": "integer",
          "minimum": 10,
          "default": 3600,
          "description": "The number of seconds of continuous silence after which the bot will automatically leave the call."
        },
        "activate_after": {
          "type": "integer",
          "minimum": 1,
          "default": 1200,
          "description": "The number of seconds after which the bot will start detecting silence once it has started recording the call. This parameter can be helpful if the meeting tends to start late, so the bot does not preemptively leave."
        }
      }
    },
    "AutomaticVideoOutputRequest": {
      "type": "object",
      "properties": {
        "in_call_recording": {
          "allOf": [
            {
              "$ref": "#/$defs/VideoOutputRequest"
            }
          ],
          "description": "The video that will be automatically output when the bot is in the **in_call_recording** state."
        },
        "in_call_not_recording": {
          "allOf": [
            {
              "$ref": "#/$defs/VideoOutputRequest"
            }
          ],
          "description": "The video that will be automatically output when the bot is in the **in_call_not_recording** state. If not specified the bot will fallback to in_call_recording output if available."
        }
      }
    },
    "BotIncludeInRecordingRequest": {
      "type": "object",
      "properties": {
        "audio": {
          "type": "boolean",
          "default": false,
          "description": "Whether to record audio from the bot."
        }
      }
    },
    "BotRecordingConfigBaseArtifactRequest": {
      "type": "object",
      "properties": {
        "metadata": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        }
      }
    },
    "BotRecordingConfigRealtimeEndpointBotRecordingConfigRealtimeEndpointDesktopSdkCallbackRequest": {
      "allOf": [
        {
          "$ref": "#/$defs/BotRecordingConfigRealtimeEndpointShared"
        },
        {
          "$ref": "#/$defs/BotRecordingConfigRealtimeEndpointDesktopSdkCallbackRequest"
        }
      ]
    },
    "BotRecordingConfigRealtimeEndpointBotRecordingConfigRealtimeEndpointRtmpRequest": {
      "allOf": [
        {
          "$ref": "#/$defs/BotRecordingConfigRealtimeEndpointShared"
        },
        {
          "$ref": "#/$defs/BotRecordingConfigRealtimeEndpointRtmpRequest"
        }
      ]
    },
    "BotRecordingConfigRealtimeEndpointBotRecordingConfigRealtimeEndpointWebhookRequest": {
      "allOf": [
        {
          "$ref": "#/$defs/BotRecordingConfigRealtimeEndpointShared"
        },
        {
          "$ref": "#/$defs/BotRecordingConfigRealtimeEndpointWebhookRequest"
        }
      ]
    },
    "BotRecordingConfigRealtimeEndpointBotRecordingConfigRealtimeEndpointWebsocketRequest": {
      "allOf": [
        {
          "$ref": "#/$defs/BotRecordingConfigRealtimeEndpointShared"
        },
        {
          "$ref": "#/$defs/BotRecordingConfigRealtimeEndpointWebsocketRequest"
        }
      ]
    },
    "BotRecordingConfigRealtimeEndpointDesktopSdkCallbackRequest": {
      "type": "object",
      "properties": {
        "events": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "participant_events.join",
              "participant_events.leave",
              "participant_events.update",
              "participant_events.speech_on",
              "participant_events.speech_off",
              "participant_events.webcam_on",
              "participant_events.webcam_off",
              "participant_events.microphone_on",
              "participant_events.microphone_off",
              "participant_events.screenshare_on",
              "participant_events.screenshare_off",
              "participant_events.chat_message",
              "transcript.data",
              "transcript.partial_data",
              "transcript.provider_data",
              "video_separate_png.data",
              "video_separate_h264.data",
              "audio_mixed_raw.data",
              "audio_separate_raw.data"
            ]
          },
          "description": "The events to send to the realtime endpoint."
        }
      },
      "required": [
        "events"
      ]
    },
    "BotRecordingConfigRealtimeEndpointRequest": {
      "oneOf": [
        {
          "$ref": "#/$defs/BotRecordingConfigRealtimeEndpointBotRecordingConfigRealtimeEndpointRtmpRequest"
        },
        {
          "$ref": "#/$defs/BotRecordingConfigRealtimeEndpointBotRecordingConfigRealtimeEndpointWebsocketRequest"
        },
        {
          "$ref": "#/$defs/BotRecordingConfigRealtimeEndpointBotRecordingConfigRealtimeEndpointWebhookRequest"
        },
        {
          "$ref": "#/$defs/BotRecordingConfigRealtimeEndpointBotRecordingConfigRealtimeEndpointDesktopSdkCallbackRequest"
        }
      ]
    },
    "BotRecordingConfigRealtimeEndpointRtmpRequest": {
      "type": "object",
      "properties": {
        "url": {
          "type": "string",
          "minLength": 1,
          "description": "The URL of the realtime endpoint.",
          "format": "uri"
        },
        "events": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "video_mixed_flv.data"
            ]
          },
          "description": "The events to send to the realtime endpoint."
        }
      },
      "required": [
        "events",
        "url"
      ]
    },
    "BotRecordingConfigRealtimeEndpointShared": {
      "type": "object",
      "properties": {
        "metadata": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "type": {
          "allOf": [
            {
              "$ref": "#/$defs/BotRecordingConfigRealtimeEndpointSharedTypeEnum"
            }
          ],
          "description": "The type of the realtime endpoint.\n\n* `rtmp` - Rtmp\n* `websocket` - Websocket\n* `webhook` - Webhook\n* `desktop_sdk_callback` - Desktop Sdk Callback"
        }
      },
      "required": [
        "type"
      ]
    },
    "BotRecordingConfigRealtimeEndpointSharedTypeEnum": {
      "enum": [
        "rtmp",
        "websocket",
        "webhook",
        "desktop_sdk_callback"
      ],
      "type": "string",
      "description": "* `rtmp` - Rtmp\n* `websocket` - Websocket\n* `webhook` - Webhook\n* `desktop_sdk_callback` - Desktop Sdk Callback"
    },
    "BotRecordingConfigRealtimeEndpointWebhookRequest": {
      "type": "object",
      "properties": {
        "url": {
          "type": "string",
          "minLength": 1,
          "description": "The URL of the realtime endpoint.",
          "format": "uri"
        },
        "events": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "participant_events.join",
              "participant_events.leave",
              "participant_events.update",
              "participant_events.speech_on",
              "participant_events.speech_off",
              "participant_events.webcam_on",
              "participant_events.webcam_off",
              "participant_events.microphone_on",
              "participant_events.microphone_off",
              "participant_events.screenshare_on",
              "participant_events.screenshare_off",
              "participant_events.chat_message",
              "transcript.data",
              "transcript.partial_data",
              "transcript.provider_data"
            ]
          },
          "description": "The events to send to the realtime endpoint."
        }
      },
      "required": [
        "events",
        "url"
      ]
    },
    "BotRecordingConfigRealtimeEndpointWebsocketRequest": {
      "type": "object",
      "properties": {
        "url": {
          "type": "string",
          "minLength": 1,
          "description": "The URL of the realtime endpoint.",
          "format": "uri"
        },
        "events": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "participant_events.join",
              "participant_events.leave",
              "participant_events.update",
              "participant_events.speech_on",
              "participant_events.speech_off",
              "participant_events.webcam_on",
              "participant_events.webcam_off",
              "participant_events.microphone_on",
              "participant_events.microphone_off",
              "participant_events.screenshare_on",
              "participant_events.screenshare_off",
              "participant_events.chat_message",
              "audio_mixed_raw.data",
              "transcript.data",
              "transcript.partial_data",
              "transcript.provider_data",
              "audio_separate_raw.data",
              "video_separate_png.data",
              "video_separate_h264.data"
            ]
          },
          "description": "The events to send to the realtime endpoint."
        }
      },
      "required": [
        "events",
        "url"
      ]
    },
    "BotRecordingConfigRequest": {
      "type": "object",
      "properties": {
        "transcript": {
          "allOf": [
            {
              "$ref": "#/$defs/BotRecordingConfigTranscriptArtifactRequest"
            }
          ],
          "nullable": true,
          "description": "Specify this to capture transcript of the meeting as part of the recording. Supports:\n- [Recall.ai Transcription](https://docs.recall.ai/docs/recallai-transcription)\n- [3rd-party AI transcription providers](https://docs.recall.ai/docs/ai-transcription)\n- [meeting caption transcription](https://docs.recall.ai/docs/meeting-caption-transcription)\n\n **[Read more about real-time transcription.](https://docs.recall.ai/docs/bot-real-time-transcription)**\n\nDefault: `null`\n\n"
        },
        "realtime_endpoints": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/BotRecordingConfigRealtimeEndpointRequest"
          },
          "default": [],
          "description": "Add endpoints here to receive data (e.g transcript, participant events) from the recording in realtime during the meeting.\n\nDefault: `[]`\n\n"
        },
        "retention": {
          "allOf": [
            {
              "$ref": "#/$defs/BotRecordingConfigRetentionRequest"
            }
          ],
          "nullable": true,
          "description": "Specify the retention policy for the recording. **[Read more in this guide](https://docs.recall.ai/docs/storage-and-playback)**"
        },
        "video_mixed_layout": {
          "allOf": [
            {
              "$ref": "#/$defs/VideoMixedLayoutEnum"
            }
          ],
          "default": "speaker_view",
          "description": "The layout of the mixed video output.\n\n* `speaker_view` - speaker_view\n* `gallery_view` - gallery_view\n* `gallery_view_v2` - gallery_view_v2\n* `audio_only` - audio_only"
        },
        "video_mixed_mp4": {
          "allOf": [
            {
              "$ref": "#/$defs/BotRecordingConfigBaseArtifactRequest"
            }
          ],
          "nullable": true,
          "description": "Capture mixed video of the meeting as part of the recording. **This is enabled by default**.\n\nDefault: `{}`\n\n"
        },
        "participant_events": {
          "allOf": [
            {
              "$ref": "#/$defs/BotRecordingConfigBaseArtifactRequest"
            }
          ],
          "nullable": true,
          "default": {},
          "description": "Capture participant events as part of the recording. **This is enabled by default**.\n\nDefault: `{}`\n\n"
        },
        "meeting_metadata": {
          "allOf": [
            {
              "$ref": "#/$defs/BotRecordingConfigBaseArtifactRequest"
            }
          ],
          "nullable": true,
          "default": {},
          "description": "Capture meeting metadata as part of the recording. **This is enabled by default**.\n\nDefault: `{}`\n\n"
        },
        "video_mixed_participant_video_when_screenshare": {
          "allOf": [
            {
              "$ref": "#/$defs/VideoMixedParticipantVideoWhenScreenshareEnum"
            }
          ],
          "default": "overlap",
          "description": "The layout of participant video streams in mixed video output when screen is being shared. More docs: https://docs.recall.ai/docs/video-layouts\n\n* `hide` - hide\n* `beside` - beside\n* `overlap` - overlap"
        },
        "start_recording_on": {
          "allOf": [
            {
              "$ref": "#/$defs/StartRecordingOnEnum"
            }
          ],
          "default": "participant_join",
          "description": "Specify when automatic recording should start.\n*call_join* - Bot will start recording as soon as it joins the call.\n*participant_join* - Bot will start recording when the first participant joins the call. If a participant is already present when the bot joins, the bot will automatically start recording.\n*participant_speak* - Bot will start recording when the first participant starts talking.\n\n\n* `call_join` - call_join\n* `participant_join` - participant_join\n* `participant_speak` - participant_speak"
        },
        "include_bot_in_recording": {
          "$ref": "#/$defs/BotIncludeInRecordingRequest"
        },
        "metadata": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "audio_mixed_raw": {
          "allOf": [
            {
              "$ref": "#/$defs/BotRecordingConfigBaseArtifactRequest"
            }
          ],
          "nullable": true,
          "description": "Specify this to capture mixed audio in raw format of the meeting.\n\nDefault: `null`\n\n"
        },
        "audio_mixed_mp3": {
          "allOf": [
            {
              "$ref": "#/$defs/BotRecordingConfigBaseArtifactRequest"
            }
          ],
          "nullable": true,
          "description": "Specify this to capture mixed audio in the mp3 format of the meeting\n\nDefault: `null`\n\n"
        },
        "video_separate_mp4": {
          "allOf": [
            {
              "$ref": "#/$defs/BotRecordingConfigBaseArtifactRequest"
            }
          ],
          "nullable": true,
          "description": "Specify this to capture separate video in mp4 format for each participant in the meeting. Only supported with video_mixed_layout='gallery_view_v2'. **[Read more in this guide](https://docs.recall.ai/docs/how-to-get-separate-videos-per-participant-async)**\n\nDefault: `null`\n\n"
        },
        "audio_separate_raw": {
          "allOf": [
            {
              "$ref": "#/$defs/BotRecordingConfigBaseArtifactRequest"
            }
          ],
          "nullable": true,
          "description": "Specify this to capture separate audio in raw format for each participant in the meeting(**limited support**).  **[Read more in this guide](https://docs.recall.ai/docs/how-to-get-separate-audio-per-participant-async)**\n\nDefault: `null`\n\n"
        },
        "audio_separate_mp3": {
          "allOf": [
            {
              "$ref": "#/$defs/BotRecordingConfigBaseArtifactRequest"
            }
          ],
          "nullable": true,
          "description": "Specify this to capture separate audio in mp3 format for each participant in the meeting. **[Read more in this guide](https://docs.recall.ai/docs/how-to-get-separate-audio-per-participant-async)**\n\nDefault: `null`\n\n"
        },
        "video_mixed_flv": {
          "allOf": [
            {
              "$ref": "#/$defs/BotRecordingConfigBaseArtifactRequest"
            }
          ],
          "nullable": true,
          "description": "Specify this to capture mixed video in flv format(**required for rtmp streaming). \n\nDefault: `null`\n\n"
        },
        "video_separate_png": {
          "allOf": [
            {
              "$ref": "#/$defs/BotRecordingConfigBaseArtifactRequest"
            }
          ],
          "nullable": true,
          "description": "Specify this to capture separate video in png format for each participant in the meeting. Only supported with video_mixed_layout='gallery_view_v2'. **[Read more in this guide](https://docs.recall.ai/docs/how-to-get-separate-videos-per-participant-realtime)**\n\nDefault: `null`\n\n"
        },
        "video_separate_h264": {
          "allOf": [
            {
              "$ref": "#/$defs/BotRecordingConfigBaseArtifactRequest"
            }
          ],
          "nullable": true,
          "description": "Specify this to capture separate video in compressed h264 for each participant in the meeting. **[Read more in this guide](https://docs.recall.ai/docs/how-to-get-separate-videos-per-participant-realtime)**\n\nDefault: `null`\n\n"
        }
      }
    },
    "BotRecordingConfigRetentionRequest": {
      "type": "object",
      "properties": {
        "type": {
          "allOf": [
            {
              "$ref": "#/$defs/BotRecordingConfigRetentionSharedTypeEnum"
            }
          ],
          "description": "The type of the retention policy.\n\n* `timed` - Timed\n* `forever` - Forever"
        },
        "hours": {
          "type": "integer",
          "minimum": 1,
          "default": 168,
          "description": "The number of hours to retain the recording."
        }
      },
      "required": [
        "type"
      ]
    },
    "BotRecordingConfigRetentionSharedTypeEnum": {
      "enum": [
        "timed",
        "forever"
      ],
      "type": "string",
      "description": "* `timed` - Timed\n* `forever` - Forever"
    },
    "BotRecordingConfigTranscriptArtifactRequest": {
      "type": "object",
      "properties": {
        "metadata": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "provider": {
          "allOf": [
            {
              "$ref": "#/$defs/BotRecordingConfigTranscriptProviderRequest"
            }
          ],
          "title": "Transcription Provider",
          "description": "The **[transcription method](https://docs.recall.ai//docs/bot-transcription)** to get the transcript of the meeting."
        },
        "diarization": {
   

# --- truncated at 32 KB (170 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/recall-ai/refs/heads/main/json-schema/recall-ai-bot-request-schema.json

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/recall-ai-bot-request"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.