Assistants
Create an assistant
POST/assistants
Start from a template (receptionist, scheduler, lead_qualifier, support or blank), or send a full config, which overrides the template. See Build an assistant for what each setting does.
#Request body
namestringdefault ""- ≤ 120 chars
templatestringdefault "receptionist"- receptionist | scheduler | lead_qualifier | support | blank
configobject- Full configuration; overrides the template
Show 17 fields
first_message_mode"assistant_first" | "wait_for_user" | "model_generated"default "assistant_first"first_messagestringdefault ""- ≤ 1000 chars
system_promptstringdefault ""- ≤ 30000 chars
business_contextbooleandefault truelanguagestringdefault "en"- ≤ 16 chars
mode"standard" | "live"default "standard"live_voicestringdefault "marin"modelobjectShow 8 fields
provider"openai" | "custom"default "openai"modelstringdefault "gpt-5.6-luna"- ≤ 80 chars
temperaturenumberdefault 0.4- min 0, max 1.5
max_tokensintegerdefault 300- min 40, max 2000
custom_urlstringdefault ""- ≤ 300 chars
custom_key_setbooleandefault falseprioritybooleandefault trueracebooleandefault true
transcriberobjectShow 5 fields
provider"deepgram" | "openai"default "deepgram"modelstringdefault "flux-general-en"- ≤ 60 chars
keytermsarray of stringeot_thresholdnumberdefault 0.7- min 0.5, max 0.9
eagerbooleandefault true
voiceobjectShow 2 fields
voice_idstringdefault ""- ≤ 80 chars
speednumberdefault 1- min 0.7, max 1.2
builtinobjectShow 7 fields
bookingbooleandefault truemessagesbooleandefault truetransferbooleandefault truesmsbooleandefault truepayment_linksbooleandefault trueknowledgebooleandefault trueend_callbooleandefault true
tool_idsarray of integerknowledge_idsarray of integeranalysisobjectShow 4 fields
summary_promptstringdefault ""- ≤ 2000 chars
success_rubricstringdefault ""- ≤ 2000 chars
success_scale"pass_fail" | "score_10" | "descriptive"default "score_10"structuredarray of StructuredField
advancedobjectShow 14 fields
max_duration_sintegerdefault 600- min 30, max 3600
silence_timeout_sintegerdefault 12- min 5, max 120
idle_messagesarray of stringidle_maxintegerdefault 2- min 1, max 5
end_call_messagestringdefault ""- ≤ 300 chars
end_call_phrasesarray of stringrecordingbooleandefault truerecording_noticebooleandefault trueinterrupt_min_wordsintegerdefault 1- min 1, max 5
background"off" | "office"default "off"voicemail_detectionbooleandefault truevoicemail_messagestringdefault ""- ≤ 600 chars
server_urlstringdefault ""- ≤ 500 chars
hipaabooleandefault false
variablesobjectworkflow_idinteger
#Example request
curl -X POST https://app.bluepenguin.io/api/v1/assistants \
-H "Authorization: Bearer $BLUEPENGUIN_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Front desk",
"template": "receptionist"
}'const r = await fetch('https://app.bluepenguin.io/api/v1/assistants', {
method: 'POST',
headers: {
authorization: `Bearer ${process.env.BLUEPENGUIN_KEY}`,
'content-type': 'application/json',
},
body: JSON.stringify({
"name": "Front desk",
"template": "receptionist"
}),
})
const data = await r.json()import os, requests
r = requests.post(
"https://app.bluepenguin.io/api/v1/assistants",
headers={"Authorization": f"Bearer {os.environ['BLUEPENGUIN_KEY']}"},
json={
"name": "Front desk",
"template": "receptionist"
},
)
data = r.json()#Example response
200 OK
{
"id": 12,
"name": "Front desk",
"is_default": true,
"created_at": "2026-09-30T10:12:00Z",
"updated_at": "2026-10-02T08:40:11Z",
"config": {
"first_message_mode": "assistant_first",
"first_message": "Thanks for calling Brightside Dental, this is Ava.",
"system_prompt": "You are Ava…",
"language": "en",
"mode": "standard",
"voice": {
"voice_id": "cartesia:…",
"speed": 1
},
"builtin": {
"booking": true,
"messages": true,
"transfer": true,
"sms": true,
"payment_links": true,
"knowledge": true,
"end_call": true
},
"…": "…"
}
}#Errors
| Status | When |
|---|---|
401 | Missing or invalid API key. |
422 | A parameter or field is invalid; the reply lists which. |
429 | More than 240 requests a minute on this key. |