POST
/
v1
/
agents
curl --request POST \
  --url https://api.bland.ai/v1/agents \
  --header 'Content-Type: application/json' \
  --header 'authorization: <authorization>' \
  --data '{
  "prompt": "<string>",
  "voice": "<string>",
  "analysis_schema": {},
  "metadata": {},
  "pathway_id": "<string>",
  "language": "<string>",
  "model": "<string>",
  "first_sentence": "<string>",
  "tools": [
    {}
  ],
  "dynamic_data": {},
  "interruption_threshold": 123,
  "keywords": [
    "<string>"
  ],
  "max_duration": {}
}'
{
  "agent": {
        "agent_id": "2c565dc7-f41f-43db-a99f-e4c8ba9d7d18",
        "webhook": null,
        "dynamic_data": null,
        "interruption_threshold": null,
        "first_sentence": null,
        "model": "enhanced",
        "voice_settings": null,
        "voice": "maya",
        "prompt": "...",
        "temperature": null,
        "max_duration": 30,
        "language": "ENG",
        "tools": null
  }
}

Headers

authorization
string
required

Your API key for authentication.

Example web call usage (client side):

import { BlandWebClient } from 'bland-client-js-sdk';

const agentId = 'YOUR-AGENT-ID';
const sessionToken = 'YOUR-SESSION-TOKEN';


document.addEventListener('DOMContentLoaded', async () => {
    document.getElementById('btn').addEventListener('click', async () => {
        const blandClient = new BlandWebClient(
            agentId,
            sessionToken
        );
        await blandClient.initConversation({
            sampleRate: 44100,
        });
    });
});

Body

prompt
string
required

Provide instructions, relevant information, and examples of the ideal conversation flow.

voice
string

Set your agent’s voice - all available voices can be found with the List Voices endpoint.

analysis_schema
object

Define a JSON schema for how you want to get information about the call - information like email addresses, names, appointment times or any other type of custom data.

In the webhook response or whenever you retrieve call data later, you’ll get the data you defined back under analysis.

For example, if you wanted to retrieve this information from the call:

"analysis_schema": {
  "email_address": "email",
  "first_name": "string",
  "last_name": "string",
  "wants_to_book_appointment": "boolean",
  "appointment_time": "YYYY-MM-DD HH:MM:SS"
}

You would get it filled out like this in your webhook once the call completes:

"analysis": {
  "email_address": "johndoe@gmail.com",
  "first_name": "John",
  "last_name": "Doe",
  "wants_to_book_appointment": true,
  "appointment_time": "2024-01-01 12:00:00"
}
metadata
object

Add any additional information you want to associate with the call. This can be useful for tracking or categorizing calls.

pathway_id
string

Set the pathway that your agent will follow. This will override the prompt field, so there is no need to pass the ‘prompt’ field if you are setting a pathway.

Warning: Setting a pathway will set the following fields to null / their default value - prompt, first_sentence, model, dynamic_data, tools

Set to null or an empty string to clear the pathway.

language
string
default: "ENG"

Select a supported language of your choice. Optimizes every part of our API for that language - transcription, speech, and other inner workings.

Supported Languages and their codes:

  • English: ENG
  • Spanish: ESP
  • French: FRE
  • Polish: POL
  • German: GER
  • Italian: ITA
  • Brazilian Portuguese: PBR
  • Portuguese: POR
model
string
default: "enhanced"

Select a model to use for your call.

Options: base, turbo and enhanced.

In nearly all cases, enhanced is the best choice for now.

first_sentence
string

A phrase that your call will start with instead of a generating one on the fly. This works both with and without wait_for_greeting. Can be more than one sentence, but must be less than 200 characters.

To remove, set to null or an empty string.

tools
array

Interact with the real world through API calls.

Detailed tutorial here: Custom Tools

dynamic_data
object

Integrate data from external APIs into your agent’s knowledge.

Set to null or an empty string to clear dynamic data settings.

Detailed usage in the Send Call endpoint.

interruption_threshold
number
default: 100

Adjusts how patient the AI is when waiting for the user to finish speaking.

Lower values mean the AI will respond more quickly, while higher values mean the AI will wait longer before responding.

Recommended range: 50-200

  • 50: Extremely quick, back and forth conversation
  • 100: Balanced to respond at a natural pace
  • 200: Very patient, allows for long pauses and interruptions. Ideal for collecting detailed information.

Try to start with 100 and make small adjustments in increments of ~10 as needed for your use case.

keywords
string[]
default: "[]"

These words will be boosted in the transcription engine - recommended for proper nouns or words that are frequently mis-transcribed.

For example, if the word “Reece” is frequently transcribed as a homonym like “Reese” you could do this:

{
  "keywords": ["Reece"]
}

For stronger keyword boosts, you can place a colon then a boost factor after the word. The default boost factor is 2.

{
  "keywords": ["Reece:3"]
}
max_duration
integer (minutes)
default: 30

The maximum duration that calls to your agent can last before being automatically terminated.

Set to null to reset to default.

Response

status
string

Can be success or error.

call_id
string

A unique identifier for the call (present only if status is success).