> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.meetstream.ai/llms.txt.
> For full documentation content, see https://docs.meetstream.ai/llms-full.txt.

# Create Bot

POST https://api.meetstream.ai/api/v1/bots/create_bot
Content-Type: application/json

This endpoint supports 20 different payload variations. Use the dropdown above the code panel to explore configurations for various use cases.

Reference: https://docs.meetstream.ai/api-reference/ap-is/bot-endpoints/create-bot

## OpenAPI Specification

```yaml
openapi: 3.1.0
info:
  title: Meetstream API
  version: 1.0.0
paths:
  /api/v1/bots/create_bot:
    post:
      operationId: create-bot
      summary: Create Bot
      description: >-
        This endpoint supports 20 different payload variations. Use the dropdown
        above the code panel to explore configurations for various use cases.
      tags:
        - subpackage_bots
      parameters:
        - name: Authorization
          in: header
          description: 'Format: Token <your_api_key>'
          required: true
          schema:
            type: string
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BotResponse'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateBotRequest'
servers:
  - url: https://api.meetstream.ai
components:
  schemas:
    CreateBotRequestZoom:
      type: object
      properties:
        use_zoom_obf:
          type: boolean
          description: Enable Zoom OBF (On-Behalf-Of) feature.
      description: Zoom-specific configuration options.
      title: CreateBotRequestZoom
    CreateBotRequestSocketConnectionUrl:
      type: object
      properties:
        websocket_url:
          type: string
      description: WebSocket URL for two-way audio/data bridge connection.
      title: CreateBotRequestSocketConnectionUrl
    CreateBotRequestLiveAudioRequired:
      type: object
      properties:
        websocket_url:
          type: string
      description: WebSocket URL to stream live audio output from the meeting.
      title: CreateBotRequestLiveAudioRequired
    CreateBotRequestLiveVideoRequired:
      type: object
      properties:
        websocket_url:
          type: string
      description: WebSocket URL to stream live video output from the meeting.
      title: CreateBotRequestLiveVideoRequired
    CreateBotRequestLiveTranscriptionRequired:
      type: object
      properties:
        webhook_url:
          type: string
      description: Webhook URL to receive live transcription events.
      title: CreateBotRequestLiveTranscriptionRequired
    AutomaticLeaveConfig:
      type: object
      properties:
        waiting_room_timeout:
          type: integer
          description: Seconds to wait in a waiting room before leaving.
        everyone_left_timeout:
          type: integer
          description: Seconds to stay in the call after everyone else leaves.
        voice_inactivity_timeout:
          type: integer
          description: Seconds to wait if no audio is detected.
        in_call_recording_timeout:
          type: integer
          description: Maximum seconds to stay in call while recording.
        recording_permission_denied_timeout:
          type: integer
          description: Seconds to wait if recording permission is denied (Zoom only).
      title: AutomaticLeaveConfig
    RecordingConfigRetentionType:
      type: string
      enum:
        - timed
      default: timed
      title: RecordingConfigRetentionType
    RecordingConfigRetention:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/RecordingConfigRetentionType'
        hours:
          type: integer
          default: 24
      title: RecordingConfigRetention
    RecordingConfigTranscriptProviderDeepgramModel:
      type: string
      enum:
        - nova-3
      default: nova-3
      title: RecordingConfigTranscriptProviderDeepgramModel
    RecordingConfigTranscriptProviderDeepgram:
      type: object
      properties:
        model:
          $ref: '#/components/schemas/RecordingConfigTranscriptProviderDeepgramModel'
        language:
          type: string
          default: en
        punctuate:
          type: boolean
          default: true
        smart_format:
          type: boolean
          default: true
        diarize:
          type: boolean
          default: true
        paragraphs:
          type: boolean
          default: true
        numerals:
          type: boolean
          default: true
        filler_words:
          type: boolean
          default: false
        utterances:
          type: boolean
          default: true
        utt_split:
          type: number
          format: double
          default: 0.8
        detect_language:
          type: boolean
          default: false
        keywords:
          type: array
          items:
            type: string
        search:
          type: array
          items:
            type: string
        tag:
          type: array
          items:
            type: string
      required:
        - model
        - language
        - punctuate
        - smart_format
        - diarize
        - paragraphs
        - numerals
        - filler_words
        - utterances
        - utt_split
        - detect_language
      title: RecordingConfigTranscriptProviderDeepgram
    RecordingConfigTranscriptProviderAssemblyaiSpeechModelsItems:
      type: string
      enum:
        - universal-2
      title: RecordingConfigTranscriptProviderAssemblyaiSpeechModelsItems
    RecordingConfigTranscriptProviderAssemblyai:
      type: object
      properties:
        speech_models:
          type: array
          items:
            $ref: >-
              #/components/schemas/RecordingConfigTranscriptProviderAssemblyaiSpeechModelsItems
        language_code:
          type: string
          default: en_us
        speaker_labels:
          type: boolean
          default: true
        punctuate:
          type: boolean
          default: true
        format_text:
          type: boolean
          default: true
        filter_profanity:
          type: boolean
          default: false
        redact_pii:
          type: boolean
          default: false
        auto_chapters:
          type: boolean
          default: false
        entity_detection:
          type: boolean
          default: false
        keyterms_prompt:
          type: array
          items:
            type: string
      required:
        - speech_models
        - language_code
        - speaker_labels
        - punctuate
        - format_text
        - filter_profanity
        - redact_pii
        - auto_chapters
        - entity_detection
      title: RecordingConfigTranscriptProviderAssemblyai
    RecordingConfigTranscriptProviderJigsawstack:
      type: object
      properties:
        language:
          type: string
          default: auto
        translate:
          type: boolean
          default: false
        by_speaker:
          type: boolean
          default: true
      required:
        - language
        - translate
      title: RecordingConfigTranscriptProviderJigsawstack
    RecordingConfigTranscriptProviderSarvamModel:
      type: string
      enum:
        - saaras:v3
      default: saaras:v3
      title: RecordingConfigTranscriptProviderSarvamModel
    RecordingConfigTranscriptProviderSarvamMode:
      type: string
      enum:
        - transcribe
        - translate
      default: transcribe
      title: RecordingConfigTranscriptProviderSarvamMode
    RecordingConfigTranscriptProviderSarvam:
      type: object
      properties:
        model:
          $ref: '#/components/schemas/RecordingConfigTranscriptProviderSarvamModel'
        language_code:
          type: string
          default: en-IN
        mode:
          $ref: '#/components/schemas/RecordingConfigTranscriptProviderSarvamMode'
        with_diarization:
          type: boolean
          default: true
      required:
        - model
        - language_code
        - mode
        - with_diarization
      title: RecordingConfigTranscriptProviderSarvam
    RecordingConfigTranscriptProviderMeetingCaptions:
      type: object
      properties: {}
      description: >-
        Uses the meeting platform's native captions. No additional config
        required.
      title: RecordingConfigTranscriptProviderMeetingCaptions
    RecordingConfigTranscriptProviderMeetstream:
      type: object
      properties:
        language:
          type: string
          default: auto
        translate:
          type: boolean
          default: false
      required:
        - language
        - translate
      title: RecordingConfigTranscriptProviderMeetstream
    RecordingConfigTranscriptProviderAssemblyaiStreamingSpeechModel:
      type: string
      enum:
        - universal-streaming-english
      default: universal-streaming-english
      title: RecordingConfigTranscriptProviderAssemblyaiStreamingSpeechModel
    RecordingConfigTranscriptProviderAssemblyaiStreamingTranscriptionMode:
      type: string
      enum:
        - raw
        - sentence
      default: raw
      title: RecordingConfigTranscriptProviderAssemblyaiStreamingTranscriptionMode
    RecordingConfigTranscriptProviderAssemblyaiStreamingEncoding:
      type: string
      enum:
        - pcm_s16le
      default: pcm_s16le
      title: RecordingConfigTranscriptProviderAssemblyaiStreamingEncoding
    RecordingConfigTranscriptProviderAssemblyaiStreaming:
      type: object
      properties:
        speech_model:
          $ref: >-
            #/components/schemas/RecordingConfigTranscriptProviderAssemblyaiStreamingSpeechModel
        transcription_mode:
          $ref: >-
            #/components/schemas/RecordingConfigTranscriptProviderAssemblyaiStreamingTranscriptionMode
        sample_rate:
          type: integer
          default: 48000
        format_turns:
          type: boolean
          default: false
        encoding:
          $ref: >-
            #/components/schemas/RecordingConfigTranscriptProviderAssemblyaiStreamingEncoding
        vad_threshold:
          type: string
          default: '0.4'
        end_of_turn_confidence_threshold:
          type: string
          default: '0.4'
        inactivity_timeout:
          type: integer
          default: 300
        min_end_of_turn_silence_when_confident:
          type: string
          default: '400'
        max_turn_silence:
          type: string
          default: '1280'
      required:
        - speech_model
        - transcription_mode
        - sample_rate
        - format_turns
        - encoding
        - vad_threshold
        - end_of_turn_confidence_threshold
        - inactivity_timeout
        - min_end_of_turn_silence_when_confident
        - max_turn_silence
      title: RecordingConfigTranscriptProviderAssemblyaiStreaming
    RecordingConfigTranscriptProviderDeepgramStreamingModel:
      type: string
      enum:
        - nova-2
      default: nova-2
      title: RecordingConfigTranscriptProviderDeepgramStreamingModel
    RecordingConfigTranscriptProviderDeepgramStreamingTranscriptionMode:
      type: string
      enum:
        - sentence
        - word
        - raw
      default: sentence
      title: RecordingConfigTranscriptProviderDeepgramStreamingTranscriptionMode
    RecordingConfigTranscriptProviderDeepgramStreamingEncoding:
      type: string
      enum:
        - linear16
      default: linear16
      title: RecordingConfigTranscriptProviderDeepgramStreamingEncoding
    RecordingConfigTranscriptProviderDeepgramStreaming:
      type: object
      properties:
        model:
          $ref: >-
            #/components/schemas/RecordingConfigTranscriptProviderDeepgramStreamingModel
        transcription_mode:
          $ref: >-
            #/components/schemas/RecordingConfigTranscriptProviderDeepgramStreamingTranscriptionMode
        language:
          type: string
          default: en
        punctuate:
          type: boolean
          default: true
        smart_format:
          type: boolean
          default: true
        endpointing:
          type: integer
          default: 300
        vad_events:
          type: boolean
          default: true
        utterance_end_ms:
          type: integer
          default: 1000
        encoding:
          $ref: >-
            #/components/schemas/RecordingConfigTranscriptProviderDeepgramStreamingEncoding
        channels:
          type: integer
          default: 1
      required:
        - model
        - transcription_mode
        - language
        - punctuate
        - smart_format
        - endpointing
        - vad_events
        - utterance_end_ms
        - encoding
        - channels
      title: RecordingConfigTranscriptProviderDeepgramStreaming
    RecordingConfigTranscriptProvider:
      type: object
      properties:
        deepgram:
          $ref: '#/components/schemas/RecordingConfigTranscriptProviderDeepgram'
        assemblyai:
          $ref: '#/components/schemas/RecordingConfigTranscriptProviderAssemblyai'
        jigsawstack:
          $ref: '#/components/schemas/RecordingConfigTranscriptProviderJigsawstack'
        sarvam:
          $ref: '#/components/schemas/RecordingConfigTranscriptProviderSarvam'
        meeting_captions:
          $ref: >-
            #/components/schemas/RecordingConfigTranscriptProviderMeetingCaptions
          description: >-
            Uses the meeting platform's native captions. No additional config
            required.
        meetstream:
          $ref: '#/components/schemas/RecordingConfigTranscriptProviderMeetstream'
        assemblyai_streaming:
          $ref: >-
            #/components/schemas/RecordingConfigTranscriptProviderAssemblyaiStreaming
        deepgram_streaming:
          $ref: >-
            #/components/schemas/RecordingConfigTranscriptProviderDeepgramStreaming
      description: Transcription provider config. Use one provider key per request.
      title: RecordingConfigTranscriptProvider
    RecordingConfigTranscript:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/RecordingConfigTranscriptProvider'
          description: Transcription provider config. Use one provider key per request.
      required:
        - provider
      title: RecordingConfigTranscript
    RecordingConfigRealtimeEndpointsItems:
      type: object
      properties:
        type:
          type: string
        url:
          type: string
        events:
          type: array
          items:
            type: string
      title: RecordingConfigRealtimeEndpointsItems
    RecordingConfig:
      type: object
      properties:
        retention:
          $ref: '#/components/schemas/RecordingConfigRetention'
        transcript:
          $ref: '#/components/schemas/RecordingConfigTranscript'
        realtime_endpoints:
          type: array
          items:
            $ref: '#/components/schemas/RecordingConfigRealtimeEndpointsItems'
      title: RecordingConfig
    CreateBotRequest:
      type: object
      properties:
        meeting_link:
          type: string
          description: The URL of the Google Meet, Zoom, or Teams meeting.
        bot_name:
          type: string
          description: The display name the bot will use in the meeting.
        video_required:
          type: boolean
          default: true
          description: Whether the bot should record video.
        zoom:
          $ref: '#/components/schemas/CreateBotRequestZoom'
          description: Zoom-specific configuration options.
        audio_separate_streams:
          type: boolean
          description: Enable separate audio streams feature.
        video_separate_streams:
          type: boolean
          description: Enable separate video streams feature.
        bot_message:
          type: string
          description: An initial message for the bot to post in the meeting chat.
        bot_image_url:
          type: string
          description: URL for the bot's profile picture or avatar.
        callback_url:
          type: string
          description: A URL to receive webhook event callbacks.
        join_at:
          type: string
          format: date-time
          description: ISO 8601 datetime to schedule the bot to join the meeting.
        agent_config_id:
          type: string
          description: The ID of the agent configuration to enable agentic features.
        custom_attributes:
          type: object
          additionalProperties:
            description: Any type
          description: Arbitrary key-value metadata attached to the bot.
        socket_connection_url:
          $ref: '#/components/schemas/CreateBotRequestSocketConnectionUrl'
          description: WebSocket URL for two-way audio/data bridge connection.
        live_audio_required:
          $ref: '#/components/schemas/CreateBotRequestLiveAudioRequired'
          description: WebSocket URL to stream live audio output from the meeting.
        live_video_required:
          $ref: '#/components/schemas/CreateBotRequestLiveVideoRequired'
          description: WebSocket URL to stream live video output from the meeting.
        workflow_config_ids:
          type: array
          items:
            type: string
          description: List of workflow configuration IDs to trigger post-meeting.
        live_transcription_required:
          $ref: '#/components/schemas/CreateBotRequestLiveTranscriptionRequired'
          description: Webhook URL to receive live transcription events.
        automatic_leave:
          $ref: '#/components/schemas/AutomaticLeaveConfig'
        recording_config:
          $ref: '#/components/schemas/RecordingConfig'
      required:
        - meeting_link
        - bot_name
      title: CreateBotRequest
    BotResponse:
      type: object
      properties:
        bot_id:
          type: string
        transcript_id:
          type:
            - string
            - 'null'
        meeting_url:
          type: string
        status:
          type: string
      title: BotResponse
  securitySchemes:
    TokenAuth:
      type: apiKey
      in: header
      name: Authorization
      description: 'Format: Token <your_api_key>'

```

## SDK Code Examples

```python Basic Bot (Video Recording)
import requests

url = "https://api.meetstream.ai/api/v1/bots/create_bot"

payload = {
    "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
    "bot_name": "Meetstream Agent",
    "video_required": True
}
headers = {
    "Authorization": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Basic Bot (Video Recording)
const url = 'https://api.meetstream.ai/api/v1/bots/create_bot';
const options = {
  method: 'POST',
  headers: {Authorization: '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"meeting_link":"https://meet.google.com/zcs-xwyv-hvi","bot_name":"Meetstream Agent","video_required":true}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Basic Bot (Video Recording)
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.meetstream.ai/api/v1/bots/create_bot"

	payload := strings.NewReader("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Basic Bot (Video Recording)
require 'uri'
require 'net/http'

url = URI("https://api.meetstream.ai/api/v1/bots/create_bot")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true\n}"

response = http.request(request)
puts response.read_body
```

```java Basic Bot (Video Recording)
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.meetstream.ai/api/v1/bots/create_bot")
  .header("Authorization", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true\n}")
  .asString();
```

```php Basic Bot (Video Recording)
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.meetstream.ai/api/v1/bots/create_bot', [
  'body' => '{
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true
}',
  'headers' => [
    'Authorization' => '<apiKey>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Basic Bot (Video Recording)
using RestSharp;

var client = new RestClient("https://api.meetstream.ai/api/v1/bots/create_bot");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Basic Bot (Video Recording)
import Foundation

let headers = [
  "Authorization": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.meetstream.ai/api/v1/bots/create_bot")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

```python Webhook
import requests

url = "https://api.meetstream.ai/api/v1/bots/create_bot"

payload = {
    "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
    "bot_name": "Meetstream Agent",
    "video_required": False,
    "callback_url": "https://your-server.com/webhook"
}
headers = {
    "Authorization": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Webhook
const url = 'https://api.meetstream.ai/api/v1/bots/create_bot';
const options = {
  method: 'POST',
  headers: {Authorization: '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"meeting_link":"https://meet.google.com/zcs-xwyv-hvi","bot_name":"Meetstream Agent","video_required":false,"callback_url":"https://your-server.com/webhook"}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Webhook
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.meetstream.ai/api/v1/bots/create_bot"

	payload := strings.NewReader("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": false,\n  \"callback_url\": \"https://your-server.com/webhook\"\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Webhook
require 'uri'
require 'net/http'

url = URI("https://api.meetstream.ai/api/v1/bots/create_bot")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": false,\n  \"callback_url\": \"https://your-server.com/webhook\"\n}"

response = http.request(request)
puts response.read_body
```

```java Webhook
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.meetstream.ai/api/v1/bots/create_bot")
  .header("Authorization", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": false,\n  \"callback_url\": \"https://your-server.com/webhook\"\n}")
  .asString();
```

```php Webhook
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.meetstream.ai/api/v1/bots/create_bot', [
  'body' => '{
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": false,
  "callback_url": "https://your-server.com/webhook"
}',
  'headers' => [
    'Authorization' => '<apiKey>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Webhook
using RestSharp;

var client = new RestClient("https://api.meetstream.ai/api/v1/bots/create_bot");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": false,\n  \"callback_url\": \"https://your-server.com/webhook\"\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Webhook
import Foundation

let headers = [
  "Authorization": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": false,
  "callback_url": "https://your-server.com/webhook"
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.meetstream.ai/api/v1/bots/create_bot")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

```python Bot with Custom Attributes
import requests

url = "https://api.meetstream.ai/api/v1/bots/create_bot"

payload = {
    "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
    "bot_name": "Meetstream Agent",
    "video_required": True,
    "custom_attributes": {
        "tag": "Meetstream",
        "sample": "testing",
        "user": "your-user-id"
    }
}
headers = {
    "Authorization": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Bot with Custom Attributes
const url = 'https://api.meetstream.ai/api/v1/bots/create_bot';
const options = {
  method: 'POST',
  headers: {Authorization: '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"meeting_link":"https://meet.google.com/zcs-xwyv-hvi","bot_name":"Meetstream Agent","video_required":true,"custom_attributes":{"tag":"Meetstream","sample":"testing","user":"your-user-id"}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Bot with Custom Attributes
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.meetstream.ai/api/v1/bots/create_bot"

	payload := strings.NewReader("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"custom_attributes\": {\n    \"tag\": \"Meetstream\",\n    \"sample\": \"testing\",\n    \"user\": \"your-user-id\"\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Bot with Custom Attributes
require 'uri'
require 'net/http'

url = URI("https://api.meetstream.ai/api/v1/bots/create_bot")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"custom_attributes\": {\n    \"tag\": \"Meetstream\",\n    \"sample\": \"testing\",\n    \"user\": \"your-user-id\"\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java Bot with Custom Attributes
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.meetstream.ai/api/v1/bots/create_bot")
  .header("Authorization", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"custom_attributes\": {\n    \"tag\": \"Meetstream\",\n    \"sample\": \"testing\",\n    \"user\": \"your-user-id\"\n  }\n}")
  .asString();
```

```php Bot with Custom Attributes
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.meetstream.ai/api/v1/bots/create_bot', [
  'body' => '{
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "custom_attributes": {
    "tag": "Meetstream",
    "sample": "testing",
    "user": "your-user-id"
  }
}',
  'headers' => [
    'Authorization' => '<apiKey>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Bot with Custom Attributes
using RestSharp;

var client = new RestClient("https://api.meetstream.ai/api/v1/bots/create_bot");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"custom_attributes\": {\n    \"tag\": \"Meetstream\",\n    \"sample\": \"testing\",\n    \"user\": \"your-user-id\"\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Bot with Custom Attributes
import Foundation

let headers = [
  "Authorization": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "custom_attributes": [
    "tag": "Meetstream",
    "sample": "testing",
    "user": "your-user-id"
  ]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.meetstream.ai/api/v1/bots/create_bot")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

```python Bot with Automatic Leave Config
import requests

url = "https://api.meetstream.ai/api/v1/bots/create_bot"

payload = {
    "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
    "bot_name": "Meetstream Agent",
    "video_required": True,
    "automatic_leave": {
        "waiting_room_timeout": 600,
        "everyone_left_timeout": 300,
        "voice_inactivity_timeout": 100,
        "in_call_recording_timeout": 14400,
        "recording_permission_denied_timeout": 60
    }
}
headers = {
    "Authorization": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Bot with Automatic Leave Config
const url = 'https://api.meetstream.ai/api/v1/bots/create_bot';
const options = {
  method: 'POST',
  headers: {Authorization: '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"meeting_link":"https://meet.google.com/zcs-xwyv-hvi","bot_name":"Meetstream Agent","video_required":true,"automatic_leave":{"waiting_room_timeout":600,"everyone_left_timeout":300,"voice_inactivity_timeout":100,"in_call_recording_timeout":14400,"recording_permission_denied_timeout":60}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Bot with Automatic Leave Config
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.meetstream.ai/api/v1/bots/create_bot"

	payload := strings.NewReader("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"automatic_leave\": {\n    \"waiting_room_timeout\": 600,\n    \"everyone_left_timeout\": 300,\n    \"voice_inactivity_timeout\": 100,\n    \"in_call_recording_timeout\": 14400,\n    \"recording_permission_denied_timeout\": 60\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Bot with Automatic Leave Config
require 'uri'
require 'net/http'

url = URI("https://api.meetstream.ai/api/v1/bots/create_bot")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"automatic_leave\": {\n    \"waiting_room_timeout\": 600,\n    \"everyone_left_timeout\": 300,\n    \"voice_inactivity_timeout\": 100,\n    \"in_call_recording_timeout\": 14400,\n    \"recording_permission_denied_timeout\": 60\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java Bot with Automatic Leave Config
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.meetstream.ai/api/v1/bots/create_bot")
  .header("Authorization", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"automatic_leave\": {\n    \"waiting_room_timeout\": 600,\n    \"everyone_left_timeout\": 300,\n    \"voice_inactivity_timeout\": 100,\n    \"in_call_recording_timeout\": 14400,\n    \"recording_permission_denied_timeout\": 60\n  }\n}")
  .asString();
```

```php Bot with Automatic Leave Config
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.meetstream.ai/api/v1/bots/create_bot', [
  'body' => '{
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "automatic_leave": {
    "waiting_room_timeout": 600,
    "everyone_left_timeout": 300,
    "voice_inactivity_timeout": 100,
    "in_call_recording_timeout": 14400,
    "recording_permission_denied_timeout": 60
  }
}',
  'headers' => [
    'Authorization' => '<apiKey>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Bot with Automatic Leave Config
using RestSharp;

var client = new RestClient("https://api.meetstream.ai/api/v1/bots/create_bot");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"automatic_leave\": {\n    \"waiting_room_timeout\": 600,\n    \"everyone_left_timeout\": 300,\n    \"voice_inactivity_timeout\": 100,\n    \"in_call_recording_timeout\": 14400,\n    \"recording_permission_denied_timeout\": 60\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Bot with Automatic Leave Config
import Foundation

let headers = [
  "Authorization": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "automatic_leave": [
    "waiting_room_timeout": 600,
    "everyone_left_timeout": 300,
    "voice_inactivity_timeout": 100,
    "in_call_recording_timeout": 14400,
    "recording_permission_denied_timeout": 60
  ]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.meetstream.ai/api/v1/bots/create_bot")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

```python Bot with Participants Notification
import requests

url = "https://api.meetstream.ai/api/v1/bots/create_bot"

payload = {
    "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
    "bot_name": "Meetstream Agent",
    "video_required": True,
    "recording_config": { "realtime_endpoints": [
            {
                "type": "webhook",
                "url": "https://your-server.com/webhook",
                "events": ["participant_events.join", "participant_events.leave"]
            }
        ] }
}
headers = {
    "Authorization": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Bot with Participants Notification
const url = 'https://api.meetstream.ai/api/v1/bots/create_bot';
const options = {
  method: 'POST',
  headers: {Authorization: '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"meeting_link":"https://meet.google.com/zcs-xwyv-hvi","bot_name":"Meetstream Agent","video_required":true,"recording_config":{"realtime_endpoints":[{"type":"webhook","url":"https://your-server.com/webhook","events":["participant_events.join","participant_events.leave"]}]}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Bot with Participants Notification
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.meetstream.ai/api/v1/bots/create_bot"

	payload := strings.NewReader("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"recording_config\": {\n    \"realtime_endpoints\": [\n      {\n        \"type\": \"webhook\",\n        \"url\": \"https://your-server.com/webhook\",\n        \"events\": [\n          \"participant_events.join\",\n          \"participant_events.leave\"\n        ]\n      }\n    ]\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Bot with Participants Notification
require 'uri'
require 'net/http'

url = URI("https://api.meetstream.ai/api/v1/bots/create_bot")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"recording_config\": {\n    \"realtime_endpoints\": [\n      {\n        \"type\": \"webhook\",\n        \"url\": \"https://your-server.com/webhook\",\n        \"events\": [\n          \"participant_events.join\",\n          \"participant_events.leave\"\n        ]\n      }\n    ]\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java Bot with Participants Notification
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.meetstream.ai/api/v1/bots/create_bot")
  .header("Authorization", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"recording_config\": {\n    \"realtime_endpoints\": [\n      {\n        \"type\": \"webhook\",\n        \"url\": \"https://your-server.com/webhook\",\n        \"events\": [\n          \"participant_events.join\",\n          \"participant_events.leave\"\n        ]\n      }\n    ]\n  }\n}")
  .asString();
```

```php Bot with Participants Notification
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.meetstream.ai/api/v1/bots/create_bot', [
  'body' => '{
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "recording_config": {
    "realtime_endpoints": [
      {
        "type": "webhook",
        "url": "https://your-server.com/webhook",
        "events": [
          "participant_events.join",
          "participant_events.leave"
        ]
      }
    ]
  }
}',
  'headers' => [
    'Authorization' => '<apiKey>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Bot with Participants Notification
using RestSharp;

var client = new RestClient("https://api.meetstream.ai/api/v1/bots/create_bot");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"recording_config\": {\n    \"realtime_endpoints\": [\n      {\n        \"type\": \"webhook\",\n        \"url\": \"https://your-server.com/webhook\",\n        \"events\": [\n          \"participant_events.join\",\n          \"participant_events.leave\"\n        ]\n      }\n    ]\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Bot with Participants Notification
import Foundation

let headers = [
  "Authorization": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "recording_config": ["realtime_endpoints": [
      [
        "type": "webhook",
        "url": "https://your-server.com/webhook",
        "events": ["participant_events.join", "participant_events.leave"]
      ]
    ]]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.meetstream.ai/api/v1/bots/create_bot")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

```python Bot with Auto Delete Config
import requests

url = "https://api.meetstream.ai/api/v1/bots/create_bot"

payload = {
    "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
    "bot_name": "Meetstream Agent",
    "video_required": True,
    "callback_url": "https://your-server.com/webhook",
    "recording_config": { "retention": {
            "type": "timed",
            "hours": 24
        } }
}
headers = {
    "Authorization": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Bot with Auto Delete Config
const url = 'https://api.meetstream.ai/api/v1/bots/create_bot';
const options = {
  method: 'POST',
  headers: {Authorization: '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"meeting_link":"https://meet.google.com/zcs-xwyv-hvi","bot_name":"Meetstream Agent","video_required":true,"callback_url":"https://your-server.com/webhook","recording_config":{"retention":{"type":"timed","hours":24}}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Bot with Auto Delete Config
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.meetstream.ai/api/v1/bots/create_bot"

	payload := strings.NewReader("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"callback_url\": \"https://your-server.com/webhook\",\n  \"recording_config\": {\n    \"retention\": {\n      \"type\": \"timed\",\n      \"hours\": 24\n    }\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Bot with Auto Delete Config
require 'uri'
require 'net/http'

url = URI("https://api.meetstream.ai/api/v1/bots/create_bot")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"callback_url\": \"https://your-server.com/webhook\",\n  \"recording_config\": {\n    \"retention\": {\n      \"type\": \"timed\",\n      \"hours\": 24\n    }\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java Bot with Auto Delete Config
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.meetstream.ai/api/v1/bots/create_bot")
  .header("Authorization", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"callback_url\": \"https://your-server.com/webhook\",\n  \"recording_config\": {\n    \"retention\": {\n      \"type\": \"timed\",\n      \"hours\": 24\n    }\n  }\n}")
  .asString();
```

```php Bot with Auto Delete Config
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.meetstream.ai/api/v1/bots/create_bot', [
  'body' => '{
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "callback_url": "https://your-server.com/webhook",
  "recording_config": {
    "retention": {
      "type": "timed",
      "hours": 24
    }
  }
}',
  'headers' => [
    'Authorization' => '<apiKey>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Bot with Auto Delete Config
using RestSharp;

var client = new RestClient("https://api.meetstream.ai/api/v1/bots/create_bot");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"callback_url\": \"https://your-server.com/webhook\",\n  \"recording_config\": {\n    \"retention\": {\n      \"type\": \"timed\",\n      \"hours\": 24\n    }\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Bot with Auto Delete Config
import Foundation

let headers = [
  "Authorization": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "callback_url": "https://your-server.com/webhook",
  "recording_config": ["retention": [
      "type": "timed",
      "hours": 24
    ]]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.meetstream.ai/api/v1/bots/create_bot")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

```python Schedule Bot
import requests

url = "https://api.meetstream.ai/api/v1/bots/create_bot"

payload = {
    "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
    "bot_name": "Meetstream Agent",
    "video_required": True,
    "join_at": "2026-12-20T20:00:00+05:30"
}
headers = {
    "Authorization": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Schedule Bot
const url = 'https://api.meetstream.ai/api/v1/bots/create_bot';
const options = {
  method: 'POST',
  headers: {Authorization: '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"meeting_link":"https://meet.google.com/zcs-xwyv-hvi","bot_name":"Meetstream Agent","video_required":true,"join_at":"2026-12-20T20:00:00+05:30"}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Schedule Bot
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.meetstream.ai/api/v1/bots/create_bot"

	payload := strings.NewReader("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"join_at\": \"2026-12-20T20:00:00+05:30\"\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Schedule Bot
require 'uri'
require 'net/http'

url = URI("https://api.meetstream.ai/api/v1/bots/create_bot")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"join_at\": \"2026-12-20T20:00:00+05:30\"\n}"

response = http.request(request)
puts response.read_body
```

```java Schedule Bot
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.meetstream.ai/api/v1/bots/create_bot")
  .header("Authorization", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"join_at\": \"2026-12-20T20:00:00+05:30\"\n}")
  .asString();
```

```php Schedule Bot
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.meetstream.ai/api/v1/bots/create_bot', [
  'body' => '{
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "join_at": "2026-12-20T20:00:00+05:30"
}',
  'headers' => [
    'Authorization' => '<apiKey>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Schedule Bot
using RestSharp;

var client = new RestClient("https://api.meetstream.ai/api/v1/bots/create_bot");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"join_at\": \"2026-12-20T20:00:00+05:30\"\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Schedule Bot
import Foundation

let headers = [
  "Authorization": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "join_at": "2026-12-20T20:00:00+05:30"
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.meetstream.ai/api/v1/bots/create_bot")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

```python Bot with Image
import requests

url = "https://api.meetstream.ai/api/v1/bots/create_bot"

payload = {
    "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
    "bot_name": "Meetstream Agent",
    "video_required": True,
    "bot_image_url": "https://blog.meetstream.ai/wp-content/uploads/2025/08/Zoom-BG-Image.png"
}
headers = {
    "Authorization": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Bot with Image
const url = 'https://api.meetstream.ai/api/v1/bots/create_bot';
const options = {
  method: 'POST',
  headers: {Authorization: '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"meeting_link":"https://meet.google.com/zcs-xwyv-hvi","bot_name":"Meetstream Agent","video_required":true,"bot_image_url":"https://blog.meetstream.ai/wp-content/uploads/2025/08/Zoom-BG-Image.png"}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Bot with Image
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.meetstream.ai/api/v1/bots/create_bot"

	payload := strings.NewReader("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"bot_image_url\": \"https://blog.meetstream.ai/wp-content/uploads/2025/08/Zoom-BG-Image.png\"\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Bot with Image
require 'uri'
require 'net/http'

url = URI("https://api.meetstream.ai/api/v1/bots/create_bot")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"bot_image_url\": \"https://blog.meetstream.ai/wp-content/uploads/2025/08/Zoom-BG-Image.png\"\n}"

response = http.request(request)
puts response.read_body
```

```java Bot with Image
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.meetstream.ai/api/v1/bots/create_bot")
  .header("Authorization", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"bot_image_url\": \"https://blog.meetstream.ai/wp-content/uploads/2025/08/Zoom-BG-Image.png\"\n}")
  .asString();
```

```php Bot with Image
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.meetstream.ai/api/v1/bots/create_bot', [
  'body' => '{
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "bot_image_url": "https://blog.meetstream.ai/wp-content/uploads/2025/08/Zoom-BG-Image.png"
}',
  'headers' => [
    'Authorization' => '<apiKey>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Bot with Image
using RestSharp;

var client = new RestClient("https://api.meetstream.ai/api/v1/bots/create_bot");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"bot_image_url\": \"https://blog.meetstream.ai/wp-content/uploads/2025/08/Zoom-BG-Image.png\"\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Bot with Image
import Foundation

let headers = [
  "Authorization": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "bot_image_url": "https://blog.meetstream.ai/wp-content/uploads/2025/08/Zoom-BG-Image.png"
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.meetstream.ai/api/v1/bots/create_bot")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

```python Bot with Initial Message in Chat
import requests

url = "https://api.meetstream.ai/api/v1/bots/create_bot"

payload = {
    "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
    "bot_name": "Meetstream Agent",
    "video_required": True,
    "bot_message": "Hey Everyone :wave:, I'm a speaking agent"
}
headers = {
    "Authorization": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Bot with Initial Message in Chat
const url = 'https://api.meetstream.ai/api/v1/bots/create_bot';
const options = {
  method: 'POST',
  headers: {Authorization: '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"meeting_link":"https://meet.google.com/zcs-xwyv-hvi","bot_name":"Meetstream Agent","video_required":true,"bot_message":"Hey Everyone :wave:, I\'m a speaking agent"}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Bot with Initial Message in Chat
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.meetstream.ai/api/v1/bots/create_bot"

	payload := strings.NewReader("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"bot_message\": \"Hey Everyone :wave:, I'm a speaking agent\"\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Bot with Initial Message in Chat
require 'uri'
require 'net/http'

url = URI("https://api.meetstream.ai/api/v1/bots/create_bot")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"bot_message\": \"Hey Everyone :wave:, I'm a speaking agent\"\n}"

response = http.request(request)
puts response.read_body
```

```java Bot with Initial Message in Chat
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.meetstream.ai/api/v1/bots/create_bot")
  .header("Authorization", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"bot_message\": \"Hey Everyone :wave:, I'm a speaking agent\"\n}")
  .asString();
```

```php Bot with Initial Message in Chat
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.meetstream.ai/api/v1/bots/create_bot', [
  'body' => '{
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "bot_message": "Hey Everyone :wave:, I\'m a speaking agent"
}',
  'headers' => [
    'Authorization' => '<apiKey>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Bot with Initial Message in Chat
using RestSharp;

var client = new RestClient("https://api.meetstream.ai/api/v1/bots/create_bot");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"bot_message\": \"Hey Everyone :wave:, I'm a speaking agent\"\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Bot with Initial Message in Chat
import Foundation

let headers = [
  "Authorization": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "bot_message": "Hey Everyone :wave:, I'm a speaking agent"
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.meetstream.ai/api/v1/bots/create_bot")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

```python Transcription — Deepgram
import requests

url = "https://api.meetstream.ai/api/v1/bots/create_bot"

payload = {
    "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
    "bot_name": "Meetstream Agent",
    "video_required": True,
    "recording_config": { "transcript": { "provider": { "deepgram": {
                    "model": "nova-3",
                    "language": "en",
                    "punctuate": True,
                    "smart_format": True,
                    "diarize": True,
                    "paragraphs": True,
                    "numerals": True,
                    "filler_words": False,
                    "utterances": True,
                    "utt_split": 0.8,
                    "detect_language": False,
                    "keywords": ["MeetStream", "recording", "transcript"],
                    "search": ["MeetStream", "recording"],
                    "tag": ["custom"]
                } } } }
}
headers = {
    "Authorization": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Transcription — Deepgram
const url = 'https://api.meetstream.ai/api/v1/bots/create_bot';
const options = {
  method: 'POST',
  headers: {Authorization: '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"meeting_link":"https://meet.google.com/zcs-xwyv-hvi","bot_name":"Meetstream Agent","video_required":true,"recording_config":{"transcript":{"provider":{"deepgram":{"model":"nova-3","language":"en","punctuate":true,"smart_format":true,"diarize":true,"paragraphs":true,"numerals":true,"filler_words":false,"utterances":true,"utt_split":0.8,"detect_language":false,"keywords":["MeetStream","recording","transcript"],"search":["MeetStream","recording"],"tag":["custom"]}}}}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Transcription — Deepgram
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.meetstream.ai/api/v1/bots/create_bot"

	payload := strings.NewReader("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"recording_config\": {\n    \"transcript\": {\n      \"provider\": {\n        \"deepgram\": {\n          \"model\": \"nova-3\",\n          \"language\": \"en\",\n          \"punctuate\": true,\n          \"smart_format\": true,\n          \"diarize\": true,\n          \"paragraphs\": true,\n          \"numerals\": true,\n          \"filler_words\": false,\n          \"utterances\": true,\n          \"utt_split\": 0.8,\n          \"detect_language\": false,\n          \"keywords\": [\n            \"MeetStream\",\n            \"recording\",\n            \"transcript\"\n          ],\n          \"search\": [\n            \"MeetStream\",\n            \"recording\"\n          ],\n          \"tag\": [\n            \"custom\"\n          ]\n        }\n      }\n    }\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Transcription — Deepgram
require 'uri'
require 'net/http'

url = URI("https://api.meetstream.ai/api/v1/bots/create_bot")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"recording_config\": {\n    \"transcript\": {\n      \"provider\": {\n        \"deepgram\": {\n          \"model\": \"nova-3\",\n          \"language\": \"en\",\n          \"punctuate\": true,\n          \"smart_format\": true,\n          \"diarize\": true,\n          \"paragraphs\": true,\n          \"numerals\": true,\n          \"filler_words\": false,\n          \"utterances\": true,\n          \"utt_split\": 0.8,\n          \"detect_language\": false,\n          \"keywords\": [\n            \"MeetStream\",\n            \"recording\",\n            \"transcript\"\n          ],\n          \"search\": [\n            \"MeetStream\",\n            \"recording\"\n          ],\n          \"tag\": [\n            \"custom\"\n          ]\n        }\n      }\n    }\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java Transcription — Deepgram
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.meetstream.ai/api/v1/bots/create_bot")
  .header("Authorization", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"recording_config\": {\n    \"transcript\": {\n      \"provider\": {\n        \"deepgram\": {\n          \"model\": \"nova-3\",\n          \"language\": \"en\",\n          \"punctuate\": true,\n          \"smart_format\": true,\n          \"diarize\": true,\n          \"paragraphs\": true,\n          \"numerals\": true,\n          \"filler_words\": false,\n          \"utterances\": true,\n          \"utt_split\": 0.8,\n          \"detect_language\": false,\n          \"keywords\": [\n            \"MeetStream\",\n            \"recording\",\n            \"transcript\"\n          ],\n          \"search\": [\n            \"MeetStream\",\n            \"recording\"\n          ],\n          \"tag\": [\n            \"custom\"\n          ]\n        }\n      }\n    }\n  }\n}")
  .asString();
```

```php Transcription — Deepgram
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.meetstream.ai/api/v1/bots/create_bot', [
  'body' => '{
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "recording_config": {
    "transcript": {
      "provider": {
        "deepgram": {
          "model": "nova-3",
          "language": "en",
          "punctuate": true,
          "smart_format": true,
          "diarize": true,
          "paragraphs": true,
          "numerals": true,
          "filler_words": false,
          "utterances": true,
          "utt_split": 0.8,
          "detect_language": false,
          "keywords": [
            "MeetStream",
            "recording",
            "transcript"
          ],
          "search": [
            "MeetStream",
            "recording"
          ],
          "tag": [
            "custom"
          ]
        }
      }
    }
  }
}',
  'headers' => [
    'Authorization' => '<apiKey>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Transcription — Deepgram
using RestSharp;

var client = new RestClient("https://api.meetstream.ai/api/v1/bots/create_bot");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"recording_config\": {\n    \"transcript\": {\n      \"provider\": {\n        \"deepgram\": {\n          \"model\": \"nova-3\",\n          \"language\": \"en\",\n          \"punctuate\": true,\n          \"smart_format\": true,\n          \"diarize\": true,\n          \"paragraphs\": true,\n          \"numerals\": true,\n          \"filler_words\": false,\n          \"utterances\": true,\n          \"utt_split\": 0.8,\n          \"detect_language\": false,\n          \"keywords\": [\n            \"MeetStream\",\n            \"recording\",\n            \"transcript\"\n          ],\n          \"search\": [\n            \"MeetStream\",\n            \"recording\"\n          ],\n          \"tag\": [\n            \"custom\"\n          ]\n        }\n      }\n    }\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Transcription — Deepgram
import Foundation

let headers = [
  "Authorization": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "recording_config": ["transcript": ["provider": ["deepgram": [
          "model": "nova-3",
          "language": "en",
          "punctuate": true,
          "smart_format": true,
          "diarize": true,
          "paragraphs": true,
          "numerals": true,
          "filler_words": false,
          "utterances": true,
          "utt_split": 0.8,
          "detect_language": false,
          "keywords": ["MeetStream", "recording", "transcript"],
          "search": ["MeetStream", "recording"],
          "tag": ["custom"]
        ]]]]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.meetstream.ai/api/v1/bots/create_bot")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

```python Transcription — AssemblyAI
import requests

url = "https://api.meetstream.ai/api/v1/bots/create_bot"

payload = {
    "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
    "bot_name": "Meetstream Agent",
    "video_required": True,
    "recording_config": { "transcript": { "provider": { "assemblyai": {
                    "speech_models": ["universal-2"],
                    "language_code": "en_us",
                    "speaker_labels": True,
                    "punctuate": True,
                    "format_text": True,
                    "filter_profanity": False,
                    "redact_pii": False,
                    "auto_chapters": False,
                    "entity_detection": False,
                    "keyterms_prompt": ["MeetStream"]
                } } } }
}
headers = {
    "Authorization": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Transcription — AssemblyAI
const url = 'https://api.meetstream.ai/api/v1/bots/create_bot';
const options = {
  method: 'POST',
  headers: {Authorization: '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"meeting_link":"https://meet.google.com/zcs-xwyv-hvi","bot_name":"Meetstream Agent","video_required":true,"recording_config":{"transcript":{"provider":{"assemblyai":{"speech_models":["universal-2"],"language_code":"en_us","speaker_labels":true,"punctuate":true,"format_text":true,"filter_profanity":false,"redact_pii":false,"auto_chapters":false,"entity_detection":false,"keyterms_prompt":["MeetStream"]}}}}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Transcription — AssemblyAI
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.meetstream.ai/api/v1/bots/create_bot"

	payload := strings.NewReader("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"recording_config\": {\n    \"transcript\": {\n      \"provider\": {\n        \"assemblyai\": {\n          \"speech_models\": [\n            \"universal-2\"\n          ],\n          \"language_code\": \"en_us\",\n          \"speaker_labels\": true,\n          \"punctuate\": true,\n          \"format_text\": true,\n          \"filter_profanity\": false,\n          \"redact_pii\": false,\n          \"auto_chapters\": false,\n          \"entity_detection\": false,\n          \"keyterms_prompt\": [\n            \"MeetStream\"\n          ]\n        }\n      }\n    }\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Transcription — AssemblyAI
require 'uri'
require 'net/http'

url = URI("https://api.meetstream.ai/api/v1/bots/create_bot")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"recording_config\": {\n    \"transcript\": {\n      \"provider\": {\n        \"assemblyai\": {\n          \"speech_models\": [\n            \"universal-2\"\n          ],\n          \"language_code\": \"en_us\",\n          \"speaker_labels\": true,\n          \"punctuate\": true,\n          \"format_text\": true,\n          \"filter_profanity\": false,\n          \"redact_pii\": false,\n          \"auto_chapters\": false,\n          \"entity_detection\": false,\n          \"keyterms_prompt\": [\n            \"MeetStream\"\n          ]\n        }\n      }\n    }\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java Transcription — AssemblyAI
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.meetstream.ai/api/v1/bots/create_bot")
  .header("Authorization", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"recording_config\": {\n    \"transcript\": {\n      \"provider\": {\n        \"assemblyai\": {\n          \"speech_models\": [\n            \"universal-2\"\n          ],\n          \"language_code\": \"en_us\",\n          \"speaker_labels\": true,\n          \"punctuate\": true,\n          \"format_text\": true,\n          \"filter_profanity\": false,\n          \"redact_pii\": false,\n          \"auto_chapters\": false,\n          \"entity_detection\": false,\n          \"keyterms_prompt\": [\n            \"MeetStream\"\n          ]\n        }\n      }\n    }\n  }\n}")
  .asString();
```

```php Transcription — AssemblyAI
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.meetstream.ai/api/v1/bots/create_bot', [
  'body' => '{
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "recording_config": {
    "transcript": {
      "provider": {
        "assemblyai": {
          "speech_models": [
            "universal-2"
          ],
          "language_code": "en_us",
          "speaker_labels": true,
          "punctuate": true,
          "format_text": true,
          "filter_profanity": false,
          "redact_pii": false,
          "auto_chapters": false,
          "entity_detection": false,
          "keyterms_prompt": [
            "MeetStream"
          ]
        }
      }
    }
  }
}',
  'headers' => [
    'Authorization' => '<apiKey>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Transcription — AssemblyAI
using RestSharp;

var client = new RestClient("https://api.meetstream.ai/api/v1/bots/create_bot");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"recording_config\": {\n    \"transcript\": {\n      \"provider\": {\n        \"assemblyai\": {\n          \"speech_models\": [\n            \"universal-2\"\n          ],\n          \"language_code\": \"en_us\",\n          \"speaker_labels\": true,\n          \"punctuate\": true,\n          \"format_text\": true,\n          \"filter_profanity\": false,\n          \"redact_pii\": false,\n          \"auto_chapters\": false,\n          \"entity_detection\": false,\n          \"keyterms_prompt\": [\n            \"MeetStream\"\n          ]\n        }\n      }\n    }\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Transcription — AssemblyAI
import Foundation

let headers = [
  "Authorization": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "recording_config": ["transcript": ["provider": ["assemblyai": [
          "speech_models": ["universal-2"],
          "language_code": "en_us",
          "speaker_labels": true,
          "punctuate": true,
          "format_text": true,
          "filter_profanity": false,
          "redact_pii": false,
          "auto_chapters": false,
          "entity_detection": false,
          "keyterms_prompt": ["MeetStream"]
        ]]]]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.meetstream.ai/api/v1/bots/create_bot")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

```python Transcription — Jigsaw
import requests

url = "https://api.meetstream.ai/api/v1/bots/create_bot"

payload = {
    "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
    "bot_name": "Meetstream Agent",
    "video_required": True,
    "bot_message": "Hey Everyone, I'm Checking Jigsawstack transcript",
    "bot_image_url": "https://blog.meetstream.ai/wp-content/uploads/2025/08/Zoom-BG-Image.png",
    "custom_attributes": {
        "tag": "Meetstream",
        "sample": "testing",
        "user": "your-user-id"
    },
    "automatic_leave": {
        "waiting_room_timeout": 100,
        "everyone_left_timeout": 100,
        "voice_inactivity_timeout": 100,
        "in_call_recording_timeout": 14400,
        "recording_permission_denied_timeout": 60
    },
    "recording_config": {
        "retention": {
            "type": "timed",
            "hours": 24
        },
        "transcript": { "provider": { "jigsawstack": {
                    "language": "auto",
                    "translate": False,
                    "by_speaker": True
                } } }
    }
}
headers = {
    "Authorization": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Transcription — Jigsaw
const url = 'https://api.meetstream.ai/api/v1/bots/create_bot';
const options = {
  method: 'POST',
  headers: {Authorization: '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"meeting_link":"https://meet.google.com/zcs-xwyv-hvi","bot_name":"Meetstream Agent","video_required":true,"bot_message":"Hey Everyone, I\'m Checking Jigsawstack transcript","bot_image_url":"https://blog.meetstream.ai/wp-content/uploads/2025/08/Zoom-BG-Image.png","custom_attributes":{"tag":"Meetstream","sample":"testing","user":"your-user-id"},"automatic_leave":{"waiting_room_timeout":100,"everyone_left_timeout":100,"voice_inactivity_timeout":100,"in_call_recording_timeout":14400,"recording_permission_denied_timeout":60},"recording_config":{"retention":{"type":"timed","hours":24},"transcript":{"provider":{"jigsawstack":{"language":"auto","translate":false,"by_speaker":true}}}}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Transcription — Jigsaw
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.meetstream.ai/api/v1/bots/create_bot"

	payload := strings.NewReader("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"bot_message\": \"Hey Everyone, I'm Checking Jigsawstack transcript\",\n  \"bot_image_url\": \"https://blog.meetstream.ai/wp-content/uploads/2025/08/Zoom-BG-Image.png\",\n  \"custom_attributes\": {\n    \"tag\": \"Meetstream\",\n    \"sample\": \"testing\",\n    \"user\": \"your-user-id\"\n  },\n  \"automatic_leave\": {\n    \"waiting_room_timeout\": 100,\n    \"everyone_left_timeout\": 100,\n    \"voice_inactivity_timeout\": 100,\n    \"in_call_recording_timeout\": 14400,\n    \"recording_permission_denied_timeout\": 60\n  },\n  \"recording_config\": {\n    \"retention\": {\n      \"type\": \"timed\",\n      \"hours\": 24\n    },\n    \"transcript\": {\n      \"provider\": {\n        \"jigsawstack\": {\n          \"language\": \"auto\",\n          \"translate\": false,\n          \"by_speaker\": true\n        }\n      }\n    }\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Transcription — Jigsaw
require 'uri'
require 'net/http'

url = URI("https://api.meetstream.ai/api/v1/bots/create_bot")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"bot_message\": \"Hey Everyone, I'm Checking Jigsawstack transcript\",\n  \"bot_image_url\": \"https://blog.meetstream.ai/wp-content/uploads/2025/08/Zoom-BG-Image.png\",\n  \"custom_attributes\": {\n    \"tag\": \"Meetstream\",\n    \"sample\": \"testing\",\n    \"user\": \"your-user-id\"\n  },\n  \"automatic_leave\": {\n    \"waiting_room_timeout\": 100,\n    \"everyone_left_timeout\": 100,\n    \"voice_inactivity_timeout\": 100,\n    \"in_call_recording_timeout\": 14400,\n    \"recording_permission_denied_timeout\": 60\n  },\n  \"recording_config\": {\n    \"retention\": {\n      \"type\": \"timed\",\n      \"hours\": 24\n    },\n    \"transcript\": {\n      \"provider\": {\n        \"jigsawstack\": {\n          \"language\": \"auto\",\n          \"translate\": false,\n          \"by_speaker\": true\n        }\n      }\n    }\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java Transcription — Jigsaw
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.meetstream.ai/api/v1/bots/create_bot")
  .header("Authorization", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"bot_message\": \"Hey Everyone, I'm Checking Jigsawstack transcript\",\n  \"bot_image_url\": \"https://blog.meetstream.ai/wp-content/uploads/2025/08/Zoom-BG-Image.png\",\n  \"custom_attributes\": {\n    \"tag\": \"Meetstream\",\n    \"sample\": \"testing\",\n    \"user\": \"your-user-id\"\n  },\n  \"automatic_leave\": {\n    \"waiting_room_timeout\": 100,\n    \"everyone_left_timeout\": 100,\n    \"voice_inactivity_timeout\": 100,\n    \"in_call_recording_timeout\": 14400,\n    \"recording_permission_denied_timeout\": 60\n  },\n  \"recording_config\": {\n    \"retention\": {\n      \"type\": \"timed\",\n      \"hours\": 24\n    },\n    \"transcript\": {\n      \"provider\": {\n        \"jigsawstack\": {\n          \"language\": \"auto\",\n          \"translate\": false,\n          \"by_speaker\": true\n        }\n      }\n    }\n  }\n}")
  .asString();
```

```php Transcription — Jigsaw
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.meetstream.ai/api/v1/bots/create_bot', [
  'body' => '{
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "bot_message": "Hey Everyone, I\'m Checking Jigsawstack transcript",
  "bot_image_url": "https://blog.meetstream.ai/wp-content/uploads/2025/08/Zoom-BG-Image.png",
  "custom_attributes": {
    "tag": "Meetstream",
    "sample": "testing",
    "user": "your-user-id"
  },
  "automatic_leave": {
    "waiting_room_timeout": 100,
    "everyone_left_timeout": 100,
    "voice_inactivity_timeout": 100,
    "in_call_recording_timeout": 14400,
    "recording_permission_denied_timeout": 60
  },
  "recording_config": {
    "retention": {
      "type": "timed",
      "hours": 24
    },
    "transcript": {
      "provider": {
        "jigsawstack": {
          "language": "auto",
          "translate": false,
          "by_speaker": true
        }
      }
    }
  }
}',
  'headers' => [
    'Authorization' => '<apiKey>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Transcription — Jigsaw
using RestSharp;

var client = new RestClient("https://api.meetstream.ai/api/v1/bots/create_bot");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"bot_message\": \"Hey Everyone, I'm Checking Jigsawstack transcript\",\n  \"bot_image_url\": \"https://blog.meetstream.ai/wp-content/uploads/2025/08/Zoom-BG-Image.png\",\n  \"custom_attributes\": {\n    \"tag\": \"Meetstream\",\n    \"sample\": \"testing\",\n    \"user\": \"your-user-id\"\n  },\n  \"automatic_leave\": {\n    \"waiting_room_timeout\": 100,\n    \"everyone_left_timeout\": 100,\n    \"voice_inactivity_timeout\": 100,\n    \"in_call_recording_timeout\": 14400,\n    \"recording_permission_denied_timeout\": 60\n  },\n  \"recording_config\": {\n    \"retention\": {\n      \"type\": \"timed\",\n      \"hours\": 24\n    },\n    \"transcript\": {\n      \"provider\": {\n        \"jigsawstack\": {\n          \"language\": \"auto\",\n          \"translate\": false,\n          \"by_speaker\": true\n        }\n      }\n    }\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Transcription — Jigsaw
import Foundation

let headers = [
  "Authorization": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "bot_message": "Hey Everyone, I'm Checking Jigsawstack transcript",
  "bot_image_url": "https://blog.meetstream.ai/wp-content/uploads/2025/08/Zoom-BG-Image.png",
  "custom_attributes": [
    "tag": "Meetstream",
    "sample": "testing",
    "user": "your-user-id"
  ],
  "automatic_leave": [
    "waiting_room_timeout": 100,
    "everyone_left_timeout": 100,
    "voice_inactivity_timeout": 100,
    "in_call_recording_timeout": 14400,
    "recording_permission_denied_timeout": 60
  ],
  "recording_config": [
    "retention": [
      "type": "timed",
      "hours": 24
    ],
    "transcript": ["provider": ["jigsawstack": [
          "language": "auto",
          "translate": false,
          "by_speaker": true
        ]]]
  ]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.meetstream.ai/api/v1/bots/create_bot")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

```python Transcription — MeetStream
import requests

url = "https://api.meetstream.ai/api/v1/bots/create_bot"

payload = {
    "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
    "bot_name": "MeetStream Agent",
    "video_required": True,
    "bot_message": "Hey Everyone, I'm Checking Jigsawstack transcript",
    "bot_image_url": "https://blog.meetstream.ai/wp-content/uploads/2025/08/Zoom-BG-Image.png",
    "custom_attributes": {
        "tag": "Meetstream",
        "sample": "testing",
        "user": "your_user_id"
    },
    "automatic_leave": {
        "waiting_room_timeout": 100,
        "everyone_left_timeout": 100,
        "voice_inactivity_timeout": 100,
        "in_call_recording_timeout": 14400,
        "recording_permission_denied_timeout": 60
    },
    "recording_config": {
        "retention": {
            "type": "timed",
            "hours": 24
        },
        "transcript": { "provider": { "meetstream": {
                    "language": "auto",
                    "translate": False
                } } }
    }
}
headers = {
    "Authorization": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Transcription — MeetStream
const url = 'https://api.meetstream.ai/api/v1/bots/create_bot';
const options = {
  method: 'POST',
  headers: {Authorization: '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"meeting_link":"https://meet.google.com/zcs-xwyv-hvi","bot_name":"MeetStream Agent","video_required":true,"bot_message":"Hey Everyone, I\'m Checking Jigsawstack transcript","bot_image_url":"https://blog.meetstream.ai/wp-content/uploads/2025/08/Zoom-BG-Image.png","custom_attributes":{"tag":"Meetstream","sample":"testing","user":"your_user_id"},"automatic_leave":{"waiting_room_timeout":100,"everyone_left_timeout":100,"voice_inactivity_timeout":100,"in_call_recording_timeout":14400,"recording_permission_denied_timeout":60},"recording_config":{"retention":{"type":"timed","hours":24},"transcript":{"provider":{"meetstream":{"language":"auto","translate":false}}}}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Transcription — MeetStream
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.meetstream.ai/api/v1/bots/create_bot"

	payload := strings.NewReader("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"MeetStream Agent\",\n  \"video_required\": true,\n  \"bot_message\": \"Hey Everyone, I'm Checking Jigsawstack transcript\",\n  \"bot_image_url\": \"https://blog.meetstream.ai/wp-content/uploads/2025/08/Zoom-BG-Image.png\",\n  \"custom_attributes\": {\n    \"tag\": \"Meetstream\",\n    \"sample\": \"testing\",\n    \"user\": \"your_user_id\"\n  },\n  \"automatic_leave\": {\n    \"waiting_room_timeout\": 100,\n    \"everyone_left_timeout\": 100,\n    \"voice_inactivity_timeout\": 100,\n    \"in_call_recording_timeout\": 14400,\n    \"recording_permission_denied_timeout\": 60\n  },\n  \"recording_config\": {\n    \"retention\": {\n      \"type\": \"timed\",\n      \"hours\": 24\n    },\n    \"transcript\": {\n      \"provider\": {\n        \"meetstream\": {\n          \"language\": \"auto\",\n          \"translate\": false\n        }\n      }\n    }\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Transcription — MeetStream
require 'uri'
require 'net/http'

url = URI("https://api.meetstream.ai/api/v1/bots/create_bot")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"MeetStream Agent\",\n  \"video_required\": true,\n  \"bot_message\": \"Hey Everyone, I'm Checking Jigsawstack transcript\",\n  \"bot_image_url\": \"https://blog.meetstream.ai/wp-content/uploads/2025/08/Zoom-BG-Image.png\",\n  \"custom_attributes\": {\n    \"tag\": \"Meetstream\",\n    \"sample\": \"testing\",\n    \"user\": \"your_user_id\"\n  },\n  \"automatic_leave\": {\n    \"waiting_room_timeout\": 100,\n    \"everyone_left_timeout\": 100,\n    \"voice_inactivity_timeout\": 100,\n    \"in_call_recording_timeout\": 14400,\n    \"recording_permission_denied_timeout\": 60\n  },\n  \"recording_config\": {\n    \"retention\": {\n      \"type\": \"timed\",\n      \"hours\": 24\n    },\n    \"transcript\": {\n      \"provider\": {\n        \"meetstream\": {\n          \"language\": \"auto\",\n          \"translate\": false\n        }\n      }\n    }\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java Transcription — MeetStream
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.meetstream.ai/api/v1/bots/create_bot")
  .header("Authorization", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"MeetStream Agent\",\n  \"video_required\": true,\n  \"bot_message\": \"Hey Everyone, I'm Checking Jigsawstack transcript\",\n  \"bot_image_url\": \"https://blog.meetstream.ai/wp-content/uploads/2025/08/Zoom-BG-Image.png\",\n  \"custom_attributes\": {\n    \"tag\": \"Meetstream\",\n    \"sample\": \"testing\",\n    \"user\": \"your_user_id\"\n  },\n  \"automatic_leave\": {\n    \"waiting_room_timeout\": 100,\n    \"everyone_left_timeout\": 100,\n    \"voice_inactivity_timeout\": 100,\n    \"in_call_recording_timeout\": 14400,\n    \"recording_permission_denied_timeout\": 60\n  },\n  \"recording_config\": {\n    \"retention\": {\n      \"type\": \"timed\",\n      \"hours\": 24\n    },\n    \"transcript\": {\n      \"provider\": {\n        \"meetstream\": {\n          \"language\": \"auto\",\n          \"translate\": false\n        }\n      }\n    }\n  }\n}")
  .asString();
```

```php Transcription — MeetStream
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.meetstream.ai/api/v1/bots/create_bot', [
  'body' => '{
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "MeetStream Agent",
  "video_required": true,
  "bot_message": "Hey Everyone, I\'m Checking Jigsawstack transcript",
  "bot_image_url": "https://blog.meetstream.ai/wp-content/uploads/2025/08/Zoom-BG-Image.png",
  "custom_attributes": {
    "tag": "Meetstream",
    "sample": "testing",
    "user": "your_user_id"
  },
  "automatic_leave": {
    "waiting_room_timeout": 100,
    "everyone_left_timeout": 100,
    "voice_inactivity_timeout": 100,
    "in_call_recording_timeout": 14400,
    "recording_permission_denied_timeout": 60
  },
  "recording_config": {
    "retention": {
      "type": "timed",
      "hours": 24
    },
    "transcript": {
      "provider": {
        "meetstream": {
          "language": "auto",
          "translate": false
        }
      }
    }
  }
}',
  'headers' => [
    'Authorization' => '<apiKey>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Transcription — MeetStream
using RestSharp;

var client = new RestClient("https://api.meetstream.ai/api/v1/bots/create_bot");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"MeetStream Agent\",\n  \"video_required\": true,\n  \"bot_message\": \"Hey Everyone, I'm Checking Jigsawstack transcript\",\n  \"bot_image_url\": \"https://blog.meetstream.ai/wp-content/uploads/2025/08/Zoom-BG-Image.png\",\n  \"custom_attributes\": {\n    \"tag\": \"Meetstream\",\n    \"sample\": \"testing\",\n    \"user\": \"your_user_id\"\n  },\n  \"automatic_leave\": {\n    \"waiting_room_timeout\": 100,\n    \"everyone_left_timeout\": 100,\n    \"voice_inactivity_timeout\": 100,\n    \"in_call_recording_timeout\": 14400,\n    \"recording_permission_denied_timeout\": 60\n  },\n  \"recording_config\": {\n    \"retention\": {\n      \"type\": \"timed\",\n      \"hours\": 24\n    },\n    \"transcript\": {\n      \"provider\": {\n        \"meetstream\": {\n          \"language\": \"auto\",\n          \"translate\": false\n        }\n      }\n    }\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Transcription — MeetStream
import Foundation

let headers = [
  "Authorization": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "MeetStream Agent",
  "video_required": true,
  "bot_message": "Hey Everyone, I'm Checking Jigsawstack transcript",
  "bot_image_url": "https://blog.meetstream.ai/wp-content/uploads/2025/08/Zoom-BG-Image.png",
  "custom_attributes": [
    "tag": "Meetstream",
    "sample": "testing",
    "user": "your_user_id"
  ],
  "automatic_leave": [
    "waiting_room_timeout": 100,
    "everyone_left_timeout": 100,
    "voice_inactivity_timeout": 100,
    "in_call_recording_timeout": 14400,
    "recording_permission_denied_timeout": 60
  ],
  "recording_config": [
    "retention": [
      "type": "timed",
      "hours": 24
    ],
    "transcript": ["provider": ["meetstream": [
          "language": "auto",
          "translate": false
        ]]]
  ]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.meetstream.ai/api/v1/bots/create_bot")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

```python Transcription — Sarvam
import requests

url = "https://api.meetstream.ai/api/v1/bots/create_bot"

payload = {
    "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
    "bot_name": "Meetstream Agent",
    "video_required": True,
    "callback_url": "https://your-server.com/webhook",
    "recording_config": { "transcript": { "provider": { "sarvam": {
                    "model": "saaras:v3",
                    "language_code": "en-IN",
                    "mode": "transcribe",
                    "with_diarization": True
                } } } }
}
headers = {
    "Authorization": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Transcription — Sarvam
const url = 'https://api.meetstream.ai/api/v1/bots/create_bot';
const options = {
  method: 'POST',
  headers: {Authorization: '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"meeting_link":"https://meet.google.com/zcs-xwyv-hvi","bot_name":"Meetstream Agent","video_required":true,"callback_url":"https://your-server.com/webhook","recording_config":{"transcript":{"provider":{"sarvam":{"model":"saaras:v3","language_code":"en-IN","mode":"transcribe","with_diarization":true}}}}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Transcription — Sarvam
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.meetstream.ai/api/v1/bots/create_bot"

	payload := strings.NewReader("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"callback_url\": \"https://your-server.com/webhook\",\n  \"recording_config\": {\n    \"transcript\": {\n      \"provider\": {\n        \"sarvam\": {\n          \"model\": \"saaras:v3\",\n          \"language_code\": \"en-IN\",\n          \"mode\": \"transcribe\",\n          \"with_diarization\": true\n        }\n      }\n    }\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Transcription — Sarvam
require 'uri'
require 'net/http'

url = URI("https://api.meetstream.ai/api/v1/bots/create_bot")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"callback_url\": \"https://your-server.com/webhook\",\n  \"recording_config\": {\n    \"transcript\": {\n      \"provider\": {\n        \"sarvam\": {\n          \"model\": \"saaras:v3\",\n          \"language_code\": \"en-IN\",\n          \"mode\": \"transcribe\",\n          \"with_diarization\": true\n        }\n      }\n    }\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java Transcription — Sarvam
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.meetstream.ai/api/v1/bots/create_bot")
  .header("Authorization", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"callback_url\": \"https://your-server.com/webhook\",\n  \"recording_config\": {\n    \"transcript\": {\n      \"provider\": {\n        \"sarvam\": {\n          \"model\": \"saaras:v3\",\n          \"language_code\": \"en-IN\",\n          \"mode\": \"transcribe\",\n          \"with_diarization\": true\n        }\n      }\n    }\n  }\n}")
  .asString();
```

```php Transcription — Sarvam
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.meetstream.ai/api/v1/bots/create_bot', [
  'body' => '{
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "callback_url": "https://your-server.com/webhook",
  "recording_config": {
    "transcript": {
      "provider": {
        "sarvam": {
          "model": "saaras:v3",
          "language_code": "en-IN",
          "mode": "transcribe",
          "with_diarization": true
        }
      }
    }
  }
}',
  'headers' => [
    'Authorization' => '<apiKey>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Transcription — Sarvam
using RestSharp;

var client = new RestClient("https://api.meetstream.ai/api/v1/bots/create_bot");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"callback_url\": \"https://your-server.com/webhook\",\n  \"recording_config\": {\n    \"transcript\": {\n      \"provider\": {\n        \"sarvam\": {\n          \"model\": \"saaras:v3\",\n          \"language_code\": \"en-IN\",\n          \"mode\": \"transcribe\",\n          \"with_diarization\": true\n        }\n      }\n    }\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Transcription — Sarvam
import Foundation

let headers = [
  "Authorization": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "callback_url": "https://your-server.com/webhook",
  "recording_config": ["transcript": ["provider": ["sarvam": [
          "model": "saaras:v3",
          "language_code": "en-IN",
          "mode": "transcribe",
          "with_diarization": true
        ]]]]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.meetstream.ai/api/v1/bots/create_bot")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

```python Transcription — Captions
import requests

url = "https://api.meetstream.ai/api/v1/bots/create_bot"

payload = {
    "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
    "bot_name": "Meetstream Agent",
    "video_required": True,
    "live_transcription_required": { "webhook_url": "https://your-server.com/webhook" },
    "recording_config": { "transcript": { "provider": { "meeting_captions": {} } } }
}
headers = {
    "Authorization": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Transcription — Captions
const url = 'https://api.meetstream.ai/api/v1/bots/create_bot';
const options = {
  method: 'POST',
  headers: {Authorization: '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"meeting_link":"https://meet.google.com/zcs-xwyv-hvi","bot_name":"Meetstream Agent","video_required":true,"live_transcription_required":{"webhook_url":"https://your-server.com/webhook"},"recording_config":{"transcript":{"provider":{"meeting_captions":{}}}}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Transcription — Captions
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.meetstream.ai/api/v1/bots/create_bot"

	payload := strings.NewReader("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"live_transcription_required\": {\n    \"webhook_url\": \"https://your-server.com/webhook\"\n  },\n  \"recording_config\": {\n    \"transcript\": {\n      \"provider\": {\n        \"meeting_captions\": {}\n      }\n    }\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Transcription — Captions
require 'uri'
require 'net/http'

url = URI("https://api.meetstream.ai/api/v1/bots/create_bot")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"live_transcription_required\": {\n    \"webhook_url\": \"https://your-server.com/webhook\"\n  },\n  \"recording_config\": {\n    \"transcript\": {\n      \"provider\": {\n        \"meeting_captions\": {}\n      }\n    }\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java Transcription — Captions
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.meetstream.ai/api/v1/bots/create_bot")
  .header("Authorization", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"live_transcription_required\": {\n    \"webhook_url\": \"https://your-server.com/webhook\"\n  },\n  \"recording_config\": {\n    \"transcript\": {\n      \"provider\": {\n        \"meeting_captions\": {}\n      }\n    }\n  }\n}")
  .asString();
```

```php Transcription — Captions
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.meetstream.ai/api/v1/bots/create_bot', [
  'body' => '{
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "live_transcription_required": {
    "webhook_url": "https://your-server.com/webhook"
  },
  "recording_config": {
    "transcript": {
      "provider": {
        "meeting_captions": {}
      }
    }
  }
}',
  'headers' => [
    'Authorization' => '<apiKey>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Transcription — Captions
using RestSharp;

var client = new RestClient("https://api.meetstream.ai/api/v1/bots/create_bot");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"live_transcription_required\": {\n    \"webhook_url\": \"https://your-server.com/webhook\"\n  },\n  \"recording_config\": {\n    \"transcript\": {\n      \"provider\": {\n        \"meeting_captions\": {}\n      }\n    }\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Transcription — Captions
import Foundation

let headers = [
  "Authorization": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "live_transcription_required": ["webhook_url": "https://your-server.com/webhook"],
  "recording_config": ["transcript": ["provider": ["meeting_captions": []]]]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.meetstream.ai/api/v1/bots/create_bot")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

```python Transcription — AssemblyAI Streaming
import requests

url = "https://api.meetstream.ai/api/v1/bots/create_bot"

payload = {
    "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
    "bot_name": "Meetstream Agent",
    "video_required": True,
    "live_transcription_required": { "webhook_url": "https://your-server.com/webhook" },
    "recording_config": { "transcript": { "provider": { "assemblyai_streaming": {
                    "speech_model": "universal-streaming-english",
                    "transcription_mode": "raw",
                    "sample_rate": 48000,
                    "format_turns": False,
                    "encoding": "pcm_s16le",
                    "vad_threshold": "0.4",
                    "end_of_turn_confidence_threshold": "0.4",
                    "inactivity_timeout": 300,
                    "min_end_of_turn_silence_when_confident": "400",
                    "max_turn_silence": "1280"
                } } } }
}
headers = {
    "Authorization": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Transcription — AssemblyAI Streaming
const url = 'https://api.meetstream.ai/api/v1/bots/create_bot';
const options = {
  method: 'POST',
  headers: {Authorization: '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"meeting_link":"https://meet.google.com/zcs-xwyv-hvi","bot_name":"Meetstream Agent","video_required":true,"live_transcription_required":{"webhook_url":"https://your-server.com/webhook"},"recording_config":{"transcript":{"provider":{"assemblyai_streaming":{"speech_model":"universal-streaming-english","transcription_mode":"raw","sample_rate":48000,"format_turns":false,"encoding":"pcm_s16le","vad_threshold":"0.4","end_of_turn_confidence_threshold":"0.4","inactivity_timeout":300,"min_end_of_turn_silence_when_confident":"400","max_turn_silence":"1280"}}}}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Transcription — AssemblyAI Streaming
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.meetstream.ai/api/v1/bots/create_bot"

	payload := strings.NewReader("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"live_transcription_required\": {\n    \"webhook_url\": \"https://your-server.com/webhook\"\n  },\n  \"recording_config\": {\n    \"transcript\": {\n      \"provider\": {\n        \"assemblyai_streaming\": {\n          \"speech_model\": \"universal-streaming-english\",\n          \"transcription_mode\": \"raw\",\n          \"sample_rate\": 48000,\n          \"format_turns\": false,\n          \"encoding\": \"pcm_s16le\",\n          \"vad_threshold\": \"0.4\",\n          \"end_of_turn_confidence_threshold\": \"0.4\",\n          \"inactivity_timeout\": 300,\n          \"min_end_of_turn_silence_when_confident\": \"400\",\n          \"max_turn_silence\": \"1280\"\n        }\n      }\n    }\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Transcription — AssemblyAI Streaming
require 'uri'
require 'net/http'

url = URI("https://api.meetstream.ai/api/v1/bots/create_bot")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"live_transcription_required\": {\n    \"webhook_url\": \"https://your-server.com/webhook\"\n  },\n  \"recording_config\": {\n    \"transcript\": {\n      \"provider\": {\n        \"assemblyai_streaming\": {\n          \"speech_model\": \"universal-streaming-english\",\n          \"transcription_mode\": \"raw\",\n          \"sample_rate\": 48000,\n          \"format_turns\": false,\n          \"encoding\": \"pcm_s16le\",\n          \"vad_threshold\": \"0.4\",\n          \"end_of_turn_confidence_threshold\": \"0.4\",\n          \"inactivity_timeout\": 300,\n          \"min_end_of_turn_silence_when_confident\": \"400\",\n          \"max_turn_silence\": \"1280\"\n        }\n      }\n    }\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java Transcription — AssemblyAI Streaming
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.meetstream.ai/api/v1/bots/create_bot")
  .header("Authorization", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"live_transcription_required\": {\n    \"webhook_url\": \"https://your-server.com/webhook\"\n  },\n  \"recording_config\": {\n    \"transcript\": {\n      \"provider\": {\n        \"assemblyai_streaming\": {\n          \"speech_model\": \"universal-streaming-english\",\n          \"transcription_mode\": \"raw\",\n          \"sample_rate\": 48000,\n          \"format_turns\": false,\n          \"encoding\": \"pcm_s16le\",\n          \"vad_threshold\": \"0.4\",\n          \"end_of_turn_confidence_threshold\": \"0.4\",\n          \"inactivity_timeout\": 300,\n          \"min_end_of_turn_silence_when_confident\": \"400\",\n          \"max_turn_silence\": \"1280\"\n        }\n      }\n    }\n  }\n}")
  .asString();
```

```php Transcription — AssemblyAI Streaming
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.meetstream.ai/api/v1/bots/create_bot', [
  'body' => '{
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "live_transcription_required": {
    "webhook_url": "https://your-server.com/webhook"
  },
  "recording_config": {
    "transcript": {
      "provider": {
        "assemblyai_streaming": {
          "speech_model": "universal-streaming-english",
          "transcription_mode": "raw",
          "sample_rate": 48000,
          "format_turns": false,
          "encoding": "pcm_s16le",
          "vad_threshold": "0.4",
          "end_of_turn_confidence_threshold": "0.4",
          "inactivity_timeout": 300,
          "min_end_of_turn_silence_when_confident": "400",
          "max_turn_silence": "1280"
        }
      }
    }
  }
}',
  'headers' => [
    'Authorization' => '<apiKey>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Transcription — AssemblyAI Streaming
using RestSharp;

var client = new RestClient("https://api.meetstream.ai/api/v1/bots/create_bot");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"live_transcription_required\": {\n    \"webhook_url\": \"https://your-server.com/webhook\"\n  },\n  \"recording_config\": {\n    \"transcript\": {\n      \"provider\": {\n        \"assemblyai_streaming\": {\n          \"speech_model\": \"universal-streaming-english\",\n          \"transcription_mode\": \"raw\",\n          \"sample_rate\": 48000,\n          \"format_turns\": false,\n          \"encoding\": \"pcm_s16le\",\n          \"vad_threshold\": \"0.4\",\n          \"end_of_turn_confidence_threshold\": \"0.4\",\n          \"inactivity_timeout\": 300,\n          \"min_end_of_turn_silence_when_confident\": \"400\",\n          \"max_turn_silence\": \"1280\"\n        }\n      }\n    }\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Transcription — AssemblyAI Streaming
import Foundation

let headers = [
  "Authorization": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "live_transcription_required": ["webhook_url": "https://your-server.com/webhook"],
  "recording_config": ["transcript": ["provider": ["assemblyai_streaming": [
          "speech_model": "universal-streaming-english",
          "transcription_mode": "raw",
          "sample_rate": 48000,
          "format_turns": false,
          "encoding": "pcm_s16le",
          "vad_threshold": "0.4",
          "end_of_turn_confidence_threshold": "0.4",
          "inactivity_timeout": 300,
          "min_end_of_turn_silence_when_confident": "400",
          "max_turn_silence": "1280"
        ]]]]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.meetstream.ai/api/v1/bots/create_bot")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

```python Transcription — Deepgram Streaming
import requests

url = "https://api.meetstream.ai/api/v1/bots/create_bot"

payload = {
    "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
    "bot_name": "Meetstream Agent",
    "video_required": True,
    "live_transcription_required": { "webhook_url": "https://your-server.com/webhook" },
    "recording_config": { "transcript": { "provider": { "deepgram_streaming": {
                    "model": "nova-2",
                    "transcription_mode": "sentence",
                    "language": "en",
                    "punctuate": True,
                    "smart_format": True,
                    "endpointing": 300,
                    "vad_events": True,
                    "utterance_end_ms": 1000,
                    "encoding": "linear16",
                    "channels": 1
                } } } }
}
headers = {
    "Authorization": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Transcription — Deepgram Streaming
const url = 'https://api.meetstream.ai/api/v1/bots/create_bot';
const options = {
  method: 'POST',
  headers: {Authorization: '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"meeting_link":"https://meet.google.com/zcs-xwyv-hvi","bot_name":"Meetstream Agent","video_required":true,"live_transcription_required":{"webhook_url":"https://your-server.com/webhook"},"recording_config":{"transcript":{"provider":{"deepgram_streaming":{"model":"nova-2","transcription_mode":"sentence","language":"en","punctuate":true,"smart_format":true,"endpointing":300,"vad_events":true,"utterance_end_ms":1000,"encoding":"linear16","channels":1}}}}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Transcription — Deepgram Streaming
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.meetstream.ai/api/v1/bots/create_bot"

	payload := strings.NewReader("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"live_transcription_required\": {\n    \"webhook_url\": \"https://your-server.com/webhook\"\n  },\n  \"recording_config\": {\n    \"transcript\": {\n      \"provider\": {\n        \"deepgram_streaming\": {\n          \"model\": \"nova-2\",\n          \"transcription_mode\": \"sentence\",\n          \"language\": \"en\",\n          \"punctuate\": true,\n          \"smart_format\": true,\n          \"endpointing\": 300,\n          \"vad_events\": true,\n          \"utterance_end_ms\": 1000,\n          \"encoding\": \"linear16\",\n          \"channels\": 1\n        }\n      }\n    }\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Transcription — Deepgram Streaming
require 'uri'
require 'net/http'

url = URI("https://api.meetstream.ai/api/v1/bots/create_bot")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"live_transcription_required\": {\n    \"webhook_url\": \"https://your-server.com/webhook\"\n  },\n  \"recording_config\": {\n    \"transcript\": {\n      \"provider\": {\n        \"deepgram_streaming\": {\n          \"model\": \"nova-2\",\n          \"transcription_mode\": \"sentence\",\n          \"language\": \"en\",\n          \"punctuate\": true,\n          \"smart_format\": true,\n          \"endpointing\": 300,\n          \"vad_events\": true,\n          \"utterance_end_ms\": 1000,\n          \"encoding\": \"linear16\",\n          \"channels\": 1\n        }\n      }\n    }\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java Transcription — Deepgram Streaming
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.meetstream.ai/api/v1/bots/create_bot")
  .header("Authorization", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"live_transcription_required\": {\n    \"webhook_url\": \"https://your-server.com/webhook\"\n  },\n  \"recording_config\": {\n    \"transcript\": {\n      \"provider\": {\n        \"deepgram_streaming\": {\n          \"model\": \"nova-2\",\n          \"transcription_mode\": \"sentence\",\n          \"language\": \"en\",\n          \"punctuate\": true,\n          \"smart_format\": true,\n          \"endpointing\": 300,\n          \"vad_events\": true,\n          \"utterance_end_ms\": 1000,\n          \"encoding\": \"linear16\",\n          \"channels\": 1\n        }\n      }\n    }\n  }\n}")
  .asString();
```

```php Transcription — Deepgram Streaming
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.meetstream.ai/api/v1/bots/create_bot', [
  'body' => '{
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "live_transcription_required": {
    "webhook_url": "https://your-server.com/webhook"
  },
  "recording_config": {
    "transcript": {
      "provider": {
        "deepgram_streaming": {
          "model": "nova-2",
          "transcription_mode": "sentence",
          "language": "en",
          "punctuate": true,
          "smart_format": true,
          "endpointing": 300,
          "vad_events": true,
          "utterance_end_ms": 1000,
          "encoding": "linear16",
          "channels": 1
        }
      }
    }
  }
}',
  'headers' => [
    'Authorization' => '<apiKey>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Transcription — Deepgram Streaming
using RestSharp;

var client = new RestClient("https://api.meetstream.ai/api/v1/bots/create_bot");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"live_transcription_required\": {\n    \"webhook_url\": \"https://your-server.com/webhook\"\n  },\n  \"recording_config\": {\n    \"transcript\": {\n      \"provider\": {\n        \"deepgram_streaming\": {\n          \"model\": \"nova-2\",\n          \"transcription_mode\": \"sentence\",\n          \"language\": \"en\",\n          \"punctuate\": true,\n          \"smart_format\": true,\n          \"endpointing\": 300,\n          \"vad_events\": true,\n          \"utterance_end_ms\": 1000,\n          \"encoding\": \"linear16\",\n          \"channels\": 1\n        }\n      }\n    }\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Transcription — Deepgram Streaming
import Foundation

let headers = [
  "Authorization": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "live_transcription_required": ["webhook_url": "https://your-server.com/webhook"],
  "recording_config": ["transcript": ["provider": ["deepgram_streaming": [
          "model": "nova-2",
          "transcription_mode": "sentence",
          "language": "en",
          "punctuate": true,
          "smart_format": true,
          "endpointing": 300,
          "vad_events": true,
          "utterance_end_ms": 1000,
          "encoding": "linear16",
          "channels": 1
        ]]]]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.meetstream.ai/api/v1/bots/create_bot")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

```python Bot with Audio Streaming (Two Way)
import requests

url = "https://api.meetstream.ai/api/v1/bots/create_bot"

payload = {
    "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
    "bot_name": "Meetstream Agent",
    "video_required": True,
    "socket_connection_url": { "websocket_url": "wss://agent-meetstream-prd-main.meetstream.ai/bridge" },
    "live_audio_required": { "websocket_url": "wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio" }
}
headers = {
    "Authorization": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Bot with Audio Streaming (Two Way)
const url = 'https://api.meetstream.ai/api/v1/bots/create_bot';
const options = {
  method: 'POST',
  headers: {Authorization: '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"meeting_link":"https://meet.google.com/zcs-xwyv-hvi","bot_name":"Meetstream Agent","video_required":true,"socket_connection_url":{"websocket_url":"wss://agent-meetstream-prd-main.meetstream.ai/bridge"},"live_audio_required":{"websocket_url":"wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio"}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Bot with Audio Streaming (Two Way)
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.meetstream.ai/api/v1/bots/create_bot"

	payload := strings.NewReader("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"socket_connection_url\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge\"\n  },\n  \"live_audio_required\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio\"\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Bot with Audio Streaming (Two Way)
require 'uri'
require 'net/http'

url = URI("https://api.meetstream.ai/api/v1/bots/create_bot")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"socket_connection_url\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge\"\n  },\n  \"live_audio_required\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio\"\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java Bot with Audio Streaming (Two Way)
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.meetstream.ai/api/v1/bots/create_bot")
  .header("Authorization", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"socket_connection_url\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge\"\n  },\n  \"live_audio_required\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio\"\n  }\n}")
  .asString();
```

```php Bot with Audio Streaming (Two Way)
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.meetstream.ai/api/v1/bots/create_bot', [
  'body' => '{
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "socket_connection_url": {
    "websocket_url": "wss://agent-meetstream-prd-main.meetstream.ai/bridge"
  },
  "live_audio_required": {
    "websocket_url": "wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio"
  }
}',
  'headers' => [
    'Authorization' => '<apiKey>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Bot with Audio Streaming (Two Way)
using RestSharp;

var client = new RestClient("https://api.meetstream.ai/api/v1/bots/create_bot");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"socket_connection_url\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge\"\n  },\n  \"live_audio_required\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio\"\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Bot with Audio Streaming (Two Way)
import Foundation

let headers = [
  "Authorization": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "socket_connection_url": ["websocket_url": "wss://agent-meetstream-prd-main.meetstream.ai/bridge"],
  "live_audio_required": ["websocket_url": "wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio"]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.meetstream.ai/api/v1/bots/create_bot")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

```python Bot with Dynamic Messaging
import requests

url = "https://api.meetstream.ai/api/v1/bots/create_bot"

payload = {
    "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
    "bot_name": "Meetstream Grok Agent",
    "video_required": True,
    "socket_connection_url": { "websocket_url": "wss://agent-meetstream-prd-main.meetstream.ai/bridge" }
}
headers = {
    "Authorization": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Bot with Dynamic Messaging
const url = 'https://api.meetstream.ai/api/v1/bots/create_bot';
const options = {
  method: 'POST',
  headers: {Authorization: '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"meeting_link":"https://meet.google.com/zcs-xwyv-hvi","bot_name":"Meetstream Grok Agent","video_required":true,"socket_connection_url":{"websocket_url":"wss://agent-meetstream-prd-main.meetstream.ai/bridge"}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Bot with Dynamic Messaging
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.meetstream.ai/api/v1/bots/create_bot"

	payload := strings.NewReader("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Grok Agent\",\n  \"video_required\": true,\n  \"socket_connection_url\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge\"\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Bot with Dynamic Messaging
require 'uri'
require 'net/http'

url = URI("https://api.meetstream.ai/api/v1/bots/create_bot")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Grok Agent\",\n  \"video_required\": true,\n  \"socket_connection_url\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge\"\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java Bot with Dynamic Messaging
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.meetstream.ai/api/v1/bots/create_bot")
  .header("Authorization", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Grok Agent\",\n  \"video_required\": true,\n  \"socket_connection_url\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge\"\n  }\n}")
  .asString();
```

```php Bot with Dynamic Messaging
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.meetstream.ai/api/v1/bots/create_bot', [
  'body' => '{
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Grok Agent",
  "video_required": true,
  "socket_connection_url": {
    "websocket_url": "wss://agent-meetstream-prd-main.meetstream.ai/bridge"
  }
}',
  'headers' => [
    'Authorization' => '<apiKey>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Bot with Dynamic Messaging
using RestSharp;

var client = new RestClient("https://api.meetstream.ai/api/v1/bots/create_bot");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Grok Agent\",\n  \"video_required\": true,\n  \"socket_connection_url\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge\"\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Bot with Dynamic Messaging
import Foundation

let headers = [
  "Authorization": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Grok Agent",
  "video_required": true,
  "socket_connection_url": ["websocket_url": "wss://agent-meetstream-prd-main.meetstream.ai/bridge"]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.meetstream.ai/api/v1/bots/create_bot")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

```python Bot with Live Audio Streaming
import requests

url = "https://api.meetstream.ai/api/v1/bots/create_bot"

payload = {
    "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
    "bot_name": "Meetstream Grok Agent",
    "video_required": True,
    "live_audio_required": { "websocket_url": "wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio" }
}
headers = {
    "Authorization": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Bot with Live Audio Streaming
const url = 'https://api.meetstream.ai/api/v1/bots/create_bot';
const options = {
  method: 'POST',
  headers: {Authorization: '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"meeting_link":"https://meet.google.com/zcs-xwyv-hvi","bot_name":"Meetstream Grok Agent","video_required":true,"live_audio_required":{"websocket_url":"wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio"}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Bot with Live Audio Streaming
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.meetstream.ai/api/v1/bots/create_bot"

	payload := strings.NewReader("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Grok Agent\",\n  \"video_required\": true,\n  \"live_audio_required\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio\"\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Bot with Live Audio Streaming
require 'uri'
require 'net/http'

url = URI("https://api.meetstream.ai/api/v1/bots/create_bot")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Grok Agent\",\n  \"video_required\": true,\n  \"live_audio_required\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio\"\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java Bot with Live Audio Streaming
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.meetstream.ai/api/v1/bots/create_bot")
  .header("Authorization", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Grok Agent\",\n  \"video_required\": true,\n  \"live_audio_required\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio\"\n  }\n}")
  .asString();
```

```php Bot with Live Audio Streaming
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.meetstream.ai/api/v1/bots/create_bot', [
  'body' => '{
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Grok Agent",
  "video_required": true,
  "live_audio_required": {
    "websocket_url": "wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio"
  }
}',
  'headers' => [
    'Authorization' => '<apiKey>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Bot with Live Audio Streaming
using RestSharp;

var client = new RestClient("https://api.meetstream.ai/api/v1/bots/create_bot");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Grok Agent\",\n  \"video_required\": true,\n  \"live_audio_required\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio\"\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Bot with Live Audio Streaming
import Foundation

let headers = [
  "Authorization": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Grok Agent",
  "video_required": true,
  "live_audio_required": ["websocket_url": "wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio"]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.meetstream.ai/api/v1/bots/create_bot")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

```python Video Streaming
import requests

url = "https://api.meetstream.ai/api/v1/bots/create_bot"

payload = {
    "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
    "bot_name": "Meetstream Agent",
    "video_required": True,
    "bot_message": "Hey Everyone :wave:, I'm a speaking agent",
    "bot_image_url": "https://blog.meetstream.ai/wp-content/uploads/2025/08/Zoom-BG-Image.png",
    "live_audio_required": { "websocket_url": "wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio" },
    "live_video_required": { "websocket_url": "wss://your-server.com/video-stream" }
}
headers = {
    "Authorization": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Video Streaming
const url = 'https://api.meetstream.ai/api/v1/bots/create_bot';
const options = {
  method: 'POST',
  headers: {Authorization: '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"meeting_link":"https://meet.google.com/zcs-xwyv-hvi","bot_name":"Meetstream Agent","video_required":true,"bot_message":"Hey Everyone :wave:, I\'m a speaking agent","bot_image_url":"https://blog.meetstream.ai/wp-content/uploads/2025/08/Zoom-BG-Image.png","live_audio_required":{"websocket_url":"wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio"},"live_video_required":{"websocket_url":"wss://your-server.com/video-stream"}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Video Streaming
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.meetstream.ai/api/v1/bots/create_bot"

	payload := strings.NewReader("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"bot_message\": \"Hey Everyone :wave:, I'm a speaking agent\",\n  \"bot_image_url\": \"https://blog.meetstream.ai/wp-content/uploads/2025/08/Zoom-BG-Image.png\",\n  \"live_audio_required\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio\"\n  },\n  \"live_video_required\": {\n    \"websocket_url\": \"wss://your-server.com/video-stream\"\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Video Streaming
require 'uri'
require 'net/http'

url = URI("https://api.meetstream.ai/api/v1/bots/create_bot")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"bot_message\": \"Hey Everyone :wave:, I'm a speaking agent\",\n  \"bot_image_url\": \"https://blog.meetstream.ai/wp-content/uploads/2025/08/Zoom-BG-Image.png\",\n  \"live_audio_required\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio\"\n  },\n  \"live_video_required\": {\n    \"websocket_url\": \"wss://your-server.com/video-stream\"\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java Video Streaming
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.meetstream.ai/api/v1/bots/create_bot")
  .header("Authorization", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"bot_message\": \"Hey Everyone :wave:, I'm a speaking agent\",\n  \"bot_image_url\": \"https://blog.meetstream.ai/wp-content/uploads/2025/08/Zoom-BG-Image.png\",\n  \"live_audio_required\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio\"\n  },\n  \"live_video_required\": {\n    \"websocket_url\": \"wss://your-server.com/video-stream\"\n  }\n}")
  .asString();
```

```php Video Streaming
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.meetstream.ai/api/v1/bots/create_bot', [
  'body' => '{
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "bot_message": "Hey Everyone :wave:, I\'m a speaking agent",
  "bot_image_url": "https://blog.meetstream.ai/wp-content/uploads/2025/08/Zoom-BG-Image.png",
  "live_audio_required": {
    "websocket_url": "wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio"
  },
  "live_video_required": {
    "websocket_url": "wss://your-server.com/video-stream"
  }
}',
  'headers' => [
    'Authorization' => '<apiKey>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Video Streaming
using RestSharp;

var client = new RestClient("https://api.meetstream.ai/api/v1/bots/create_bot");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"bot_message\": \"Hey Everyone :wave:, I'm a speaking agent\",\n  \"bot_image_url\": \"https://blog.meetstream.ai/wp-content/uploads/2025/08/Zoom-BG-Image.png\",\n  \"live_audio_required\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio\"\n  },\n  \"live_video_required\": {\n    \"websocket_url\": \"wss://your-server.com/video-stream\"\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Video Streaming
import Foundation

let headers = [
  "Authorization": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "bot_message": "Hey Everyone :wave:, I'm a speaking agent",
  "bot_image_url": "https://blog.meetstream.ai/wp-content/uploads/2025/08/Zoom-BG-Image.png",
  "live_audio_required": ["websocket_url": "wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio"],
  "live_video_required": ["websocket_url": "wss://your-server.com/video-stream"]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.meetstream.ai/api/v1/bots/create_bot")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

```python MIA (Meetstream Infrastructure Agent)
import requests

url = "https://api.meetstream.ai/api/v1/bots/create_bot"

payload = {
    "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
    "bot_name": "Meetstream Agent",
    "video_required": True,
    "bot_message": "Hey Everyone :wave , I'm a speaking agent",
    "bot_image_url": "https://www.malwarebytes.com/wp-content/uploads/sites/2/2024/08/Grok_logo.jpg",
    "agent_config_id": "your-agent-config-id",
    "custom_attributes": {
        "tag": "Meetstream",
        "sample": "testing",
        "user": "your-user-id"
    },
    "socket_connection_url": { "websocket_url": "wss://agent-meetstream-prd-main.meetstream.ai/bridge" },
    "live_audio_required": { "websocket_url": "wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio" },
    "automatic_leave": {
        "waiting_room_timeout": 100,
        "everyone_left_timeout": 100,
        "voice_inactivity_timeout": 100,
        "in_call_recording_timeout": 14400,
        "recording_permission_denied_timeout": 60
    },
    "recording_config": { "retention": {
            "type": "timed",
            "hours": 24
        } }
}
headers = {
    "Authorization": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript MIA (Meetstream Infrastructure Agent)
const url = 'https://api.meetstream.ai/api/v1/bots/create_bot';
const options = {
  method: 'POST',
  headers: {Authorization: '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"meeting_link":"https://meet.google.com/zcs-xwyv-hvi","bot_name":"Meetstream Agent","video_required":true,"bot_message":"Hey Everyone :wave , I\'m a speaking agent","bot_image_url":"https://www.malwarebytes.com/wp-content/uploads/sites/2/2024/08/Grok_logo.jpg","agent_config_id":"your-agent-config-id","custom_attributes":{"tag":"Meetstream","sample":"testing","user":"your-user-id"},"socket_connection_url":{"websocket_url":"wss://agent-meetstream-prd-main.meetstream.ai/bridge"},"live_audio_required":{"websocket_url":"wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio"},"automatic_leave":{"waiting_room_timeout":100,"everyone_left_timeout":100,"voice_inactivity_timeout":100,"in_call_recording_timeout":14400,"recording_permission_denied_timeout":60},"recording_config":{"retention":{"type":"timed","hours":24}}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go MIA (Meetstream Infrastructure Agent)
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.meetstream.ai/api/v1/bots/create_bot"

	payload := strings.NewReader("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"bot_message\": \"Hey Everyone :wave , I'm a speaking agent\",\n  \"bot_image_url\": \"https://www.malwarebytes.com/wp-content/uploads/sites/2/2024/08/Grok_logo.jpg\",\n  \"agent_config_id\": \"your-agent-config-id\",\n  \"custom_attributes\": {\n    \"tag\": \"Meetstream\",\n    \"sample\": \"testing\",\n    \"user\": \"your-user-id\"\n  },\n  \"socket_connection_url\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge\"\n  },\n  \"live_audio_required\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio\"\n  },\n  \"automatic_leave\": {\n    \"waiting_room_timeout\": 100,\n    \"everyone_left_timeout\": 100,\n    \"voice_inactivity_timeout\": 100,\n    \"in_call_recording_timeout\": 14400,\n    \"recording_permission_denied_timeout\": 60\n  },\n  \"recording_config\": {\n    \"retention\": {\n      \"type\": \"timed\",\n      \"hours\": 24\n    }\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby MIA (Meetstream Infrastructure Agent)
require 'uri'
require 'net/http'

url = URI("https://api.meetstream.ai/api/v1/bots/create_bot")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"bot_message\": \"Hey Everyone :wave , I'm a speaking agent\",\n  \"bot_image_url\": \"https://www.malwarebytes.com/wp-content/uploads/sites/2/2024/08/Grok_logo.jpg\",\n  \"agent_config_id\": \"your-agent-config-id\",\n  \"custom_attributes\": {\n    \"tag\": \"Meetstream\",\n    \"sample\": \"testing\",\n    \"user\": \"your-user-id\"\n  },\n  \"socket_connection_url\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge\"\n  },\n  \"live_audio_required\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio\"\n  },\n  \"automatic_leave\": {\n    \"waiting_room_timeout\": 100,\n    \"everyone_left_timeout\": 100,\n    \"voice_inactivity_timeout\": 100,\n    \"in_call_recording_timeout\": 14400,\n    \"recording_permission_denied_timeout\": 60\n  },\n  \"recording_config\": {\n    \"retention\": {\n      \"type\": \"timed\",\n      \"hours\": 24\n    }\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java MIA (Meetstream Infrastructure Agent)
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.meetstream.ai/api/v1/bots/create_bot")
  .header("Authorization", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"bot_message\": \"Hey Everyone :wave , I'm a speaking agent\",\n  \"bot_image_url\": \"https://www.malwarebytes.com/wp-content/uploads/sites/2/2024/08/Grok_logo.jpg\",\n  \"agent_config_id\": \"your-agent-config-id\",\n  \"custom_attributes\": {\n    \"tag\": \"Meetstream\",\n    \"sample\": \"testing\",\n    \"user\": \"your-user-id\"\n  },\n  \"socket_connection_url\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge\"\n  },\n  \"live_audio_required\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio\"\n  },\n  \"automatic_leave\": {\n    \"waiting_room_timeout\": 100,\n    \"everyone_left_timeout\": 100,\n    \"voice_inactivity_timeout\": 100,\n    \"in_call_recording_timeout\": 14400,\n    \"recording_permission_denied_timeout\": 60\n  },\n  \"recording_config\": {\n    \"retention\": {\n      \"type\": \"timed\",\n      \"hours\": 24\n    }\n  }\n}")
  .asString();
```

```php MIA (Meetstream Infrastructure Agent)
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.meetstream.ai/api/v1/bots/create_bot', [
  'body' => '{
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "bot_message": "Hey Everyone :wave , I\'m a speaking agent",
  "bot_image_url": "https://www.malwarebytes.com/wp-content/uploads/sites/2/2024/08/Grok_logo.jpg",
  "agent_config_id": "your-agent-config-id",
  "custom_attributes": {
    "tag": "Meetstream",
    "sample": "testing",
    "user": "your-user-id"
  },
  "socket_connection_url": {
    "websocket_url": "wss://agent-meetstream-prd-main.meetstream.ai/bridge"
  },
  "live_audio_required": {
    "websocket_url": "wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio"
  },
  "automatic_leave": {
    "waiting_room_timeout": 100,
    "everyone_left_timeout": 100,
    "voice_inactivity_timeout": 100,
    "in_call_recording_timeout": 14400,
    "recording_permission_denied_timeout": 60
  },
  "recording_config": {
    "retention": {
      "type": "timed",
      "hours": 24
    }
  }
}',
  'headers' => [
    'Authorization' => '<apiKey>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp MIA (Meetstream Infrastructure Agent)
using RestSharp;

var client = new RestClient("https://api.meetstream.ai/api/v1/bots/create_bot");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"bot_message\": \"Hey Everyone :wave , I'm a speaking agent\",\n  \"bot_image_url\": \"https://www.malwarebytes.com/wp-content/uploads/sites/2/2024/08/Grok_logo.jpg\",\n  \"agent_config_id\": \"your-agent-config-id\",\n  \"custom_attributes\": {\n    \"tag\": \"Meetstream\",\n    \"sample\": \"testing\",\n    \"user\": \"your-user-id\"\n  },\n  \"socket_connection_url\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge\"\n  },\n  \"live_audio_required\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio\"\n  },\n  \"automatic_leave\": {\n    \"waiting_room_timeout\": 100,\n    \"everyone_left_timeout\": 100,\n    \"voice_inactivity_timeout\": 100,\n    \"in_call_recording_timeout\": 14400,\n    \"recording_permission_denied_timeout\": 60\n  },\n  \"recording_config\": {\n    \"retention\": {\n      \"type\": \"timed\",\n      \"hours\": 24\n    }\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift MIA (Meetstream Infrastructure Agent)
import Foundation

let headers = [
  "Authorization": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "bot_message": "Hey Everyone :wave , I'm a speaking agent",
  "bot_image_url": "https://www.malwarebytes.com/wp-content/uploads/sites/2/2024/08/Grok_logo.jpg",
  "agent_config_id": "your-agent-config-id",
  "custom_attributes": [
    "tag": "Meetstream",
    "sample": "testing",
    "user": "your-user-id"
  ],
  "socket_connection_url": ["websocket_url": "wss://agent-meetstream-prd-main.meetstream.ai/bridge"],
  "live_audio_required": ["websocket_url": "wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio"],
  "automatic_leave": [
    "waiting_room_timeout": 100,
    "everyone_left_timeout": 100,
    "voice_inactivity_timeout": 100,
    "in_call_recording_timeout": 14400,
    "recording_permission_denied_timeout": 60
  ],
  "recording_config": ["retention": [
      "type": "timed",
      "hours": 24
    ]]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.meetstream.ai/api/v1/bots/create_bot")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

```python Bot Lifecycle Events
import requests

url = "https://api.meetstream.ai/api/v1/bots/create_bot"

payload = {
    "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
    "bot_name": "Meetstream Agent",
    "video_required": True,
    "callback_url": "https://your-server.com/webhook"
}
headers = {
    "Authorization": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Bot Lifecycle Events
const url = 'https://api.meetstream.ai/api/v1/bots/create_bot';
const options = {
  method: 'POST',
  headers: {Authorization: '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"meeting_link":"https://meet.google.com/zcs-xwyv-hvi","bot_name":"Meetstream Agent","video_required":true,"callback_url":"https://your-server.com/webhook"}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Bot Lifecycle Events
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.meetstream.ai/api/v1/bots/create_bot"

	payload := strings.NewReader("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"callback_url\": \"https://your-server.com/webhook\"\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Bot Lifecycle Events
require 'uri'
require 'net/http'

url = URI("https://api.meetstream.ai/api/v1/bots/create_bot")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"callback_url\": \"https://your-server.com/webhook\"\n}"

response = http.request(request)
puts response.read_body
```

```java Bot Lifecycle Events
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.meetstream.ai/api/v1/bots/create_bot")
  .header("Authorization", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"callback_url\": \"https://your-server.com/webhook\"\n}")
  .asString();
```

```php Bot Lifecycle Events
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.meetstream.ai/api/v1/bots/create_bot', [
  'body' => '{
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "callback_url": "https://your-server.com/webhook"
}',
  'headers' => [
    'Authorization' => '<apiKey>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Bot Lifecycle Events
using RestSharp;

var client = new RestClient("https://api.meetstream.ai/api/v1/bots/create_bot");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"callback_url\": \"https://your-server.com/webhook\"\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Bot Lifecycle Events
import Foundation

let headers = [
  "Authorization": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "callback_url": "https://your-server.com/webhook"
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.meetstream.ai/api/v1/bots/create_bot")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

```python Transcription and Workflow
import requests

url = "https://api.meetstream.ai/api/v1/bots/create_bot"

payload = {
    "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
    "bot_name": "Meetstream Agent",
    "video_required": True,
    "workflow_config_ids": ["c3075e7d-d39d-4fd7-af25-c91eb9a6ac36"],
    "recording_config": { "transcript": { "provider": { "deepgram": {
                    "model": "nova-3",
                    "language": "en",
                    "punctuate": True,
                    "smart_format": True,
                    "diarize": True,
                    "paragraphs": True,
                    "numerals": True,
                    "filler_words": False,
                    "utterances": True,
                    "utt_split": 0.8,
                    "detect_language": False,
                    "keywords": ["MeetStream", "recording", "transcript"],
                    "search": ["MeetStream", "recording"],
                    "tag": ["custom"]
                } } } }
}
headers = {
    "Authorization": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Transcription and Workflow
const url = 'https://api.meetstream.ai/api/v1/bots/create_bot';
const options = {
  method: 'POST',
  headers: {Authorization: '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"meeting_link":"https://meet.google.com/zcs-xwyv-hvi","bot_name":"Meetstream Agent","video_required":true,"workflow_config_ids":["c3075e7d-d39d-4fd7-af25-c91eb9a6ac36"],"recording_config":{"transcript":{"provider":{"deepgram":{"model":"nova-3","language":"en","punctuate":true,"smart_format":true,"diarize":true,"paragraphs":true,"numerals":true,"filler_words":false,"utterances":true,"utt_split":0.8,"detect_language":false,"keywords":["MeetStream","recording","transcript"],"search":["MeetStream","recording"],"tag":["custom"]}}}}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Transcription and Workflow
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.meetstream.ai/api/v1/bots/create_bot"

	payload := strings.NewReader("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"workflow_config_ids\": [\n    \"c3075e7d-d39d-4fd7-af25-c91eb9a6ac36\"\n  ],\n  \"recording_config\": {\n    \"transcript\": {\n      \"provider\": {\n        \"deepgram\": {\n          \"model\": \"nova-3\",\n          \"language\": \"en\",\n          \"punctuate\": true,\n          \"smart_format\": true,\n          \"diarize\": true,\n          \"paragraphs\": true,\n          \"numerals\": true,\n          \"filler_words\": false,\n          \"utterances\": true,\n          \"utt_split\": 0.8,\n          \"detect_language\": false,\n          \"keywords\": [\n            \"MeetStream\",\n            \"recording\",\n            \"transcript\"\n          ],\n          \"search\": [\n            \"MeetStream\",\n            \"recording\"\n          ],\n          \"tag\": [\n            \"custom\"\n          ]\n        }\n      }\n    }\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Transcription and Workflow
require 'uri'
require 'net/http'

url = URI("https://api.meetstream.ai/api/v1/bots/create_bot")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"workflow_config_ids\": [\n    \"c3075e7d-d39d-4fd7-af25-c91eb9a6ac36\"\n  ],\n  \"recording_config\": {\n    \"transcript\": {\n      \"provider\": {\n        \"deepgram\": {\n          \"model\": \"nova-3\",\n          \"language\": \"en\",\n          \"punctuate\": true,\n          \"smart_format\": true,\n          \"diarize\": true,\n          \"paragraphs\": true,\n          \"numerals\": true,\n          \"filler_words\": false,\n          \"utterances\": true,\n          \"utt_split\": 0.8,\n          \"detect_language\": false,\n          \"keywords\": [\n            \"MeetStream\",\n            \"recording\",\n            \"transcript\"\n          ],\n          \"search\": [\n            \"MeetStream\",\n            \"recording\"\n          ],\n          \"tag\": [\n            \"custom\"\n          ]\n        }\n      }\n    }\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java Transcription and Workflow
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.meetstream.ai/api/v1/bots/create_bot")
  .header("Authorization", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"workflow_config_ids\": [\n    \"c3075e7d-d39d-4fd7-af25-c91eb9a6ac36\"\n  ],\n  \"recording_config\": {\n    \"transcript\": {\n      \"provider\": {\n        \"deepgram\": {\n          \"model\": \"nova-3\",\n          \"language\": \"en\",\n          \"punctuate\": true,\n          \"smart_format\": true,\n          \"diarize\": true,\n          \"paragraphs\": true,\n          \"numerals\": true,\n          \"filler_words\": false,\n          \"utterances\": true,\n          \"utt_split\": 0.8,\n          \"detect_language\": false,\n          \"keywords\": [\n            \"MeetStream\",\n            \"recording\",\n            \"transcript\"\n          ],\n          \"search\": [\n            \"MeetStream\",\n            \"recording\"\n          ],\n          \"tag\": [\n            \"custom\"\n          ]\n        }\n      }\n    }\n  }\n}")
  .asString();
```

```php Transcription and Workflow
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.meetstream.ai/api/v1/bots/create_bot', [
  'body' => '{
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "workflow_config_ids": [
    "c3075e7d-d39d-4fd7-af25-c91eb9a6ac36"
  ],
  "recording_config": {
    "transcript": {
      "provider": {
        "deepgram": {
          "model": "nova-3",
          "language": "en",
          "punctuate": true,
          "smart_format": true,
          "diarize": true,
          "paragraphs": true,
          "numerals": true,
          "filler_words": false,
          "utterances": true,
          "utt_split": 0.8,
          "detect_language": false,
          "keywords": [
            "MeetStream",
            "recording",
            "transcript"
          ],
          "search": [
            "MeetStream",
            "recording"
          ],
          "tag": [
            "custom"
          ]
        }
      }
    }
  }
}',
  'headers' => [
    'Authorization' => '<apiKey>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Transcription and Workflow
using RestSharp;

var client = new RestClient("https://api.meetstream.ai/api/v1/bots/create_bot");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"workflow_config_ids\": [\n    \"c3075e7d-d39d-4fd7-af25-c91eb9a6ac36\"\n  ],\n  \"recording_config\": {\n    \"transcript\": {\n      \"provider\": {\n        \"deepgram\": {\n          \"model\": \"nova-3\",\n          \"language\": \"en\",\n          \"punctuate\": true,\n          \"smart_format\": true,\n          \"diarize\": true,\n          \"paragraphs\": true,\n          \"numerals\": true,\n          \"filler_words\": false,\n          \"utterances\": true,\n          \"utt_split\": 0.8,\n          \"detect_language\": false,\n          \"keywords\": [\n            \"MeetStream\",\n            \"recording\",\n            \"transcript\"\n          ],\n          \"search\": [\n            \"MeetStream\",\n            \"recording\"\n          ],\n          \"tag\": [\n            \"custom\"\n          ]\n        }\n      }\n    }\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Transcription and Workflow
import Foundation

let headers = [
  "Authorization": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "workflow_config_ids": ["c3075e7d-d39d-4fd7-af25-c91eb9a6ac36"],
  "recording_config": ["transcript": ["provider": ["deepgram": [
          "model": "nova-3",
          "language": "en",
          "punctuate": true,
          "smart_format": true,
          "diarize": true,
          "paragraphs": true,
          "numerals": true,
          "filler_words": false,
          "utterances": true,
          "utt_split": 0.8,
          "detect_language": false,
          "keywords": ["MeetStream", "recording", "transcript"],
          "search": ["MeetStream", "recording"],
          "tag": ["custom"]
        ]]]]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.meetstream.ai/api/v1/bots/create_bot")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

```python Video Streaming — InBound
import requests

url = "https://api.meetstream.ai/api/v1/bots/create_bot"

payload = {
    "meeting_link": "https://meet.google.com/xsr-shfj-ftv",
    "bot_name": "MeetStream video agent",
    "video_required": True,
    "socket_connection_url": { "websocket_url": "wss://agent-meetstream-prd-main.meetstream.ai/bridge" }
}
headers = {
    "Authorization": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Video Streaming — InBound
const url = 'https://api.meetstream.ai/api/v1/bots/create_bot';
const options = {
  method: 'POST',
  headers: {Authorization: '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"meeting_link":"https://meet.google.com/xsr-shfj-ftv","bot_name":"MeetStream video agent","video_required":true,"socket_connection_url":{"websocket_url":"wss://agent-meetstream-prd-main.meetstream.ai/bridge"}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Video Streaming — InBound
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.meetstream.ai/api/v1/bots/create_bot"

	payload := strings.NewReader("{\n  \"meeting_link\": \"https://meet.google.com/xsr-shfj-ftv\",\n  \"bot_name\": \"MeetStream video agent\",\n  \"video_required\": true,\n  \"socket_connection_url\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge\"\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Video Streaming — InBound
require 'uri'
require 'net/http'

url = URI("https://api.meetstream.ai/api/v1/bots/create_bot")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"meeting_link\": \"https://meet.google.com/xsr-shfj-ftv\",\n  \"bot_name\": \"MeetStream video agent\",\n  \"video_required\": true,\n  \"socket_connection_url\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge\"\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java Video Streaming — InBound
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.meetstream.ai/api/v1/bots/create_bot")
  .header("Authorization", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"meeting_link\": \"https://meet.google.com/xsr-shfj-ftv\",\n  \"bot_name\": \"MeetStream video agent\",\n  \"video_required\": true,\n  \"socket_connection_url\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge\"\n  }\n}")
  .asString();
```

```php Video Streaming — InBound
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.meetstream.ai/api/v1/bots/create_bot', [
  'body' => '{
  "meeting_link": "https://meet.google.com/xsr-shfj-ftv",
  "bot_name": "MeetStream video agent",
  "video_required": true,
  "socket_connection_url": {
    "websocket_url": "wss://agent-meetstream-prd-main.meetstream.ai/bridge"
  }
}',
  'headers' => [
    'Authorization' => '<apiKey>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Video Streaming — InBound
using RestSharp;

var client = new RestClient("https://api.meetstream.ai/api/v1/bots/create_bot");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"meeting_link\": \"https://meet.google.com/xsr-shfj-ftv\",\n  \"bot_name\": \"MeetStream video agent\",\n  \"video_required\": true,\n  \"socket_connection_url\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge\"\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Video Streaming — InBound
import Foundation

let headers = [
  "Authorization": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "meeting_link": "https://meet.google.com/xsr-shfj-ftv",
  "bot_name": "MeetStream video agent",
  "video_required": true,
  "socket_connection_url": ["websocket_url": "wss://agent-meetstream-prd-main.meetstream.ai/bridge"]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.meetstream.ai/api/v1/bots/create_bot")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

```python Zoom OBF
import requests

url = "https://api.meetstream.ai/api/v1/bots/create_bot"

payload = {
    "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
    "bot_name": "Meetstream Agent",
    "video_required": True,
    "zoom": { "use_zoom_obf": True },
    "bot_message": "Hey Everyone :wave , I'm a speaking agent",
    "bot_image_url": "https://www.malwarebytes.com/wp-content/uploads/sites/2/2024/08/Grok_logo.jpg",
    "custom_attributes": {
        "tag": "Meetstream",
        "sample": "testing",
        "user": "your-user-id"
    },
    "automatic_leave": {
        "waiting_room_timeout": 100,
        "everyone_left_timeout": 100,
        "voice_inactivity_timeout": 100,
        "in_call_recording_timeout": 14400,
        "recording_permission_denied_timeout": 60
    },
    "recording_config": { "retention": {
            "type": "timed",
            "hours": 100
        } }
}
headers = {
    "Authorization": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Zoom OBF
const url = 'https://api.meetstream.ai/api/v1/bots/create_bot';
const options = {
  method: 'POST',
  headers: {Authorization: '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"meeting_link":"https://meet.google.com/zcs-xwyv-hvi","bot_name":"Meetstream Agent","video_required":true,"zoom":{"use_zoom_obf":true},"bot_message":"Hey Everyone :wave , I\'m a speaking agent","bot_image_url":"https://www.malwarebytes.com/wp-content/uploads/sites/2/2024/08/Grok_logo.jpg","custom_attributes":{"tag":"Meetstream","sample":"testing","user":"your-user-id"},"automatic_leave":{"waiting_room_timeout":100,"everyone_left_timeout":100,"voice_inactivity_timeout":100,"in_call_recording_timeout":14400,"recording_permission_denied_timeout":60},"recording_config":{"retention":{"type":"timed","hours":100}}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Zoom OBF
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.meetstream.ai/api/v1/bots/create_bot"

	payload := strings.NewReader("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"zoom\": {\n    \"use_zoom_obf\": true\n  },\n  \"bot_message\": \"Hey Everyone :wave , I'm a speaking agent\",\n  \"bot_image_url\": \"https://www.malwarebytes.com/wp-content/uploads/sites/2/2024/08/Grok_logo.jpg\",\n  \"custom_attributes\": {\n    \"tag\": \"Meetstream\",\n    \"sample\": \"testing\",\n    \"user\": \"your-user-id\"\n  },\n  \"automatic_leave\": {\n    \"waiting_room_timeout\": 100,\n    \"everyone_left_timeout\": 100,\n    \"voice_inactivity_timeout\": 100,\n    \"in_call_recording_timeout\": 14400,\n    \"recording_permission_denied_timeout\": 60\n  },\n  \"recording_config\": {\n    \"retention\": {\n      \"type\": \"timed\",\n      \"hours\": 100\n    }\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Zoom OBF
require 'uri'
require 'net/http'

url = URI("https://api.meetstream.ai/api/v1/bots/create_bot")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"zoom\": {\n    \"use_zoom_obf\": true\n  },\n  \"bot_message\": \"Hey Everyone :wave , I'm a speaking agent\",\n  \"bot_image_url\": \"https://www.malwarebytes.com/wp-content/uploads/sites/2/2024/08/Grok_logo.jpg\",\n  \"custom_attributes\": {\n    \"tag\": \"Meetstream\",\n    \"sample\": \"testing\",\n    \"user\": \"your-user-id\"\n  },\n  \"automatic_leave\": {\n    \"waiting_room_timeout\": 100,\n    \"everyone_left_timeout\": 100,\n    \"voice_inactivity_timeout\": 100,\n    \"in_call_recording_timeout\": 14400,\n    \"recording_permission_denied_timeout\": 60\n  },\n  \"recording_config\": {\n    \"retention\": {\n      \"type\": \"timed\",\n      \"hours\": 100\n    }\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java Zoom OBF
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.meetstream.ai/api/v1/bots/create_bot")
  .header("Authorization", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"zoom\": {\n    \"use_zoom_obf\": true\n  },\n  \"bot_message\": \"Hey Everyone :wave , I'm a speaking agent\",\n  \"bot_image_url\": \"https://www.malwarebytes.com/wp-content/uploads/sites/2/2024/08/Grok_logo.jpg\",\n  \"custom_attributes\": {\n    \"tag\": \"Meetstream\",\n    \"sample\": \"testing\",\n    \"user\": \"your-user-id\"\n  },\n  \"automatic_leave\": {\n    \"waiting_room_timeout\": 100,\n    \"everyone_left_timeout\": 100,\n    \"voice_inactivity_timeout\": 100,\n    \"in_call_recording_timeout\": 14400,\n    \"recording_permission_denied_timeout\": 60\n  },\n  \"recording_config\": {\n    \"retention\": {\n      \"type\": \"timed\",\n      \"hours\": 100\n    }\n  }\n}")
  .asString();
```

```php Zoom OBF
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.meetstream.ai/api/v1/bots/create_bot', [
  'body' => '{
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "zoom": {
    "use_zoom_obf": true
  },
  "bot_message": "Hey Everyone :wave , I\'m a speaking agent",
  "bot_image_url": "https://www.malwarebytes.com/wp-content/uploads/sites/2/2024/08/Grok_logo.jpg",
  "custom_attributes": {
    "tag": "Meetstream",
    "sample": "testing",
    "user": "your-user-id"
  },
  "automatic_leave": {
    "waiting_room_timeout": 100,
    "everyone_left_timeout": 100,
    "voice_inactivity_timeout": 100,
    "in_call_recording_timeout": 14400,
    "recording_permission_denied_timeout": 60
  },
  "recording_config": {
    "retention": {
      "type": "timed",
      "hours": 100
    }
  }
}',
  'headers' => [
    'Authorization' => '<apiKey>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Zoom OBF
using RestSharp;

var client = new RestClient("https://api.meetstream.ai/api/v1/bots/create_bot");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"zoom\": {\n    \"use_zoom_obf\": true\n  },\n  \"bot_message\": \"Hey Everyone :wave , I'm a speaking agent\",\n  \"bot_image_url\": \"https://www.malwarebytes.com/wp-content/uploads/sites/2/2024/08/Grok_logo.jpg\",\n  \"custom_attributes\": {\n    \"tag\": \"Meetstream\",\n    \"sample\": \"testing\",\n    \"user\": \"your-user-id\"\n  },\n  \"automatic_leave\": {\n    \"waiting_room_timeout\": 100,\n    \"everyone_left_timeout\": 100,\n    \"voice_inactivity_timeout\": 100,\n    \"in_call_recording_timeout\": 14400,\n    \"recording_permission_denied_timeout\": 60\n  },\n  \"recording_config\": {\n    \"retention\": {\n      \"type\": \"timed\",\n      \"hours\": 100\n    }\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Zoom OBF
import Foundation

let headers = [
  "Authorization": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "zoom": ["use_zoom_obf": true],
  "bot_message": "Hey Everyone :wave , I'm a speaking agent",
  "bot_image_url": "https://www.malwarebytes.com/wp-content/uploads/sites/2/2024/08/Grok_logo.jpg",
  "custom_attributes": [
    "tag": "Meetstream",
    "sample": "testing",
    "user": "your-user-id"
  ],
  "automatic_leave": [
    "waiting_room_timeout": 100,
    "everyone_left_timeout": 100,
    "voice_inactivity_timeout": 100,
    "in_call_recording_timeout": 14400,
    "recording_permission_denied_timeout": 60
  ],
  "recording_config": ["retention": [
      "type": "timed",
      "hours": 100
    ]]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.meetstream.ai/api/v1/bots/create_bot")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

```python Separate Video Streams
import requests

url = "https://api.meetstream.ai/api/v1/bots/create_bot"

payload = {
    "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
    "bot_name": "Meetstream Agent",
    "video_required": True,
    "video_separate_streams": True,
    "bot_message": "Hey Everyone :wave , I'm a speaking agent",
    "bot_image_url": "https://www.malwarebytes.com/wp-content/uploads/sites/2/2024/08/Grok_logo.jpg",
    "custom_attributes": {
        "tag": "Meetstream",
        "sample": "testing",
        "user": "your-user-id"
    },
    "automatic_leave": {
        "waiting_room_timeout": 100,
        "everyone_left_timeout": 100,
        "voice_inactivity_timeout": 100,
        "in_call_recording_timeout": 14400,
        "recording_permission_denied_timeout": 60
    },
    "recording_config": { "retention": {
            "type": "timed",
            "hours": 100
        } }
}
headers = {
    "Authorization": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Separate Video Streams
const url = 'https://api.meetstream.ai/api/v1/bots/create_bot';
const options = {
  method: 'POST',
  headers: {Authorization: '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"meeting_link":"https://meet.google.com/zcs-xwyv-hvi","bot_name":"Meetstream Agent","video_required":true,"video_separate_streams":true,"bot_message":"Hey Everyone :wave , I\'m a speaking agent","bot_image_url":"https://www.malwarebytes.com/wp-content/uploads/sites/2/2024/08/Grok_logo.jpg","custom_attributes":{"tag":"Meetstream","sample":"testing","user":"your-user-id"},"automatic_leave":{"waiting_room_timeout":100,"everyone_left_timeout":100,"voice_inactivity_timeout":100,"in_call_recording_timeout":14400,"recording_permission_denied_timeout":60},"recording_config":{"retention":{"type":"timed","hours":100}}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Separate Video Streams
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.meetstream.ai/api/v1/bots/create_bot"

	payload := strings.NewReader("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"video_separate_streams\": true,\n  \"bot_message\": \"Hey Everyone :wave , I'm a speaking agent\",\n  \"bot_image_url\": \"https://www.malwarebytes.com/wp-content/uploads/sites/2/2024/08/Grok_logo.jpg\",\n  \"custom_attributes\": {\n    \"tag\": \"Meetstream\",\n    \"sample\": \"testing\",\n    \"user\": \"your-user-id\"\n  },\n  \"automatic_leave\": {\n    \"waiting_room_timeout\": 100,\n    \"everyone_left_timeout\": 100,\n    \"voice_inactivity_timeout\": 100,\n    \"in_call_recording_timeout\": 14400,\n    \"recording_permission_denied_timeout\": 60\n  },\n  \"recording_config\": {\n    \"retention\": {\n      \"type\": \"timed\",\n      \"hours\": 100\n    }\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Separate Video Streams
require 'uri'
require 'net/http'

url = URI("https://api.meetstream.ai/api/v1/bots/create_bot")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"video_separate_streams\": true,\n  \"bot_message\": \"Hey Everyone :wave , I'm a speaking agent\",\n  \"bot_image_url\": \"https://www.malwarebytes.com/wp-content/uploads/sites/2/2024/08/Grok_logo.jpg\",\n  \"custom_attributes\": {\n    \"tag\": \"Meetstream\",\n    \"sample\": \"testing\",\n    \"user\": \"your-user-id\"\n  },\n  \"automatic_leave\": {\n    \"waiting_room_timeout\": 100,\n    \"everyone_left_timeout\": 100,\n    \"voice_inactivity_timeout\": 100,\n    \"in_call_recording_timeout\": 14400,\n    \"recording_permission_denied_timeout\": 60\n  },\n  \"recording_config\": {\n    \"retention\": {\n      \"type\": \"timed\",\n      \"hours\": 100\n    }\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java Separate Video Streams
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.meetstream.ai/api/v1/bots/create_bot")
  .header("Authorization", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"video_separate_streams\": true,\n  \"bot_message\": \"Hey Everyone :wave , I'm a speaking agent\",\n  \"bot_image_url\": \"https://www.malwarebytes.com/wp-content/uploads/sites/2/2024/08/Grok_logo.jpg\",\n  \"custom_attributes\": {\n    \"tag\": \"Meetstream\",\n    \"sample\": \"testing\",\n    \"user\": \"your-user-id\"\n  },\n  \"automatic_leave\": {\n    \"waiting_room_timeout\": 100,\n    \"everyone_left_timeout\": 100,\n    \"voice_inactivity_timeout\": 100,\n    \"in_call_recording_timeout\": 14400,\n    \"recording_permission_denied_timeout\": 60\n  },\n  \"recording_config\": {\n    \"retention\": {\n      \"type\": \"timed\",\n      \"hours\": 100\n    }\n  }\n}")
  .asString();
```

```php Separate Video Streams
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.meetstream.ai/api/v1/bots/create_bot', [
  'body' => '{
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "video_separate_streams": true,
  "bot_message": "Hey Everyone :wave , I\'m a speaking agent",
  "bot_image_url": "https://www.malwarebytes.com/wp-content/uploads/sites/2/2024/08/Grok_logo.jpg",
  "custom_attributes": {
    "tag": "Meetstream",
    "sample": "testing",
    "user": "your-user-id"
  },
  "automatic_leave": {
    "waiting_room_timeout": 100,
    "everyone_left_timeout": 100,
    "voice_inactivity_timeout": 100,
    "in_call_recording_timeout": 14400,
    "recording_permission_denied_timeout": 60
  },
  "recording_config": {
    "retention": {
      "type": "timed",
      "hours": 100
    }
  }
}',
  'headers' => [
    'Authorization' => '<apiKey>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Separate Video Streams
using RestSharp;

var client = new RestClient("https://api.meetstream.ai/api/v1/bots/create_bot");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"video_separate_streams\": true,\n  \"bot_message\": \"Hey Everyone :wave , I'm a speaking agent\",\n  \"bot_image_url\": \"https://www.malwarebytes.com/wp-content/uploads/sites/2/2024/08/Grok_logo.jpg\",\n  \"custom_attributes\": {\n    \"tag\": \"Meetstream\",\n    \"sample\": \"testing\",\n    \"user\": \"your-user-id\"\n  },\n  \"automatic_leave\": {\n    \"waiting_room_timeout\": 100,\n    \"everyone_left_timeout\": 100,\n    \"voice_inactivity_timeout\": 100,\n    \"in_call_recording_timeout\": 14400,\n    \"recording_permission_denied_timeout\": 60\n  },\n  \"recording_config\": {\n    \"retention\": {\n      \"type\": \"timed\",\n      \"hours\": 100\n    }\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Separate Video Streams
import Foundation

let headers = [
  "Authorization": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "video_separate_streams": true,
  "bot_message": "Hey Everyone :wave , I'm a speaking agent",
  "bot_image_url": "https://www.malwarebytes.com/wp-content/uploads/sites/2/2024/08/Grok_logo.jpg",
  "custom_attributes": [
    "tag": "Meetstream",
    "sample": "testing",
    "user": "your-user-id"
  ],
  "automatic_leave": [
    "waiting_room_timeout": 100,
    "everyone_left_timeout": 100,
    "voice_inactivity_timeout": 100,
    "in_call_recording_timeout": 14400,
    "recording_permission_denied_timeout": 60
  ],
  "recording_config": ["retention": [
      "type": "timed",
      "hours": 100
    ]]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.meetstream.ai/api/v1/bots/create_bot")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

```python Separate Audio Streams
import requests

url = "https://api.meetstream.ai/api/v1/bots/create_bot"

payload = {
    "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
    "bot_name": "Meetstream Agent",
    "video_required": True,
    "audio_separate_streams": True,
    "bot_message": "Hey Everyone :wave , I'm a speaking agent",
    "bot_image_url": "https://media1.tenor.com/m/DgzBbRG6ibUAAAAC/gross-eek.gif",
    "custom_attributes": {
        "tag": "Meetstream",
        "sample": "testing",
        "user": "your-user-id"
    },
    "automatic_leave": {
        "waiting_room_timeout": 100,
        "everyone_left_timeout": 100,
        "voice_inactivity_timeout": 51,
        "in_call_recording_timeout": 14400,
        "recording_permission_denied_timeout": 60
    },
    "recording_config": { "retention": {
            "type": "timed",
            "hours": 48
        } }
}
headers = {
    "Authorization": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Separate Audio Streams
const url = 'https://api.meetstream.ai/api/v1/bots/create_bot';
const options = {
  method: 'POST',
  headers: {Authorization: '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"meeting_link":"https://meet.google.com/zcs-xwyv-hvi","bot_name":"Meetstream Agent","video_required":true,"audio_separate_streams":true,"bot_message":"Hey Everyone :wave , I\'m a speaking agent","bot_image_url":"https://media1.tenor.com/m/DgzBbRG6ibUAAAAC/gross-eek.gif","custom_attributes":{"tag":"Meetstream","sample":"testing","user":"your-user-id"},"automatic_leave":{"waiting_room_timeout":100,"everyone_left_timeout":100,"voice_inactivity_timeout":51,"in_call_recording_timeout":14400,"recording_permission_denied_timeout":60},"recording_config":{"retention":{"type":"timed","hours":48}}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Separate Audio Streams
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.meetstream.ai/api/v1/bots/create_bot"

	payload := strings.NewReader("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"audio_separate_streams\": true,\n  \"bot_message\": \"Hey Everyone :wave , I'm a speaking agent\",\n  \"bot_image_url\": \"https://media1.tenor.com/m/DgzBbRG6ibUAAAAC/gross-eek.gif\",\n  \"custom_attributes\": {\n    \"tag\": \"Meetstream\",\n    \"sample\": \"testing\",\n    \"user\": \"your-user-id\"\n  },\n  \"automatic_leave\": {\n    \"waiting_room_timeout\": 100,\n    \"everyone_left_timeout\": 100,\n    \"voice_inactivity_timeout\": 51,\n    \"in_call_recording_timeout\": 14400,\n    \"recording_permission_denied_timeout\": 60\n  },\n  \"recording_config\": {\n    \"retention\": {\n      \"type\": \"timed\",\n      \"hours\": 48\n    }\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Separate Audio Streams
require 'uri'
require 'net/http'

url = URI("https://api.meetstream.ai/api/v1/bots/create_bot")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"audio_separate_streams\": true,\n  \"bot_message\": \"Hey Everyone :wave , I'm a speaking agent\",\n  \"bot_image_url\": \"https://media1.tenor.com/m/DgzBbRG6ibUAAAAC/gross-eek.gif\",\n  \"custom_attributes\": {\n    \"tag\": \"Meetstream\",\n    \"sample\": \"testing\",\n    \"user\": \"your-user-id\"\n  },\n  \"automatic_leave\": {\n    \"waiting_room_timeout\": 100,\n    \"everyone_left_timeout\": 100,\n    \"voice_inactivity_timeout\": 51,\n    \"in_call_recording_timeout\": 14400,\n    \"recording_permission_denied_timeout\": 60\n  },\n  \"recording_config\": {\n    \"retention\": {\n      \"type\": \"timed\",\n      \"hours\": 48\n    }\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java Separate Audio Streams
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.meetstream.ai/api/v1/bots/create_bot")
  .header("Authorization", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"audio_separate_streams\": true,\n  \"bot_message\": \"Hey Everyone :wave , I'm a speaking agent\",\n  \"bot_image_url\": \"https://media1.tenor.com/m/DgzBbRG6ibUAAAAC/gross-eek.gif\",\n  \"custom_attributes\": {\n    \"tag\": \"Meetstream\",\n    \"sample\": \"testing\",\n    \"user\": \"your-user-id\"\n  },\n  \"automatic_leave\": {\n    \"waiting_room_timeout\": 100,\n    \"everyone_left_timeout\": 100,\n    \"voice_inactivity_timeout\": 51,\n    \"in_call_recording_timeout\": 14400,\n    \"recording_permission_denied_timeout\": 60\n  },\n  \"recording_config\": {\n    \"retention\": {\n      \"type\": \"timed\",\n      \"hours\": 48\n    }\n  }\n}")
  .asString();
```

```php Separate Audio Streams
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.meetstream.ai/api/v1/bots/create_bot', [
  'body' => '{
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "audio_separate_streams": true,
  "bot_message": "Hey Everyone :wave , I\'m a speaking agent",
  "bot_image_url": "https://media1.tenor.com/m/DgzBbRG6ibUAAAAC/gross-eek.gif",
  "custom_attributes": {
    "tag": "Meetstream",
    "sample": "testing",
    "user": "your-user-id"
  },
  "automatic_leave": {
    "waiting_room_timeout": 100,
    "everyone_left_timeout": 100,
    "voice_inactivity_timeout": 51,
    "in_call_recording_timeout": 14400,
    "recording_permission_denied_timeout": 60
  },
  "recording_config": {
    "retention": {
      "type": "timed",
      "hours": 48
    }
  }
}',
  'headers' => [
    'Authorization' => '<apiKey>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Separate Audio Streams
using RestSharp;

var client = new RestClient("https://api.meetstream.ai/api/v1/bots/create_bot");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"audio_separate_streams\": true,\n  \"bot_message\": \"Hey Everyone :wave , I'm a speaking agent\",\n  \"bot_image_url\": \"https://media1.tenor.com/m/DgzBbRG6ibUAAAAC/gross-eek.gif\",\n  \"custom_attributes\": {\n    \"tag\": \"Meetstream\",\n    \"sample\": \"testing\",\n    \"user\": \"your-user-id\"\n  },\n  \"automatic_leave\": {\n    \"waiting_room_timeout\": 100,\n    \"everyone_left_timeout\": 100,\n    \"voice_inactivity_timeout\": 51,\n    \"in_call_recording_timeout\": 14400,\n    \"recording_permission_denied_timeout\": 60\n  },\n  \"recording_config\": {\n    \"retention\": {\n      \"type\": \"timed\",\n      \"hours\": 48\n    }\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Separate Audio Streams
import Foundation

let headers = [
  "Authorization": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "audio_separate_streams": true,
  "bot_message": "Hey Everyone :wave , I'm a speaking agent",
  "bot_image_url": "https://media1.tenor.com/m/DgzBbRG6ibUAAAAC/gross-eek.gif",
  "custom_attributes": [
    "tag": "Meetstream",
    "sample": "testing",
    "user": "your-user-id"
  ],
  "automatic_leave": [
    "waiting_room_timeout": 100,
    "everyone_left_timeout": 100,
    "voice_inactivity_timeout": 51,
    "in_call_recording_timeout": 14400,
    "recording_permission_denied_timeout": 60
  ],
  "recording_config": ["retention": [
      "type": "timed",
      "hours": 48
    ]]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.meetstream.ai/api/v1/bots/create_bot")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

```python MIA Virtual Avatars
import requests

url = "https://api.meetstream.ai/api/v1/bots/create_bot"

payload = {
    "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
    "bot_name": "Meetstream Agent",
    "video_required": True,
    "bot_message": "Avatar bot here",
    "bot_image_url": "https://www.malwarebytes.com/wp-content/uploads/sites/2/2024/08/Grok_logo.jpg",
    "agent_config_id": "your-agent-config-id",
    "custom_attributes": {
        "tag": "Meetstream",
        "sample": "testing",
        "user": "your-user-id"
    },
    "socket_connection_url": { "websocket_url": "wss://agent-meetstream-prd-main.meetstream.ai/bridge" },
    "live_audio_required": { "websocket_url": "wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio" },
    "automatic_leave": {
        "waiting_room_timeout": 100,
        "everyone_left_timeout": 100,
        "voice_inactivity_timeout": 100,
        "in_call_recording_timeout": 14400,
        "recording_permission_denied_timeout": 60
    },
    "recording_config": { "retention": {
            "type": "timed",
            "hours": 24
        } }
}
headers = {
    "Authorization": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript MIA Virtual Avatars
const url = 'https://api.meetstream.ai/api/v1/bots/create_bot';
const options = {
  method: 'POST',
  headers: {Authorization: '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"meeting_link":"https://meet.google.com/zcs-xwyv-hvi","bot_name":"Meetstream Agent","video_required":true,"bot_message":"Avatar bot here","bot_image_url":"https://www.malwarebytes.com/wp-content/uploads/sites/2/2024/08/Grok_logo.jpg","agent_config_id":"your-agent-config-id","custom_attributes":{"tag":"Meetstream","sample":"testing","user":"your-user-id"},"socket_connection_url":{"websocket_url":"wss://agent-meetstream-prd-main.meetstream.ai/bridge"},"live_audio_required":{"websocket_url":"wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio"},"automatic_leave":{"waiting_room_timeout":100,"everyone_left_timeout":100,"voice_inactivity_timeout":100,"in_call_recording_timeout":14400,"recording_permission_denied_timeout":60},"recording_config":{"retention":{"type":"timed","hours":24}}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go MIA Virtual Avatars
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.meetstream.ai/api/v1/bots/create_bot"

	payload := strings.NewReader("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"bot_message\": \"Avatar bot here\",\n  \"bot_image_url\": \"https://www.malwarebytes.com/wp-content/uploads/sites/2/2024/08/Grok_logo.jpg\",\n  \"agent_config_id\": \"your-agent-config-id\",\n  \"custom_attributes\": {\n    \"tag\": \"Meetstream\",\n    \"sample\": \"testing\",\n    \"user\": \"your-user-id\"\n  },\n  \"socket_connection_url\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge\"\n  },\n  \"live_audio_required\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio\"\n  },\n  \"automatic_leave\": {\n    \"waiting_room_timeout\": 100,\n    \"everyone_left_timeout\": 100,\n    \"voice_inactivity_timeout\": 100,\n    \"in_call_recording_timeout\": 14400,\n    \"recording_permission_denied_timeout\": 60\n  },\n  \"recording_config\": {\n    \"retention\": {\n      \"type\": \"timed\",\n      \"hours\": 24\n    }\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby MIA Virtual Avatars
require 'uri'
require 'net/http'

url = URI("https://api.meetstream.ai/api/v1/bots/create_bot")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"bot_message\": \"Avatar bot here\",\n  \"bot_image_url\": \"https://www.malwarebytes.com/wp-content/uploads/sites/2/2024/08/Grok_logo.jpg\",\n  \"agent_config_id\": \"your-agent-config-id\",\n  \"custom_attributes\": {\n    \"tag\": \"Meetstream\",\n    \"sample\": \"testing\",\n    \"user\": \"your-user-id\"\n  },\n  \"socket_connection_url\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge\"\n  },\n  \"live_audio_required\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio\"\n  },\n  \"automatic_leave\": {\n    \"waiting_room_timeout\": 100,\n    \"everyone_left_timeout\": 100,\n    \"voice_inactivity_timeout\": 100,\n    \"in_call_recording_timeout\": 14400,\n    \"recording_permission_denied_timeout\": 60\n  },\n  \"recording_config\": {\n    \"retention\": {\n      \"type\": \"timed\",\n      \"hours\": 24\n    }\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java MIA Virtual Avatars
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.meetstream.ai/api/v1/bots/create_bot")
  .header("Authorization", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"bot_message\": \"Avatar bot here\",\n  \"bot_image_url\": \"https://www.malwarebytes.com/wp-content/uploads/sites/2/2024/08/Grok_logo.jpg\",\n  \"agent_config_id\": \"your-agent-config-id\",\n  \"custom_attributes\": {\n    \"tag\": \"Meetstream\",\n    \"sample\": \"testing\",\n    \"user\": \"your-user-id\"\n  },\n  \"socket_connection_url\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge\"\n  },\n  \"live_audio_required\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio\"\n  },\n  \"automatic_leave\": {\n    \"waiting_room_timeout\": 100,\n    \"everyone_left_timeout\": 100,\n    \"voice_inactivity_timeout\": 100,\n    \"in_call_recording_timeout\": 14400,\n    \"recording_permission_denied_timeout\": 60\n  },\n  \"recording_config\": {\n    \"retention\": {\n      \"type\": \"timed\",\n      \"hours\": 24\n    }\n  }\n}")
  .asString();
```

```php MIA Virtual Avatars
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.meetstream.ai/api/v1/bots/create_bot', [
  'body' => '{
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "bot_message": "Avatar bot here",
  "bot_image_url": "https://www.malwarebytes.com/wp-content/uploads/sites/2/2024/08/Grok_logo.jpg",
  "agent_config_id": "your-agent-config-id",
  "custom_attributes": {
    "tag": "Meetstream",
    "sample": "testing",
    "user": "your-user-id"
  },
  "socket_connection_url": {
    "websocket_url": "wss://agent-meetstream-prd-main.meetstream.ai/bridge"
  },
  "live_audio_required": {
    "websocket_url": "wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio"
  },
  "automatic_leave": {
    "waiting_room_timeout": 100,
    "everyone_left_timeout": 100,
    "voice_inactivity_timeout": 100,
    "in_call_recording_timeout": 14400,
    "recording_permission_denied_timeout": 60
  },
  "recording_config": {
    "retention": {
      "type": "timed",
      "hours": 24
    }
  }
}',
  'headers' => [
    'Authorization' => '<apiKey>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp MIA Virtual Avatars
using RestSharp;

var client = new RestClient("https://api.meetstream.ai/api/v1/bots/create_bot");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"meeting_link\": \"https://meet.google.com/zcs-xwyv-hvi\",\n  \"bot_name\": \"Meetstream Agent\",\n  \"video_required\": true,\n  \"bot_message\": \"Avatar bot here\",\n  \"bot_image_url\": \"https://www.malwarebytes.com/wp-content/uploads/sites/2/2024/08/Grok_logo.jpg\",\n  \"agent_config_id\": \"your-agent-config-id\",\n  \"custom_attributes\": {\n    \"tag\": \"Meetstream\",\n    \"sample\": \"testing\",\n    \"user\": \"your-user-id\"\n  },\n  \"socket_connection_url\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge\"\n  },\n  \"live_audio_required\": {\n    \"websocket_url\": \"wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio\"\n  },\n  \"automatic_leave\": {\n    \"waiting_room_timeout\": 100,\n    \"everyone_left_timeout\": 100,\n    \"voice_inactivity_timeout\": 100,\n    \"in_call_recording_timeout\": 14400,\n    \"recording_permission_denied_timeout\": 60\n  },\n  \"recording_config\": {\n    \"retention\": {\n      \"type\": \"timed\",\n      \"hours\": 24\n    }\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift MIA Virtual Avatars
import Foundation

let headers = [
  "Authorization": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "meeting_link": "https://meet.google.com/zcs-xwyv-hvi",
  "bot_name": "Meetstream Agent",
  "video_required": true,
  "bot_message": "Avatar bot here",
  "bot_image_url": "https://www.malwarebytes.com/wp-content/uploads/sites/2/2024/08/Grok_logo.jpg",
  "agent_config_id": "your-agent-config-id",
  "custom_attributes": [
    "tag": "Meetstream",
    "sample": "testing",
    "user": "your-user-id"
  ],
  "socket_connection_url": ["websocket_url": "wss://agent-meetstream-prd-main.meetstream.ai/bridge"],
  "live_audio_required": ["websocket_url": "wss://agent-meetstream-prd-main.meetstream.ai/bridge/audio"],
  "automatic_leave": [
    "waiting_room_timeout": 100,
    "everyone_left_timeout": 100,
    "voice_inactivity_timeout": 100,
    "in_call_recording_timeout": 14400,
    "recording_permission_denied_timeout": 60
  ],
  "recording_config": ["retention": [
      "type": "timed",
      "hours": 24
    ]]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.meetstream.ai/api/v1/bots/create_bot")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```