Start Call
curl --request POST \
--url https://api.rapidcall.ai/api/agents/{id}/start \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"welcome": {},
"voice": {},
"enabledTools": [
"<string>"
],
"language": "<string>",
"preferredRegion": "<string>"
}
'import requests
url = "https://api.rapidcall.ai/api/agents/{id}/start"
payload = {
"welcome": {},
"voice": {},
"enabledTools": ["<string>"],
"language": "<string>",
"preferredRegion": "<string>"
}
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({
welcome: {},
voice: {},
enabledTools: ['<string>'],
language: '<string>',
preferredRegion: '<string>'
})
};
fetch('https://api.rapidcall.ai/api/agents/{id}/start', 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.rapidcall.ai/api/agents/{id}/start",
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([
'welcome' => [
],
'voice' => [
],
'enabledTools' => [
'<string>'
],
'language' => '<string>',
'preferredRegion' => '<string>'
]),
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.rapidcall.ai/api/agents/{id}/start"
payload := strings.NewReader("{\n \"welcome\": {},\n \"voice\": {},\n \"enabledTools\": [\n \"<string>\"\n ],\n \"language\": \"<string>\",\n \"preferredRegion\": \"<string>\"\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.rapidcall.ai/api/agents/{id}/start")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"welcome\": {},\n \"voice\": {},\n \"enabledTools\": [\n \"<string>\"\n ],\n \"language\": \"<string>\",\n \"preferredRegion\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.rapidcall.ai/api/agents/{id}/start")
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 \"welcome\": {},\n \"voice\": {},\n \"enabledTools\": [\n \"<string>\"\n ],\n \"language\": \"<string>\",\n \"preferredRegion\": \"<string>\"\n}"
response = http.request(request)
puts response.read_bodyCalls
Start Call
Start a web test call with an agent via WebRTC
POST
/
api
/
agents
/
{id}
/
start
Start Call
curl --request POST \
--url https://api.rapidcall.ai/api/agents/{id}/start \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"welcome": {},
"voice": {},
"enabledTools": [
"<string>"
],
"language": "<string>",
"preferredRegion": "<string>"
}
'import requests
url = "https://api.rapidcall.ai/api/agents/{id}/start"
payload = {
"welcome": {},
"voice": {},
"enabledTools": ["<string>"],
"language": "<string>",
"preferredRegion": "<string>"
}
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({
welcome: {},
voice: {},
enabledTools: ['<string>'],
language: '<string>',
preferredRegion: '<string>'
})
};
fetch('https://api.rapidcall.ai/api/agents/{id}/start', 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.rapidcall.ai/api/agents/{id}/start",
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([
'welcome' => [
],
'voice' => [
],
'enabledTools' => [
'<string>'
],
'language' => '<string>',
'preferredRegion' => '<string>'
]),
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.rapidcall.ai/api/agents/{id}/start"
payload := strings.NewReader("{\n \"welcome\": {},\n \"voice\": {},\n \"enabledTools\": [\n \"<string>\"\n ],\n \"language\": \"<string>\",\n \"preferredRegion\": \"<string>\"\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.rapidcall.ai/api/agents/{id}/start")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"welcome\": {},\n \"voice\": {},\n \"enabledTools\": [\n \"<string>\"\n ],\n \"language\": \"<string>\",\n \"preferredRegion\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.rapidcall.ai/api/agents/{id}/start")
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 \"welcome\": {},\n \"voice\": {},\n \"enabledTools\": [\n \"<string>\"\n ],\n \"language\": \"<string>\",\n \"preferredRegion\": \"<string>\"\n}"
response = http.request(request)
puts response.read_bodystring
required
The agent ID. Example:
agent_abc123object
Override welcome config for this session.
object
Override voice config for this session.
string[]
Override enabled tools for this session.
string
Language code for TTS/STT.
string
Preferred agent region:
"eu", "ap", or "us".Request
curl -X POST https://api.rapidcall.ai/api/agents/agent_abc123/start \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"language": "en",
"preferredRegion": "us"
}'
Response
{
"callId": "call_def456",
"roomName": "call-agent_abc123-x7k9m2",
"token": "eyJ0eXAiOiJKV1Qi...",
"wsUrl": "wss://rtc.rapidcall.ai",
"agent": {
"id": "agent_abc123",
"name": "Reception Bot"
},
"expectedAgentName": "rapidcall-agent",
"backchannelEnabled": false,
"callOptions": {
"maxCallDurationMinutes": 0,
"responsiveness": 0.95,
"interruptionSensitivity": 0.95
}
}
token and wsUrl to connect via the WebRTC SDK for browser-based calls.
Demo Call
For unauthenticated demo calls (rate-limited, no auth required):curl -X POST https://api.rapidcall.ai/api/demo/start \
-H "Content-Type: application/json" \
-d '{"voice": "friendly-female"}'
"default", "british-male", "friendly-female", "confident-male".
Response:
{
"wsUrl": "wss://rtc.rapidcall.ai",
"roomName": "call-demo-x7k9m2",
"token": "eyJ0eXAiOiJKV1Qi..."
}
- A payment method is required to start web test calls (demo calls are exempt).
- Suspended workspaces cannot start calls.
- The agent must have a non-empty prompt.
- Demo calls are limited to a maximum duration and concurrent call limit.
