Break Our AICrack the code in 60 seconds. Win a free website.
Try Now
Break Our AICrack the code in 60 seconds. Win a free website.
Try Now
REST API v1

Boltcall API Documentation

Integrate AI voice agents, calls, leads, and messaging into your apps with our simple REST API.

Get API Key

Quick Start

1

Get your API key

Generate a key from Settings → API Keys in your dashboard.

2

Make your first call

Use any HTTP client to call the API with your key.

3

Listen for events

Register webhooks to get real-time notifications.

bash
curl -X GET https://api.boltcall.org/v1/agents \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json"

Authentication

All API requests require a Bearer token in the Authorization header. Generate keys in your dashboard under Settings \u2192 API Keys.

http
Authorization: Bearer sk_live_abc123def456...

Live keys

Prefixed with sk_live_. Use in production. All actions are real.

Test keys

Prefixed with sk_test_. Safe for development. No calls are placed.

Keep your keys secure

Never expose API keys in client-side code or public repositories. Use environment variables and server-side requests.

Base URL & Rate Limits

text
https://api.boltcall.org/v1
PlanRate LimitBurst
Starter60 requests / minute10
Pro300 requests / minute50
Elite1,000 requests / minute200

Rate limit headers (X-RateLimit-Remaining, X-RateLimit-Reset) are included in every response.

Endpoint Reference

Complete list of available API endpoints organized by resource.

Agents

Create, configure, and manage your AI voice agents.

GET/v1/agents

List all agents in your workspace.

Query Parameters

NameTypeRequiredDescription
pageintegeroptionalPage number (default: 1)
limitintegeroptionalItems per page (default: 20, max: 100)

Response

json
{
  "data": [
    {
      "id": "agent_abc123",
      "name": "Front Desk Agent",
      "voice_id": "voice_sarah",
      "status": "active",
      "phone_number": "+1234567890",
      "created_at": "2025-01-15T08:30:00Z"
    }
  ],
  "meta": { "page": 1, "limit": 20, "total": 3 }
}
POST/v1/agents

Create a new AI agent.

Request Body

FieldTypeRequiredDescription
namestringrequiredDisplay name for the agent
voice_idstringrequiredVoice to use (see Voice Library)
greetingstringoptionalCustom greeting message
promptstringoptionalSystem prompt / persona instructions
knowledge_base_idstringoptionalLinked knowledge base ID

Response

json
{
  "id": "agent_def456",
  "name": "After-Hours Agent",
  "voice_id": "voice_james",
  "status": "active",
  "created_at": "2025-03-20T14:00:00Z"
}
PATCH/v1/agents/:agent_id

Update an existing agent.

Request Body

FieldTypeRequiredDescription
namestringoptionalUpdated display name
greetingstringoptionalUpdated greeting message
statusstringoptional"active" or "paused"

Response

json
{
  "id": "agent_def456",
  "name": "After-Hours Agent v2",
  "status": "active",
  "updated_at": "2025-03-21T10:00:00Z"
}
DELETE/v1/agents/:agent_id

Delete an agent. This cannot be undone.

Response

json
{ "deleted": true }

Calls

Access call history, recordings, and transcripts.

GET/v1/calls

List call records with optional filters.

Query Parameters

NameTypeRequiredDescription
agent_idstringoptionalFilter by agent
directionstringoptional"inbound" or "outbound"
fromstringoptionalISO 8601 start date
tostringoptionalISO 8601 end date
limitintegeroptionalItems per page (default: 20)

Response

json
{
  "data": [
    {
      "id": "call_xyz789",
      "agent_id": "agent_abc123",
      "direction": "inbound",
      "caller": "+1987654321",
      "duration_seconds": 142,
      "status": "completed",
      "sentiment": "positive",
      "recording_url": "https://api.boltcall.org/v1/calls/call_xyz789/recording",
      "transcript_url": "https://api.boltcall.org/v1/calls/call_xyz789/transcript",
      "created_at": "2025-03-20T09:15:00Z"
    }
  ],
  "meta": { "page": 1, "limit": 20, "total": 156 }
}
GET/v1/calls/:call_id

Get detailed information for a single call.

Response

json
{
  "id": "call_xyz789",
  "agent_id": "agent_abc123",
  "direction": "inbound",
  "caller": "+1987654321",
  "duration_seconds": 142,
  "status": "completed",
  "sentiment": "positive",
  "summary": "Caller requested appointment for Friday.",
  "tags": ["appointment", "new-customer"],
  "recording_url": "https://...",
  "transcript": [
    { "role": "agent", "text": "Hello, thanks for calling..." },
    { "role": "caller", "text": "Hi, I'd like to book..." }
  ],
  "created_at": "2025-03-20T09:15:00Z"
}
POST/v1/calls/outbound

Initiate an outbound call from an agent.

Request Body

FieldTypeRequiredDescription
agent_idstringrequiredAgent to place the call
tostringrequiredPhone number in E.164 format
contextstringoptionalBriefing context for the agent

Response

json
{
  "id": "call_out001",
  "status": "ringing",
  "agent_id": "agent_abc123",
  "to": "+1555000111",
  "created_at": "2025-03-20T14:30:00Z"
}

Leads

Manage leads captured from calls, forms, and ads.

GET/v1/leads

List all leads with filtering and sorting.

Query Parameters

NameTypeRequiredDescription
statusstringoptional"new", "contacted", "qualified", "converted"
sourcestringoptional"call", "sms", "form", "facebook", "google"
sortstringoptionalField to sort by (default: created_at)
limitintegeroptionalItems per page (default: 20)

Response

json
{
  "data": [
    {
      "id": "lead_001",
      "name": "Jane Smith",
      "phone": "+1555123456",
      "email": "jane@example.com",
      "status": "new",
      "source": "call",
      "score": 85,
      "tags": ["high-intent", "dental-cleaning"],
      "created_at": "2025-03-20T10:00:00Z"
    }
  ],
  "meta": { "page": 1, "limit": 20, "total": 42 }
}
POST/v1/leads

Create a lead manually.

Request Body

FieldTypeRequiredDescription
namestringrequiredFull name
phonestringoptionalPhone number (E.164)
emailstringoptionalEmail address
sourcestringoptionalLead source label
tagsstring[]optionalTags for segmentation

Response

json
{
  "id": "lead_002",
  "name": "John Doe",
  "status": "new",
  "created_at": "2025-03-20T11:30:00Z"
}

Messages

Send and receive SMS, WhatsApp, and email messages.

POST/v1/messages/sms

Send an SMS message.

Request Body

FieldTypeRequiredDescription
tostringrequiredRecipient phone number (E.164)
bodystringrequiredMessage content (max 1600 chars)
from_numberstringoptionalSender number (defaults to workspace number)

Response

json
{
  "id": "msg_sms001",
  "channel": "sms",
  "status": "sent",
  "to": "+1555000111",
  "created_at": "2025-03-20T15:00:00Z"
}
POST/v1/messages/whatsapp

Send a WhatsApp message.

Request Body

FieldTypeRequiredDescription
tostringrequiredRecipient phone number (E.164)
templatestringrequiredApproved template name
variablesobjectoptionalTemplate variable values

Response

json
{
  "id": "msg_wa001",
  "channel": "whatsapp",
  "status": "sent",
  "to": "+1555000111",
  "created_at": "2025-03-20T15:05:00Z"
}
GET/v1/messages

List message history across all channels.

Query Parameters

NameTypeRequiredDescription
channelstringoptional"sms", "whatsapp", or "email"
lead_idstringoptionalFilter by lead
limitintegeroptionalItems per page (default: 20)

Response

json
{
  "data": [
    {
      "id": "msg_sms001",
      "channel": "sms",
      "direction": "outbound",
      "to": "+1555000111",
      "body": "Thanks for calling! Your appointment is confirmed.",
      "status": "delivered",
      "created_at": "2025-03-20T15:00:00Z"
    }
  ],
  "meta": { "page": 1, "limit": 20, "total": 89 }
}

Appointments

Manage appointments booked by your AI agents.

GET/v1/appointments

List all appointments.

Query Parameters

NameTypeRequiredDescription
statusstringoptional"upcoming", "completed", "cancelled"
agent_idstringoptionalFilter by booking agent
fromstringoptionalISO 8601 start date
tostringoptionalISO 8601 end date

Response

json
{
  "data": [
    {
      "id": "apt_001",
      "lead_id": "lead_001",
      "agent_id": "agent_abc123",
      "title": "Dental Cleaning",
      "start_time": "2025-03-25T10:00:00Z",
      "end_time": "2025-03-25T11:00:00Z",
      "status": "upcoming",
      "created_at": "2025-03-20T09:20:00Z"
    }
  ],
  "meta": { "page": 1, "limit": 20, "total": 12 }
}
DELETE/v1/appointments/:appointment_id

Cancel an appointment.

Response

json
{ "id": "apt_001", "status": "cancelled" }

Webhooks

Subscribe to real-time events from your workspace.

GET/v1/webhooks

List all registered webhook endpoints.

Response

json
{
  "data": [
    {
      "id": "wh_001",
      "url": "https://yourapp.com/hooks/boltcall",
      "events": ["call.completed", "lead.created"],
      "status": "active",
      "created_at": "2025-02-10T12:00:00Z"
    }
  ]
}
POST/v1/webhooks

Register a new webhook endpoint.

Request Body

FieldTypeRequiredDescription
urlstringrequiredHTTPS endpoint URL
eventsstring[]requiredEvent types to subscribe to
secretstringoptionalSigning secret for verification

Response

json
{
  "id": "wh_002",
  "url": "https://yourapp.com/hooks/boltcall",
  "events": ["call.completed", "lead.created", "appointment.booked"],
  "status": "active",
  "secret": "whsec_abc123...",
  "created_at": "2025-03-20T16:00:00Z"
}
DELETE/v1/webhooks/:webhook_id

Remove a webhook subscription.

Response

json
{ "deleted": true }

Analytics

Retrieve usage metrics and performance analytics.

GET/v1/analytics/overview

Get a summary of key metrics for a date range.

Query Parameters

NameTypeRequiredDescription
fromstringrequiredISO 8601 start date
tostringrequiredISO 8601 end date

Response

json
{
  "period": { "from": "2025-03-01", "to": "2025-03-31" },
  "calls": { "total": 487, "answered": 472, "missed": 15 },
  "leads": { "captured": 89, "qualified": 34, "converted": 12 },
  "messages": { "sent": 312, "delivered": 308 },
  "appointments": { "booked": 56, "completed": 48, "cancelled": 8 },
  "avg_response_time_seconds": 4.2
}
GET/v1/analytics/usage

Get token and minute usage for billing period.

Response

json
{
  "billing_period": { "from": "2025-03-01", "to": "2025-03-31" },
  "minutes_used": 1243,
  "minutes_limit": 2000,
  "sms_sent": 312,
  "sms_limit": 500,
  "api_calls": 4521
}

Webhook Events

Subscribe to these events to receive real-time POST requests at your webhook URL. Each payload includes an event field and a data object with the full resource.

EventDescription
call.startedAn inbound or outbound call has started
call.completedA call has ended (includes transcript & recording URLs)
call.missedAn inbound call was not answered
lead.createdA new lead was captured
lead.updatedLead status or details were changed
appointment.bookedAn appointment was scheduled
appointment.cancelledAn appointment was cancelled
message.receivedAn inbound SMS or WhatsApp message arrived
message.deliveredAn outbound message was delivered

Example webhook payload

json
{
  "event": "call.completed",
  "timestamp": "2025-03-20T09:17:22Z",
  "data": {
    "id": "call_xyz789",
    "agent_id": "agent_abc123",
    "direction": "inbound",
    "caller": "+1987654321",
    "duration_seconds": 142,
    "status": "completed",
    "sentiment": "positive",
    "summary": "Caller requested appointment for Friday.",
    "recording_url": "https://api.boltcall.org/v1/calls/call_xyz789/recording"
  }
}

Error Codes

All errors follow a consistent structure with an HTTP status code and a JSON body.

json
{
  "error": {
    "code": "invalid_api_key",
    "message": "The API key provided is invalid or expired.",
    "status": 401
  }
}
StatusCodeDescription
400bad_requestThe request body is malformed or missing required fields.
401invalid_api_keyAPI key is missing, invalid, or expired.
403forbiddenYour key does not have permission for this resource.
404not_foundThe requested resource does not exist.
409conflictThe resource already exists or has a conflicting state.
422validation_errorRequest data failed validation. Check the error message.
429rate_limitedToo many requests. Back off and retry with exponential delay.
500internal_errorSomething went wrong on our end. Contact support if it persists.

SDKs & Libraries

Node.js

npm install @boltcall/sdk

Python

pip install boltcall

cURL

Works out of the box

Node.js example

javascript
import Boltcall from '@boltcall/sdk';

const client = new Boltcall({ apiKey: process.env.BOLTCALL_API_KEY });

// List agents
const agents = await client.agents.list();
console.log(agents.data);

// Initiate an outbound call
const call = await client.calls.create({
  agent_id: 'agent_abc123',
  to: '+1555000111',
  context: 'Follow up on dental cleaning inquiry',
});
console.log('Call started:', call.id);

Ready to integrate?

Get your API key and start building with Boltcall in minutes. Free tier includes 100 API calls per day.

AboutPricingContact
AboutPricingContact