Create Agent
curl --request POST \
--url https://api.rapidcall.ai/api/agents \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"promptDraft": "<string>",
"promptPublished": "<string>",
"welcome": {
"welcome.mode": "<string>",
"welcome.aiMessageMode": "<string>",
"welcome.aiMessageText": "<string>",
"welcome.aiDelaySeconds": 123
},
"voice": {
"voice.provider": "<string>",
"voice.model": "<string>",
"voice.voiceId": "<string>"
},
"llmModel": "<string>",
"language": "<string>",
"enabledTools": [
"<string>"
],
"toolConfigs": {},
"backgroundAudio": {},
"backchannelEnabled": true,
"knowledgeFolderIds": [
"<string>"
],
"maxCallSeconds": 123,
"defaultDynamicVariables": {},
"callSettings": {},
"fallbackVoice": {},
"fallbackLlmModel": "<string>",
"postCallDataExtraction": [
{}
],
"postCallExtractionModel": "<string>",
"webhookUrl": "<string>",
"agentType": "<string>",
"role": "<string>",
"mode": "<string>"
}
'import requests
url = "https://api.rapidcall.ai/api/agents"
payload = {
"name": "<string>",
"promptDraft": "<string>",
"promptPublished": "<string>",
"welcome": {
"welcome.mode": "<string>",
"welcome.aiMessageMode": "<string>",
"welcome.aiMessageText": "<string>",
"welcome.aiDelaySeconds": 123
},
"voice": {
"voice.provider": "<string>",
"voice.model": "<string>",
"voice.voiceId": "<string>"
},
"llmModel": "<string>",
"language": "<string>",
"enabledTools": ["<string>"],
"toolConfigs": {},
"backgroundAudio": {},
"backchannelEnabled": True,
"knowledgeFolderIds": ["<string>"],
"maxCallSeconds": 123,
"defaultDynamicVariables": {},
"callSettings": {},
"fallbackVoice": {},
"fallbackLlmModel": "<string>",
"postCallDataExtraction": [{}],
"postCallExtractionModel": "<string>",
"webhookUrl": "<string>",
"agentType": "<string>",
"role": "<string>",
"mode": "<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({
name: '<string>',
promptDraft: '<string>',
promptPublished: '<string>',
welcome: {
'welcome.mode': '<string>',
'welcome.aiMessageMode': '<string>',
'welcome.aiMessageText': '<string>',
'welcome.aiDelaySeconds': 123
},
voice: {
'voice.provider': '<string>',
'voice.model': '<string>',
'voice.voiceId': '<string>'
},
llmModel: '<string>',
language: '<string>',
enabledTools: ['<string>'],
toolConfigs: {},
backgroundAudio: {},
backchannelEnabled: true,
knowledgeFolderIds: ['<string>'],
maxCallSeconds: 123,
defaultDynamicVariables: {},
callSettings: {},
fallbackVoice: {},
fallbackLlmModel: '<string>',
postCallDataExtraction: [{}],
postCallExtractionModel: '<string>',
webhookUrl: '<string>',
agentType: '<string>',
role: '<string>',
mode: '<string>'
})
};
fetch('https://api.rapidcall.ai/api/agents', 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",
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([
'name' => '<string>',
'promptDraft' => '<string>',
'promptPublished' => '<string>',
'welcome' => [
'welcome.mode' => '<string>',
'welcome.aiMessageMode' => '<string>',
'welcome.aiMessageText' => '<string>',
'welcome.aiDelaySeconds' => 123
],
'voice' => [
'voice.provider' => '<string>',
'voice.model' => '<string>',
'voice.voiceId' => '<string>'
],
'llmModel' => '<string>',
'language' => '<string>',
'enabledTools' => [
'<string>'
],
'toolConfigs' => [
],
'backgroundAudio' => [
],
'backchannelEnabled' => true,
'knowledgeFolderIds' => [
'<string>'
],
'maxCallSeconds' => 123,
'defaultDynamicVariables' => [
],
'callSettings' => [
],
'fallbackVoice' => [
],
'fallbackLlmModel' => '<string>',
'postCallDataExtraction' => [
[
]
],
'postCallExtractionModel' => '<string>',
'webhookUrl' => '<string>',
'agentType' => '<string>',
'role' => '<string>',
'mode' => '<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"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"promptDraft\": \"<string>\",\n \"promptPublished\": \"<string>\",\n \"welcome\": {\n \"welcome.mode\": \"<string>\",\n \"welcome.aiMessageMode\": \"<string>\",\n \"welcome.aiMessageText\": \"<string>\",\n \"welcome.aiDelaySeconds\": 123\n },\n \"voice\": {\n \"voice.provider\": \"<string>\",\n \"voice.model\": \"<string>\",\n \"voice.voiceId\": \"<string>\"\n },\n \"llmModel\": \"<string>\",\n \"language\": \"<string>\",\n \"enabledTools\": [\n \"<string>\"\n ],\n \"toolConfigs\": {},\n \"backgroundAudio\": {},\n \"backchannelEnabled\": true,\n \"knowledgeFolderIds\": [\n \"<string>\"\n ],\n \"maxCallSeconds\": 123,\n \"defaultDynamicVariables\": {},\n \"callSettings\": {},\n \"fallbackVoice\": {},\n \"fallbackLlmModel\": \"<string>\",\n \"postCallDataExtraction\": [\n {}\n ],\n \"postCallExtractionModel\": \"<string>\",\n \"webhookUrl\": \"<string>\",\n \"agentType\": \"<string>\",\n \"role\": \"<string>\",\n \"mode\": \"<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")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"promptDraft\": \"<string>\",\n \"promptPublished\": \"<string>\",\n \"welcome\": {\n \"welcome.mode\": \"<string>\",\n \"welcome.aiMessageMode\": \"<string>\",\n \"welcome.aiMessageText\": \"<string>\",\n \"welcome.aiDelaySeconds\": 123\n },\n \"voice\": {\n \"voice.provider\": \"<string>\",\n \"voice.model\": \"<string>\",\n \"voice.voiceId\": \"<string>\"\n },\n \"llmModel\": \"<string>\",\n \"language\": \"<string>\",\n \"enabledTools\": [\n \"<string>\"\n ],\n \"toolConfigs\": {},\n \"backgroundAudio\": {},\n \"backchannelEnabled\": true,\n \"knowledgeFolderIds\": [\n \"<string>\"\n ],\n \"maxCallSeconds\": 123,\n \"defaultDynamicVariables\": {},\n \"callSettings\": {},\n \"fallbackVoice\": {},\n \"fallbackLlmModel\": \"<string>\",\n \"postCallDataExtraction\": [\n {}\n ],\n \"postCallExtractionModel\": \"<string>\",\n \"webhookUrl\": \"<string>\",\n \"agentType\": \"<string>\",\n \"role\": \"<string>\",\n \"mode\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.rapidcall.ai/api/agents")
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 \"name\": \"<string>\",\n \"promptDraft\": \"<string>\",\n \"promptPublished\": \"<string>\",\n \"welcome\": {\n \"welcome.mode\": \"<string>\",\n \"welcome.aiMessageMode\": \"<string>\",\n \"welcome.aiMessageText\": \"<string>\",\n \"welcome.aiDelaySeconds\": 123\n },\n \"voice\": {\n \"voice.provider\": \"<string>\",\n \"voice.model\": \"<string>\",\n \"voice.voiceId\": \"<string>\"\n },\n \"llmModel\": \"<string>\",\n \"language\": \"<string>\",\n \"enabledTools\": [\n \"<string>\"\n ],\n \"toolConfigs\": {},\n \"backgroundAudio\": {},\n \"backchannelEnabled\": true,\n \"knowledgeFolderIds\": [\n \"<string>\"\n ],\n \"maxCallSeconds\": 123,\n \"defaultDynamicVariables\": {},\n \"callSettings\": {},\n \"fallbackVoice\": {},\n \"fallbackLlmModel\": \"<string>\",\n \"postCallDataExtraction\": [\n {}\n ],\n \"postCallExtractionModel\": \"<string>\",\n \"webhookUrl\": \"<string>\",\n \"agentType\": \"<string>\",\n \"role\": \"<string>\",\n \"mode\": \"<string>\"\n}"
response = http.request(request)
puts response.read_bodyAgents
Create Agent
Create a new voice agent
POST
/
api
/
agents
Create Agent
curl --request POST \
--url https://api.rapidcall.ai/api/agents \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"promptDraft": "<string>",
"promptPublished": "<string>",
"welcome": {
"welcome.mode": "<string>",
"welcome.aiMessageMode": "<string>",
"welcome.aiMessageText": "<string>",
"welcome.aiDelaySeconds": 123
},
"voice": {
"voice.provider": "<string>",
"voice.model": "<string>",
"voice.voiceId": "<string>"
},
"llmModel": "<string>",
"language": "<string>",
"enabledTools": [
"<string>"
],
"toolConfigs": {},
"backgroundAudio": {},
"backchannelEnabled": true,
"knowledgeFolderIds": [
"<string>"
],
"maxCallSeconds": 123,
"defaultDynamicVariables": {},
"callSettings": {},
"fallbackVoice": {},
"fallbackLlmModel": "<string>",
"postCallDataExtraction": [
{}
],
"postCallExtractionModel": "<string>",
"webhookUrl": "<string>",
"agentType": "<string>",
"role": "<string>",
"mode": "<string>"
}
'import requests
url = "https://api.rapidcall.ai/api/agents"
payload = {
"name": "<string>",
"promptDraft": "<string>",
"promptPublished": "<string>",
"welcome": {
"welcome.mode": "<string>",
"welcome.aiMessageMode": "<string>",
"welcome.aiMessageText": "<string>",
"welcome.aiDelaySeconds": 123
},
"voice": {
"voice.provider": "<string>",
"voice.model": "<string>",
"voice.voiceId": "<string>"
},
"llmModel": "<string>",
"language": "<string>",
"enabledTools": ["<string>"],
"toolConfigs": {},
"backgroundAudio": {},
"backchannelEnabled": True,
"knowledgeFolderIds": ["<string>"],
"maxCallSeconds": 123,
"defaultDynamicVariables": {},
"callSettings": {},
"fallbackVoice": {},
"fallbackLlmModel": "<string>",
"postCallDataExtraction": [{}],
"postCallExtractionModel": "<string>",
"webhookUrl": "<string>",
"agentType": "<string>",
"role": "<string>",
"mode": "<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({
name: '<string>',
promptDraft: '<string>',
promptPublished: '<string>',
welcome: {
'welcome.mode': '<string>',
'welcome.aiMessageMode': '<string>',
'welcome.aiMessageText': '<string>',
'welcome.aiDelaySeconds': 123
},
voice: {
'voice.provider': '<string>',
'voice.model': '<string>',
'voice.voiceId': '<string>'
},
llmModel: '<string>',
language: '<string>',
enabledTools: ['<string>'],
toolConfigs: {},
backgroundAudio: {},
backchannelEnabled: true,
knowledgeFolderIds: ['<string>'],
maxCallSeconds: 123,
defaultDynamicVariables: {},
callSettings: {},
fallbackVoice: {},
fallbackLlmModel: '<string>',
postCallDataExtraction: [{}],
postCallExtractionModel: '<string>',
webhookUrl: '<string>',
agentType: '<string>',
role: '<string>',
mode: '<string>'
})
};
fetch('https://api.rapidcall.ai/api/agents', 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",
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([
'name' => '<string>',
'promptDraft' => '<string>',
'promptPublished' => '<string>',
'welcome' => [
'welcome.mode' => '<string>',
'welcome.aiMessageMode' => '<string>',
'welcome.aiMessageText' => '<string>',
'welcome.aiDelaySeconds' => 123
],
'voice' => [
'voice.provider' => '<string>',
'voice.model' => '<string>',
'voice.voiceId' => '<string>'
],
'llmModel' => '<string>',
'language' => '<string>',
'enabledTools' => [
'<string>'
],
'toolConfigs' => [
],
'backgroundAudio' => [
],
'backchannelEnabled' => true,
'knowledgeFolderIds' => [
'<string>'
],
'maxCallSeconds' => 123,
'defaultDynamicVariables' => [
],
'callSettings' => [
],
'fallbackVoice' => [
],
'fallbackLlmModel' => '<string>',
'postCallDataExtraction' => [
[
]
],
'postCallExtractionModel' => '<string>',
'webhookUrl' => '<string>',
'agentType' => '<string>',
'role' => '<string>',
'mode' => '<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"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"promptDraft\": \"<string>\",\n \"promptPublished\": \"<string>\",\n \"welcome\": {\n \"welcome.mode\": \"<string>\",\n \"welcome.aiMessageMode\": \"<string>\",\n \"welcome.aiMessageText\": \"<string>\",\n \"welcome.aiDelaySeconds\": 123\n },\n \"voice\": {\n \"voice.provider\": \"<string>\",\n \"voice.model\": \"<string>\",\n \"voice.voiceId\": \"<string>\"\n },\n \"llmModel\": \"<string>\",\n \"language\": \"<string>\",\n \"enabledTools\": [\n \"<string>\"\n ],\n \"toolConfigs\": {},\n \"backgroundAudio\": {},\n \"backchannelEnabled\": true,\n \"knowledgeFolderIds\": [\n \"<string>\"\n ],\n \"maxCallSeconds\": 123,\n \"defaultDynamicVariables\": {},\n \"callSettings\": {},\n \"fallbackVoice\": {},\n \"fallbackLlmModel\": \"<string>\",\n \"postCallDataExtraction\": [\n {}\n ],\n \"postCallExtractionModel\": \"<string>\",\n \"webhookUrl\": \"<string>\",\n \"agentType\": \"<string>\",\n \"role\": \"<string>\",\n \"mode\": \"<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")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"promptDraft\": \"<string>\",\n \"promptPublished\": \"<string>\",\n \"welcome\": {\n \"welcome.mode\": \"<string>\",\n \"welcome.aiMessageMode\": \"<string>\",\n \"welcome.aiMessageText\": \"<string>\",\n \"welcome.aiDelaySeconds\": 123\n },\n \"voice\": {\n \"voice.provider\": \"<string>\",\n \"voice.model\": \"<string>\",\n \"voice.voiceId\": \"<string>\"\n },\n \"llmModel\": \"<string>\",\n \"language\": \"<string>\",\n \"enabledTools\": [\n \"<string>\"\n ],\n \"toolConfigs\": {},\n \"backgroundAudio\": {},\n \"backchannelEnabled\": true,\n \"knowledgeFolderIds\": [\n \"<string>\"\n ],\n \"maxCallSeconds\": 123,\n \"defaultDynamicVariables\": {},\n \"callSettings\": {},\n \"fallbackVoice\": {},\n \"fallbackLlmModel\": \"<string>\",\n \"postCallDataExtraction\": [\n {}\n ],\n \"postCallExtractionModel\": \"<string>\",\n \"webhookUrl\": \"<string>\",\n \"agentType\": \"<string>\",\n \"role\": \"<string>\",\n \"mode\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.rapidcall.ai/api/agents")
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 \"name\": \"<string>\",\n \"promptDraft\": \"<string>\",\n \"promptPublished\": \"<string>\",\n \"welcome\": {\n \"welcome.mode\": \"<string>\",\n \"welcome.aiMessageMode\": \"<string>\",\n \"welcome.aiMessageText\": \"<string>\",\n \"welcome.aiDelaySeconds\": 123\n },\n \"voice\": {\n \"voice.provider\": \"<string>\",\n \"voice.model\": \"<string>\",\n \"voice.voiceId\": \"<string>\"\n },\n \"llmModel\": \"<string>\",\n \"language\": \"<string>\",\n \"enabledTools\": [\n \"<string>\"\n ],\n \"toolConfigs\": {},\n \"backgroundAudio\": {},\n \"backchannelEnabled\": true,\n \"knowledgeFolderIds\": [\n \"<string>\"\n ],\n \"maxCallSeconds\": 123,\n \"defaultDynamicVariables\": {},\n \"callSettings\": {},\n \"fallbackVoice\": {},\n \"fallbackLlmModel\": \"<string>\",\n \"postCallDataExtraction\": [\n {}\n ],\n \"postCallExtractionModel\": \"<string>\",\n \"webhookUrl\": \"<string>\",\n \"agentType\": \"<string>\",\n \"role\": \"<string>\",\n \"mode\": \"<string>\"\n}"
response = http.request(request)
puts response.read_bodystring
required
Agent display name (max 60 characters).
string
Draft system prompt that defines the agent’s personality, role, and behavior.
string
Published (live) system prompt. This is the prompt used during actual calls.
object
Welcome message configuration.
object
string
LLM model identifier. Examples:
"gpt-4o", "claude-sonnet-4-20250514", "gemini-2.0-flash".string
Language code (default:
"en").string[]
Tools the agent can use during conversations. Examples:
["end_call", "transfer_call"].object
Per-tool configuration (transfer numbers, Cal.com keys, etc.).
object
Background audio preset (e.g., office, cafe, restaurant).
boolean
Enable agent backchannel responses (e.g., “uh-huh”, “I see”).
string[]
Knowledge base folder IDs to attach to the agent.
number
Maximum call duration in seconds.
0 means unlimited.object
Default values for
{{variable}} placeholders in the prompt.object
Call-level settings (voice speed, volume, etc.).
object
Fallback voice config if the primary TTS provider fails.
string
Fallback LLM model if the primary model fails.
array
Fields to extract from calls via AI after the call ends.
string
LLM model to use for post-call data extraction.
string
URL to receive post-call webhook notifications.
string
"inbound" or "outbound".string
Agent role:
"reception", "booking", "sales", or "followup".string
Agent mode:
"pipeline", "native_audio", or "openai_realtime".Request
curl -X POST https://api.rapidcall.ai/api/agents \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Sales Bot",
"promptDraft": "You are a sales qualification agent...",
"welcome": {
"mode": "agent",
"aiMessageMode": "static",
"aiMessageText": "Hi! Thanks for calling. How can I help you today?"
},
"voice": {
"provider": "cartesia",
"model": "sonic-2",
"voiceId": "a0e99841-438c-4a64-b679-ae501e7d6091"
},
"llmModel": "gpt-4o",
"language": "en",
"enabledTools": ["end_call", "transfer_call"],
"agentType": "inbound",
"role": "reception"
}'
Response
{
"agent": {
"id": "agent_xyz789",
"workspaceId": "ws_abc",
"name": "Sales Bot",
"promptDraft": "You are a sales qualification agent...",
"promptPublished": "",
"publishedAt": null,
"welcome": {
"mode": "agent",
"aiMessageMode": "static",
"aiMessageText": "Hi! Thanks for calling. How can I help you today?"
},
"voice": {
"provider": "cartesia",
"model": "sonic-2",
"voiceId": "a0e99841-438c-4a64-b679-ae501e7d6091"
},
"language": "en",
"llmModel": "gpt-4o",
"enabledTools": ["end_call", "transfer_call"],
"toolConfigs": {},
"backgroundAudio": {},
"backchannelEnabled": false,
"agentType": "inbound",
"role": "reception",
"mode": "pipeline",
"createdAt": "2025-01-15T14:00:00Z",
"updatedAt": "2025-01-15T14:00:00Z"
}
}
