Agents API

Agents are AI voice agents that handle conversations. Each agent has configurable voice, personality, tools, and knowledge bases.

Base URL: https://kalem.me/api/v1/agents

The Agent Object

{
  "id": 1,
  "name": "Sales Agent",
  "description": "Handles outbound sales calls",
  "is_active": true,
  "model": "gpt-realtime",
  "instructions": "You are a friendly sales representative...",
  "timezone": "America/New_York",
  "language": "en",
  "tools": [],
  "knowledge_bases": [],
  "numbers": [],
  "created_at": "2025-01-15T10:30:00+00:00",
  "updated_at": "2025-01-15T10:30:00+00:00"
}

List Agents

GET /api/v1/agents

Retrieve a paginated list of agents for your account.

Query Parameters

ParameterTypeDescription
searchstringSearch agents by name
statusstringFilter by active or inactive
includestringComma-separated relationships: tools, knowledgeBases, numbers
per_pageintegerResults per page (default: 15, max: 100)

Example Request

curl -X GET "https://kalem.me/api/v1/agents?status=active&include=tools" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Accept: application/json"
const response = await fetch(
  'https://kalem.me/api/v1/agents?status=active&include=tools',
  { headers: { 'Authorization': 'Bearer YOUR_API_TOKEN', 'Accept': 'application/json' } }
);
const data = await response.json();
import requests

response = requests.get(
    'https://kalem.me/api/v1/agents',
    params={'status': 'active', 'include': 'tools'},
    headers={'Authorization': 'Bearer YOUR_API_TOKEN'}
)
data = response.json()
$response = Http::withToken('YOUR_API_TOKEN')
    ->get('https://kalem.me/api/v1/agents', [
        'status' => 'active',
        'include' => 'tools',
    ]);
$data = $response->json();

Create Agent

POST /api/v1/agents

Request Body Parameters

ParameterTypeRequiredDescription
namestringRequiredAgent name (max 255 characters)
descriptionstringOptionalAgent description
modelstringOptionalAI model: gpt-realtime, gpt-realtime-mini, gpt-realtime-1.5
instructionsstringOptionalSystem instructions for the agent
timezonestringOptionalTimezone (e.g., America/New_York)
languagestringOptionalLanguage code (e.g., en, es)

Example Request

curl -X POST https://kalem.me/api/v1/agents \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Sales Agent",
    "model": "gpt-realtime",
    "instructions": "You are a friendly sales representative.",
    "language": "en"
  }'
const response = await fetch('https://kalem.me/api/v1/agents', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_TOKEN',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    name: 'Sales Agent',
    model: 'gpt-realtime',
    instructions: 'You are a friendly sales representative.',
  }),
});
const data = await response.json();
import requests

response = requests.post(
    'https://kalem.me/api/v1/agents',
    json={
        'name': 'Sales Agent',
        'model': 'gpt-realtime',
        'instructions': 'You are a friendly sales representative.',
    },
    headers={'Authorization': 'Bearer YOUR_API_TOKEN'}
)
data = response.json()
$response = Http::withToken('YOUR_API_TOKEN')
    ->post('https://kalem.me/api/v1/agents', [
        'name' => 'Sales Agent',
        'model' => 'gpt-realtime',
        'instructions' => 'You are a friendly sales representative.',
    ]);
$data = $response->json();

Get Agent

GET /api/v1/agents/{id}

Retrieve a single agent by ID. Use the include query parameter to load relationships.

Example Request

curl -X GET "https://kalem.me/api/v1/agents/1?include=tools,knowledgeBases,numbers" \
  -H "Authorization: Bearer YOUR_API_TOKEN"

Update Agent

PUT /api/v1/agents/{id}

Update an agent. Only include the fields you want to change — partial updates are supported.

Example Request

curl -X PUT https://kalem.me/api/v1/agents/1 \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "Updated Agent"}'

Delete Agent

DELETE /api/v1/agents/{id}

Soft-delete an agent. The agent will no longer be available for new calls.

Example Request

curl -X DELETE https://kalem.me/api/v1/agents/1 \
  -H "Authorization: Bearer YOUR_API_TOKEN"

Success Response

{
  "message": "Agent deleted successfully."
}