Start bot
curl --request POST \
--url https://api.example.com/api/bot/join \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data @- <<EOF
{
"provider": "daily",
"room_url": "https://your-domain.daily.co/your-room",
"bot_config": {
"bot_prompt": "You are a helpful AI assistant.",
"name": "MeetingBot",
"video_mode": "static",
"background_image_url": "https://example.com/background.png",
"bot_greeting": "Greet them and let them know you're here to conduct an interview.",
"stop_phrase": "have a nice day",
"voice": "echo"
},
"process_insights": true,
"email": "[email protected]"
}
EOFimport requests
url = "https://api.example.com/api/bot/join"
payload = {
"provider": "daily",
"room_url": "https://your-domain.daily.co/your-room",
"bot_config": {
"bot_prompt": "You are a helpful AI assistant.",
"name": "MeetingBot",
"video_mode": "static",
"background_image_url": "https://example.com/background.png",
"bot_greeting": "Greet them and let them know you're here to conduct an interview.",
"stop_phrase": "have a nice day",
"voice": "echo"
},
"process_insights": True,
"email": "[email protected]"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
provider: 'daily',
room_url: 'https://your-domain.daily.co/your-room',
bot_config: {
bot_prompt: 'You are a helpful AI assistant.',
name: 'MeetingBot',
video_mode: 'static',
background_image_url: 'https://example.com/background.png',
bot_greeting: 'Greet them and let them know you\'re here to conduct an interview.',
stop_phrase: 'have a nice day',
voice: 'echo'
},
process_insights: true,
email: '[email protected]'
})
};
fetch('https://api.example.com/api/bot/join', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/api/bot/join",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'provider' => 'daily',
'room_url' => 'https://your-domain.daily.co/your-room',
'bot_config' => [
'bot_prompt' => 'You are a helpful AI assistant.',
'name' => 'MeetingBot',
'video_mode' => 'static',
'background_image_url' => 'https://example.com/background.png',
'bot_greeting' => 'Greet them and let them know you\'re here to conduct an interview.',
'stop_phrase' => 'have a nice day',
'voice' => 'echo'
],
'process_insights' => true,
'email' => '[email protected]'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/api/bot/join"
payload := strings.NewReader("{\n \"provider\": \"daily\",\n \"room_url\": \"https://your-domain.daily.co/your-room\",\n \"bot_config\": {\n \"bot_prompt\": \"You are a helpful AI assistant.\",\n \"name\": \"MeetingBot\",\n \"video_mode\": \"static\",\n \"background_image_url\": \"https://example.com/background.png\",\n \"bot_greeting\": \"Greet them and let them know you're here to conduct an interview.\",\n \"stop_phrase\": \"have a nice day\",\n \"voice\": \"echo\"\n },\n \"process_insights\": true,\n \"email\": \"[email protected]\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/api/bot/join")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"provider\": \"daily\",\n \"room_url\": \"https://your-domain.daily.co/your-room\",\n \"bot_config\": {\n \"bot_prompt\": \"You are a helpful AI assistant.\",\n \"name\": \"MeetingBot\",\n \"video_mode\": \"static\",\n \"background_image_url\": \"https://example.com/background.png\",\n \"bot_greeting\": \"Greet them and let them know you're here to conduct an interview.\",\n \"stop_phrase\": \"have a nice day\",\n \"voice\": \"echo\"\n },\n \"process_insights\": true,\n \"email\": \"[email protected]\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/bot/join")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"provider\": \"daily\",\n \"room_url\": \"https://your-domain.daily.co/your-room\",\n \"bot_config\": {\n \"bot_prompt\": \"You are a helpful AI assistant.\",\n \"name\": \"MeetingBot\",\n \"video_mode\": \"static\",\n \"background_image_url\": \"https://example.com/background.png\",\n \"bot_greeting\": \"Greet them and let them know you're here to conduct an interview.\",\n \"stop_phrase\": \"have a nice day\",\n \"voice\": \"echo\"\n },\n \"process_insights\": true,\n \"email\": \"[email protected]\"\n}"
response = http.request(request)
puts response.read_body{
"status": "started",
"bot_id": "258b06fc-6bc9-4261-9f29-bc8a4474af0a",
"room_url": "https://your-domain.daily.co/your-room"
}{
"error": "authentication_error",
"detail": "API key authentication failed.",
"message": "Please verify your API key or contact support."
}{
"error": "insufficient_credits",
"detail": "Your account has insufficient credits to perform this action.",
"balance": 0,
"message": "Please add credits to your account to continue."
}{
"error": "<string>",
"detail": "<string>",
"message": "<string>",
"balance": 123
}API Reference
Start bot
Start an AI bot that will join an existing video meeting room. The bot will transcribe the conversation and can process insights when the meeting ends.
Start bot
curl --request POST \
--url https://api.example.com/api/bot/join \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data @- <<EOF
{
"provider": "daily",
"room_url": "https://your-domain.daily.co/your-room",
"bot_config": {
"bot_prompt": "You are a helpful AI assistant.",
"name": "MeetingBot",
"video_mode": "static",
"background_image_url": "https://example.com/background.png",
"bot_greeting": "Greet them and let them know you're here to conduct an interview.",
"stop_phrase": "have a nice day",
"voice": "echo"
},
"process_insights": true,
"email": "[email protected]"
}
EOFimport requests
url = "https://api.example.com/api/bot/join"
payload = {
"provider": "daily",
"room_url": "https://your-domain.daily.co/your-room",
"bot_config": {
"bot_prompt": "You are a helpful AI assistant.",
"name": "MeetingBot",
"video_mode": "static",
"background_image_url": "https://example.com/background.png",
"bot_greeting": "Greet them and let them know you're here to conduct an interview.",
"stop_phrase": "have a nice day",
"voice": "echo"
},
"process_insights": True,
"email": "[email protected]"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
provider: 'daily',
room_url: 'https://your-domain.daily.co/your-room',
bot_config: {
bot_prompt: 'You are a helpful AI assistant.',
name: 'MeetingBot',
video_mode: 'static',
background_image_url: 'https://example.com/background.png',
bot_greeting: 'Greet them and let them know you\'re here to conduct an interview.',
stop_phrase: 'have a nice day',
voice: 'echo'
},
process_insights: true,
email: '[email protected]'
})
};
fetch('https://api.example.com/api/bot/join', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/api/bot/join",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'provider' => 'daily',
'room_url' => 'https://your-domain.daily.co/your-room',
'bot_config' => [
'bot_prompt' => 'You are a helpful AI assistant.',
'name' => 'MeetingBot',
'video_mode' => 'static',
'background_image_url' => 'https://example.com/background.png',
'bot_greeting' => 'Greet them and let them know you\'re here to conduct an interview.',
'stop_phrase' => 'have a nice day',
'voice' => 'echo'
],
'process_insights' => true,
'email' => '[email protected]'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/api/bot/join"
payload := strings.NewReader("{\n \"provider\": \"daily\",\n \"room_url\": \"https://your-domain.daily.co/your-room\",\n \"bot_config\": {\n \"bot_prompt\": \"You are a helpful AI assistant.\",\n \"name\": \"MeetingBot\",\n \"video_mode\": \"static\",\n \"background_image_url\": \"https://example.com/background.png\",\n \"bot_greeting\": \"Greet them and let them know you're here to conduct an interview.\",\n \"stop_phrase\": \"have a nice day\",\n \"voice\": \"echo\"\n },\n \"process_insights\": true,\n \"email\": \"[email protected]\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/api/bot/join")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"provider\": \"daily\",\n \"room_url\": \"https://your-domain.daily.co/your-room\",\n \"bot_config\": {\n \"bot_prompt\": \"You are a helpful AI assistant.\",\n \"name\": \"MeetingBot\",\n \"video_mode\": \"static\",\n \"background_image_url\": \"https://example.com/background.png\",\n \"bot_greeting\": \"Greet them and let them know you're here to conduct an interview.\",\n \"stop_phrase\": \"have a nice day\",\n \"voice\": \"echo\"\n },\n \"process_insights\": true,\n \"email\": \"[email protected]\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/bot/join")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"provider\": \"daily\",\n \"room_url\": \"https://your-domain.daily.co/your-room\",\n \"bot_config\": {\n \"bot_prompt\": \"You are a helpful AI assistant.\",\n \"name\": \"MeetingBot\",\n \"video_mode\": \"static\",\n \"background_image_url\": \"https://example.com/background.png\",\n \"bot_greeting\": \"Greet them and let them know you're here to conduct an interview.\",\n \"stop_phrase\": \"have a nice day\",\n \"voice\": \"echo\"\n },\n \"process_insights\": true,\n \"email\": \"[email protected]\"\n}"
response = http.request(request)
puts response.read_body{
"status": "started",
"bot_id": "258b06fc-6bc9-4261-9f29-bc8a4474af0a",
"room_url": "https://your-domain.daily.co/your-room"
}{
"error": "authentication_error",
"detail": "API key authentication failed.",
"message": "Please verify your API key or contact support."
}{
"error": "insufficient_credits",
"detail": "Your account has insufficient credits to perform this action.",
"balance": 0,
"message": "Please add credits to your account to continue."
}{
"error": "<string>",
"detail": "<string>",
"message": "<string>",
"balance": 123
}Authorizations
Your API key from pailflow.com
Body
application/json
Full video meeting room URL (e.g., https://your-domain.daily.co/room-name)
Example:
"https://your-domain.daily.co/your-room"
Show child attributes
Show child attributes
Optional meeting token for private rooms
Provider (default: 'daily' for future multi-provider support)
Example:
"daily"
Whether to extract insights after bot finishes (default: true)
Example:
true
Email to send results to (optional)
Custom prompt for AI analysis (optional)
Custom prompt for summary formatting (optional)
Webhook URL to send results to (optional)
⌘I

