# API Keys
Source: https://boltcall.mintlify.app/account/api-keys
Create and manage API keys to authenticate your requests to the Boltcall REST API.
API keys authenticate your requests to the Boltcall REST API. Each key carries a set of resource permissions so you can grant only the access a particular integration needs.
Your full API key is shown **only once** — immediately after creation. Copy it to a secure location before closing the dialog. If you lose it, you must revoke the key and create a new one.
## Create an API key
In your dashboard, go to **Settings → API Keys**.
Click **Create API Key**.
Enter a descriptive name that identifies how the key will be used — for example, `Production Backend` or `CRM Integration`.
Choose an expiry date if you want the key to automatically deactivate after a set period. Leave blank for no expiry.
Select the resources and permission levels this key needs. You must grant at least one permission.
Click **Create Key**. Copy the full key from the confirmation dialog — it will not be shown again.
## Resource permissions
Each API key is scoped to specific resources. You can grant `read`, `write`, or both permissions per resource.
| Resource | Description |
| ---------------- | ----------------------------------------- |
| `calls` | Read/write access to call history |
| `leads` | Read/write access to lead data |
| `agents` | Read/write access to agent configuration |
| `analytics` | Read access to analytics data |
| `contacts` | Read/write access to contacts |
| `knowledge_base` | Read/write access to the knowledge base |
| `integrations` | Read/write access to integration settings |
**`read`** — allows GET requests to list and retrieve records for that resource.
**`write`** — allows POST, PATCH, and DELETE requests to create, modify, and remove records for that resource. Write access does not automatically include read; grant both if needed.
The `analytics` resource supports `read` only. Write access is not available for analytics data.
## Use a key in API requests
Include your API key as a Bearer token in the `Authorization` header of every request:
```http theme={null}
Authorization: Bearer YOUR_API_KEY
```
For example, using curl:
```bash theme={null}
curl https://api.boltcall.org/v1/leads \
-H "Authorization: Bearer YOUR_API_KEY"
```
See the [API authentication guide](/api/authentication) for full details on request formatting and error codes.
## Revoke a key
To permanently deactivate a key:
Go to **Settings → API Keys**.
Find the key in the **Active Keys** list and click the trash icon on the right.
Click **Revoke Key** in the confirmation dialog. Any application using this key loses access immediately.
Revoked keys appear in the **Revoked / Expired** section for audit purposes and cannot be reactivated.
## Security best practices
* **Never share keys publicly.** Do not commit API keys to source control or expose them in client-side JavaScript.
* **Use minimal permissions.** Grant only the resources and permission levels each integration actually requires.
* **Set an expiry date** for keys used in short-term integrations or shared environments.
* **Rotate keys regularly.** Revoke and replace keys periodically, especially after team member changes.
* **Monitor usage.** Each key displays usage counts for the last 24 hours, 7 days, and 30 days — review these if you suspect unauthorized access.
## Rate limits
Each API key has a rate limit of **60 requests per minute** by default. If your integration requires a higher limit, contact [support@boltcall.ai](mailto:support@boltcall.ai). See [Rate limits](/api/rate-limits) for more detail.
# Plans & Billing
Source: https://boltcall.mintlify.app/account/plans
Understand Boltcall's plans, token usage, and how to manage your subscription.
Boltcall offers four plans — Starter, Pro, Ultimate, and Enterprise — each designed to match where your business is today. You can upgrade, downgrade, or cancel any time from your dashboard.
## Plans at a glance
| | **Starter** | **Pro** | **Ultimate** | **Enterprise** |
| ------------------------------- | ----------- | ---------- | ------------ | -------------- |
| **Monthly price** | \$549/mo | \$897/mo | \$4,997/mo | Custom |
| **Annual price** | \$4,941/yr | \$8,073/yr | \$44,973/yr | Custom |
| **Tokens per month** | 1,000 | 3,000 | 10,000 | Custom |
| AI receptionist | ✓ | ✓ | ✓ | ✓ |
| Missed call text-back | ✓ | ✓ | ✓ | ✓ |
| Instant lead reply | ✓ | ✓ | ✓ | ✓ |
| Appointment reminders | ✓ | ✓ | ✓ | ✓ |
| Reports dashboard | ✓ | ✓ | ✓ | ✓ |
| Full lead follow-up system | — | ✓ | ✓ | ✓ |
| SMS conversations | — | ✓ | ✓ | ✓ |
| Automatic follow-ups after jobs | — | ✓ | ✓ | ✓ |
| Website chat widget | — | ✓ | ✓ | ✓ |
| Multiple locations | — | — | ✓ | ✓ |
| AI audits | — | — | ✓ | ✓ |
## What are tokens?
Tokens are the unit that measures your AI usage. Every time Boltcall's AI handles an interaction — answering a call, sending an SMS reply, following up with a lead, or processing a chat message — it consumes tokens. More complex or longer interactions consume more tokens.
Your token balance resets at the start of each billing period. You can monitor your current usage at any time in **Settings → Usage**.
If you approach your monthly token limit, Boltcall will notify you. Upgrading your plan immediately increases your token allocation.
## Plan details
Everything you need to start capturing and responding to leads: AI receptionist, missed call text-back, instant lead reply, appointment reminders, and a reports dashboard. Includes 1,000 tokens/mo.
All Starter features plus a full lead follow-up system, SMS conversations, automatic follow-ups after jobs, and the website chat widget. Includes 3,000 tokens/mo.
All Pro features plus support for multiple locations and AI audits. Built for businesses managing several service areas. Includes 10,000 tokens/mo.
Tailored solutions for larger organizations. Contact our sales team to discuss custom token limits, SLAs, and dedicated support.
## Annual discount
Paying annually saves approximately 10% compared to monthly billing. The annual prices are:
* **Starter**: $4,941/yr (vs. $6,588 billed monthly)
* **Pro**: $8,073/yr (vs. $10,764 billed monthly)
* **Ultimate**: $44,973/yr (vs. $59,964 billed monthly)
Switch to annual billing when you sign up or from **Settings → Plan & Billing** to lock in the savings for the year.
## Upgrading or downgrading
In your dashboard, go to **Settings → Plan & Billing**.
Review the available plans and click **Select** on the one you want.
You will be directed to the payment page to complete your subscription change. Upgrades take effect immediately.
Downgrading takes effect at the end of your current billing period. Your token allocation and features remain at the current level until then.
## Cancellation
To cancel your subscription, contact [support@boltcall.ai](mailto:support@boltcall.ai). Cancellations take effect at the end of your current billing period and your access continues until that date.
## Enterprise inquiries
For volume pricing, custom contracts, or dedicated onboarding, contact the sales team at [sales@boltcall.ai](mailto:sales@boltcall.ai) or visit the [contact page](https://boltcall.ai/contact).
# Team Members
Source: https://boltcall.mintlify.app/account/team-members
Invite team members to your Boltcall workspace and manage their roles and access.
You can invite your team to your Boltcall workspace so they can access the dashboard, manage leads, configure agents, and more. Each member is assigned a role that controls what they can see and do.
## Roles overview
Boltcall has five built-in roles. The **Owner** role is assigned automatically to the account creator and cannot be reassigned through the Members page.
| Role | Description |
| ----------- | ------------------------------------------------------------------------------------------------ |
| **Owner** | Full access, including billing and workspace deletion. Assigned to the account creator. |
| **Admin** | All features except billing management and workspace deletion. |
| **Manager** | Manage agents, leads, integrations, knowledge base, and view analytics. |
| **Agent** | View and handle assigned calls and chats. Read-only access to leads, agents, and knowledge base. |
| **Viewer** | Read-only access to analytics and reports. |
### Permissions by role
| Permission | Owner | Admin | Manager | Agent | Viewer |
| --------------------- | :---: | :---: | :-----: | :---: | :----: |
| View calls and chats | ✓ | ✓ | ✓ | ✓ | ✓ |
| Make calls / send SMS | ✓ | ✓ | ✓ | ✓ | — |
| View leads | ✓ | ✓ | ✓ | ✓ | ✓ |
| Manage leads | ✓ | ✓ | ✓ | — | — |
| Export leads | ✓ | ✓ | ✓ | — | — |
| View analytics | ✓ | ✓ | ✓ | — | ✓ |
| Export reports | ✓ | ✓ | ✓ | — | — |
| Manage agents | ✓ | ✓ | ✓ | — | — |
| Test agents | ✓ | ✓ | ✓ | — | — |
| Manage knowledge base | ✓ | ✓ | ✓ | — | — |
| Manage integrations | ✓ | ✓ | ✓ | — | — |
| General settings | ✓ | ✓ | — | — | — |
| Manage members | ✓ | ✓ | — | — | — |
| Manage roles | ✓ | ✓ | — | — | — |
| Manage API keys | ✓ | ✓ | — | — | — |
| View billing | ✓ | ✓ | ✓ | — | — |
| Manage billing | ✓ | — | — | — | — |
Only the Owner can change plans, update payment methods, or delete the workspace.
## Invite a member
In your dashboard, go to **Settings → Members**.
Click **Invite Member**.
Type the email address of the person you want to invite.
Choose the role that matches the level of access they need. You can change this later.
Click **Send Invite**. The member will receive an email with a link to accept the invitation and create their account.
Invited members appear in the members list with an **Invited** status badge until they accept.
## Member statuses
| Status | Meaning |
| ------------- | --------------------------------------------------- |
| **Active** | Member has accepted the invitation and can sign in. |
| **Invited** | Invitation email sent, not yet accepted. |
| **Pending** | Awaiting action (e.g. email verification). |
| **Suspended** | Access temporarily revoked. |
If a member has not accepted their invitation, you can resend it from the members list.
## Change a member's role
Go to **Settings → Members** and click **Edit** next to the member's name.
Choose a role from the dropdown.
Click **Save**. The change takes effect immediately.
## Remove a member
Go to **Settings → Members** and locate the member you want to remove.
Click the trash icon next to their name and confirm the action.
Removed members lose access to the workspace immediately. Their past activity is retained in the audit log.
You cannot remove the workspace Owner. Transfer ownership to another admin before removing the original owner account.
## Related pages
* [API Keys](/account/api-keys) — grant programmatic access with scoped permissions
* [Plans & Billing](/account/plans) — manage your subscription and token allocation
# Agents
Source: https://boltcall.mintlify.app/api/agents
Create, configure, and manage your AI voice agents via the Boltcall API.
Agents are the AI voice personas that answer calls, engage leads, and book appointments on behalf of your business. Each agent has a voice, a greeting, and an optional system prompt that shapes its behavior.
## List agents
Page number. Default: `1`.
Number of results per page. Default: `20`, max: `100`.
```bash cURL theme={null}
curl https://api.boltcall.org/v1/agents \
-H "Authorization: Bearer YOUR_API_KEY"
```
```javascript Node.js theme={null}
const response = await fetch('https://api.boltcall.org/v1/agents?page=1&limit=20', {
headers: { 'Authorization': 'Bearer YOUR_API_KEY' },
});
const { data, meta } = await response.json();
```
```python Python theme={null}
import requests
response = requests.get(
'https://api.boltcall.org/v1/agents',
params={'page': 1, 'limit': 20},
headers={'Authorization': 'Bearer YOUR_API_KEY'},
)
result = response.json()
```
```json Response theme={null}
{
"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 }
}
```
***
## Create an agent
Display name for the agent.
The voice to use. See the Voice Library in your dashboard for available IDs.
Custom greeting the agent speaks when a call connects.
System prompt or persona instructions that guide the agent's behavior.
ID of a knowledge base to link to this agent. See [Knowledge base](/dashboard/knowledge-base).
```bash cURL theme={null}
curl -X POST https://api.boltcall.org/v1/agents \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "After-Hours Agent",
"voice_id": "voice_james",
"greeting": "Thanks for calling! How can I help you today?",
"prompt": "You are a friendly receptionist for a dental practice..."
}'
```
```javascript Node.js theme={null}
const response = await fetch('https://api.boltcall.org/v1/agents', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
name: 'After-Hours Agent',
voice_id: 'voice_james',
greeting: 'Thanks for calling! How can I help you today?',
prompt: 'You are a friendly receptionist for a dental practice...',
}),
});
const agent = await response.json();
```
```python Python theme={null}
import requests
agent = requests.post(
'https://api.boltcall.org/v1/agents',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
json={
'name': 'After-Hours Agent',
'voice_id': 'voice_james',
'greeting': 'Thanks for calling! How can I help you today?',
'prompt': 'You are a friendly receptionist for a dental practice...',
},
).json()
```
```json Response theme={null}
{
"id": "agent_def456",
"name": "After-Hours Agent",
"voice_id": "voice_james",
"status": "active",
"created_at": "2025-03-20T14:00:00Z"
}
```
***
## Update an agent
Updates one or more fields on an existing agent. Only the fields you include are changed.
**Path parameter**
The ID of the agent to update.
**Body**
Updated display name.
Updated greeting message.
Set to `"active"` or `"paused"`. A paused agent will not answer calls.
```bash cURL theme={null}
curl -X PATCH https://api.boltcall.org/v1/agents/agent_def456 \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "After-Hours Agent v2",
"status": "active"
}'
```
```javascript Node.js theme={null}
const response = await fetch('https://api.boltcall.org/v1/agents/agent_def456', {
method: 'PATCH',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({ name: 'After-Hours Agent v2', status: 'active' }),
});
const updated = await response.json();
```
```python Python theme={null}
import requests
updated = requests.patch(
'https://api.boltcall.org/v1/agents/agent_def456',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
json={'name': 'After-Hours Agent v2', 'status': 'active'},
).json()
```
```json Response theme={null}
{
"id": "agent_def456",
"name": "After-Hours Agent v2",
"status": "active",
"updated_at": "2025-03-21T10:00:00Z"
}
```
***
## Delete an agent
Permanently deletes an agent. This cannot be undone.
**Path parameter**
The ID of the agent to delete.
Deleting an agent is irreversible. Any phone numbers assigned to the agent will be unlinked, and call history is retained but the agent can no longer be restored.
```bash cURL theme={null}
curl -X DELETE https://api.boltcall.org/v1/agents/agent_def456 \
-H "Authorization: Bearer YOUR_API_KEY"
```
```javascript Node.js theme={null}
await fetch('https://api.boltcall.org/v1/agents/agent_def456', {
method: 'DELETE',
headers: { 'Authorization': 'Bearer YOUR_API_KEY' },
});
```
```python Python theme={null}
import requests
requests.delete(
'https://api.boltcall.org/v1/agents/agent_def456',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
)
```
```json Response theme={null}
{ "deleted": true }
```
# Authentication
Source: https://boltcall.mintlify.app/api/authentication
Authenticate your requests to the Boltcall REST API using API keys.
All requests to the Boltcall API must include a valid API key. The API uses Bearer token authentication — pass your key in the `Authorization` header on every request.
**Base URL**
```
https://api.boltcall.org/v1
```
## Get an API key
Generate API keys from your dashboard under **Settings → API Keys**. See [API keys](/account/api-keys) for instructions on creating and managing keys.
## Send authenticated requests
Include your API key as a Bearer token in the `Authorization` header:
```bash cURL theme={null}
curl https://api.boltcall.org/v1/agents \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json"
```
```javascript Node.js theme={null}
const response = await fetch('https://api.boltcall.org/v1/agents', {
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
});
const data = await response.json();
```
```python Python theme={null}
import requests
response = requests.get(
'https://api.boltcall.org/v1/agents',
headers={
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
)
data = response.json()
```
Never expose API keys in client-side code or public repositories. Store them in environment variables and make API calls from your server.
## Key permissions
When creating an API key you choose which resources it can access and whether each resource allows `read` or `write` access. Available resources are: `calls`, `leads`, `agents`, `analytics`, `contacts`, `knowledge_base`, and `integrations`.
## Error responses
### 401 Unauthorized
Returned when the `Authorization` header is missing or the key is invalid or expired.
```json theme={null}
{
"error": {
"code": "invalid_api_key",
"message": "The API key provided is invalid or expired.",
"status": 401
}
}
```
### 403 Forbidden
Returned when the key is valid but lacks the required permission for the requested resource.
```json theme={null}
{
"error": {
"code": "forbidden",
"message": "Your API key does not have permission to access this resource.",
"status": 403
}
}
```
If you receive a 403, check the key's permission settings in **Settings → API Keys** and ensure the resource and permission level (`read` or `write`) are enabled.
# Calls
Source: https://boltcall.mintlify.app/api/calls
List call records, retrieve transcripts and recordings, and initiate outbound calls.
The Calls API gives you access to your complete call history — including transcripts, recordings, sentiment analysis, and AI-generated summaries — and lets you programmatically place outbound calls from any agent.
## List calls
Returns a paginated list of call records. Use query parameters to filter by agent, direction, or date range.
Filter results to calls handled by a specific agent.
Filter by call direction. Accepted values: `"inbound"` or `"outbound"`.
Return calls on or after this date and time (ISO 8601, e.g. `"2025-03-01T00:00:00Z"`).
Return calls on or before this date and time (ISO 8601).
Number of results per page. Default: `20`.
```bash cURL theme={null}
curl "https://api.boltcall.org/v1/calls?direction=inbound&limit=20" \
-H "Authorization: Bearer YOUR_API_KEY"
```
```javascript Node.js theme={null}
const params = new URLSearchParams({ direction: 'inbound', limit: '20' });
const response = await fetch(`https://api.boltcall.org/v1/calls?${params}`, {
headers: { 'Authorization': 'Bearer YOUR_API_KEY' },
});
const { data, meta } = await response.json();
```
```python Python theme={null}
import requests
response = requests.get(
'https://api.boltcall.org/v1/calls',
params={'direction': 'inbound', 'limit': 20},
headers={'Authorization': 'Bearer YOUR_API_KEY'},
)
result = response.json()
```
```json Response theme={null}
{
"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 a call
Returns full details for a single call, including the turn-by-turn transcript and AI summary.
**Path parameter**
The unique ID of the call to retrieve.
```bash cURL theme={null}
curl https://api.boltcall.org/v1/calls/call_xyz789 \
-H "Authorization: Bearer YOUR_API_KEY"
```
```javascript Node.js theme={null}
const response = await fetch('https://api.boltcall.org/v1/calls/call_xyz789', {
headers: { 'Authorization': 'Bearer YOUR_API_KEY' },
});
const call = await response.json();
```
```python Python theme={null}
import requests
call = requests.get(
'https://api.boltcall.org/v1/calls/call_xyz789',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
).json()
```
```json Response theme={null}
{
"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"
}
```
Unique call identifier.
ID of the agent that handled the call.
`"inbound"` or `"outbound"`.
Phone number of the caller in E.164 format.
Total call duration in seconds.
Call status: `"completed"`, `"missed"`, or `"failed"`.
AI-detected caller sentiment: `"positive"`, `"neutral"`, or `"negative"`.
AI-generated summary of the call.
Auto-applied tags based on call content.
URL to download the call recording (authenticated).
Turn-by-turn conversation. Each item has `role` (`"agent"` or `"caller"`) and `text`.
ISO 8601 timestamp when the call started.
***
## Initiate an outbound call
Places an outbound call from an agent to a specified phone number. The agent uses the optional `context` to brief itself before the call.
ID of the agent that will place the call.
Destination phone number in E.164 format (e.g. `"+15550001111"`).
Briefing context shown to the agent before it dials. Use this to provide lead details, appointment reminders, or campaign instructions.
Outbound calls are placed immediately on receiving the request. Ensure the agent is in `"active"` status before calling this endpoint.
```bash cURL theme={null}
curl -X POST https://api.boltcall.org/v1/calls/outbound \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"agent_id": "agent_abc123",
"to": "+15550001111",
"context": "Follow up on dental cleaning inquiry"
}'
```
```javascript Node.js theme={null}
const response = await fetch('https://api.boltcall.org/v1/calls/outbound', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
agent_id: 'agent_abc123',
to: '+15550001111',
context: 'Follow up on dental cleaning inquiry',
}),
});
const call = await response.json();
```
```python Python theme={null}
import requests
call = requests.post(
'https://api.boltcall.org/v1/calls/outbound',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
json={
'agent_id': 'agent_abc123',
'to': '+15550001111',
'context': 'Follow up on dental cleaning inquiry',
},
).json()
```
```json Response theme={null}
{
"id": "call_out001",
"status": "ringing",
"agent_id": "agent_abc123",
"to": "+15550001111",
"created_at": "2025-03-20T14:30:00Z"
}
```
Subscribe to the `call_completed` [webhook event](/api/webhooks) to receive the full call result when it ends.
# Leads
Source: https://boltcall.mintlify.app/api/leads
List, create, and update leads captured from calls, SMS, forms, and ad platforms.
Leads represent contacts that have engaged with your business through any channel — inbound calls, SMS, web forms, Facebook Lead Ads, or Google Ads. You can also create leads manually via the API to sync contacts from external systems.
## List leads
Returns a paginated list of leads. Filter by status or source to segment your pipeline.
Filter by lead status. Accepted values: `"new"`, `"contacted"`, `"qualified"`, `"converted"`.
Filter by the channel that captured the lead. Accepted values: `"call"`, `"sms"`, `"form"`, `"facebook"`, `"google"`.
Field to sort results by. Default: `"created_at"`.
Number of results per page. Default: `20`.
```bash cURL theme={null}
curl "https://api.boltcall.org/v1/leads?status=new&source=call&limit=20" \
-H "Authorization: Bearer YOUR_API_KEY"
```
```javascript Node.js theme={null}
const params = new URLSearchParams({ status: 'new', source: 'call', limit: '20' });
const response = await fetch(`https://api.boltcall.org/v1/leads?${params}`, {
headers: { 'Authorization': 'Bearer YOUR_API_KEY' },
});
const { data, meta } = await response.json();
```
```python Python theme={null}
import requests
response = requests.get(
'https://api.boltcall.org/v1/leads',
params={'status': 'new', 'source': 'call', 'limit': 20},
headers={'Authorization': 'Bearer YOUR_API_KEY'},
)
result = response.json()
```
```json Response theme={null}
{
"data": [
{
"id": "lead_001",
"name": "Jane Smith",
"phone": "+15551234567",
"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 }
}
```
Unique lead identifier.
Lead's full name.
Phone number in E.164 format.
Email address.
Current pipeline status: `"new"`, `"contacted"`, `"qualified"`, or `"converted"`.
Channel that captured the lead.
AI-generated lead score from 0–100 based on engagement signals.
Tags applied to the lead for segmentation.
ISO 8601 timestamp when the lead was created.
***
## Create a lead
Creates a lead manually. Useful for syncing contacts from a CRM or external form.
At least one of `phone` or `email` is recommended. A lead with neither cannot be contacted by an agent.
Full name of the lead.
Phone number in E.164 format (e.g. `"+15551234567"`).
Email address of the lead.
Label describing where the lead came from (e.g. `"crm-import"`, `"referral"`).
Array of tags to apply for segmentation (e.g. `["high-intent", "hvac-repair"]`).
```bash cURL theme={null}
curl -X POST https://api.boltcall.org/v1/leads \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "John Doe",
"phone": "+15559876543",
"email": "john@example.com",
"source": "crm-import",
"tags": ["hvac-repair"]
}'
```
```javascript Node.js theme={null}
const response = await fetch('https://api.boltcall.org/v1/leads', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
name: 'John Doe',
phone: '+15559876543',
email: 'john@example.com',
source: 'crm-import',
tags: ['hvac-repair'],
}),
});
const lead = await response.json();
```
```python Python theme={null}
import requests
lead = requests.post(
'https://api.boltcall.org/v1/leads',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
json={
'name': 'John Doe',
'phone': '+15559876543',
'email': 'john@example.com',
'source': 'crm-import',
'tags': ['hvac-repair'],
},
).json()
```
```json Response theme={null}
{
"id": "lead_002",
"name": "John Doe",
"status": "new",
"created_at": "2025-03-20T11:30:00Z"
}
```
***
## Update a lead
Updates one or more fields on an existing lead. Only the fields you include are changed.
**Path parameter**
The ID of the lead to update.
**Body** — pass any subset of the fields below:
Updated full name.
Updated phone number (E.164).
Updated email address.
Updated pipeline status: `"new"`, `"contacted"`, `"qualified"`, or `"converted"`.
Replaces the existing tag list entirely.
```bash cURL theme={null}
curl -X PATCH https://api.boltcall.org/v1/leads/lead_001 \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"status": "qualified",
"tags": ["high-intent", "dental-cleaning", "callback-requested"]
}'
```
```javascript Node.js theme={null}
const response = await fetch('https://api.boltcall.org/v1/leads/lead_001', {
method: 'PATCH',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
status: 'qualified',
tags: ['high-intent', 'dental-cleaning', 'callback-requested'],
}),
});
const updated = await response.json();
```
```python Python theme={null}
import requests
updated = requests.patch(
'https://api.boltcall.org/v1/leads/lead_001',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
json={
'status': 'qualified',
'tags': ['high-intent', 'dental-cleaning', 'callback-requested'],
},
).json()
```
```json Response theme={null}
{
"id": "lead_001",
"name": "Jane Smith",
"status": "qualified",
"tags": ["high-intent", "dental-cleaning", "callback-requested"],
"updated_at": "2025-03-21T09:00:00Z"
}
```
Subscribe to the `new_lead` [webhook event](/api/webhooks) to receive instant notifications when Boltcall captures a lead from a call or form, so you can trigger follow-up automation without polling this endpoint.
# Messages
Source: https://boltcall.mintlify.app/api/messages
Send SMS and WhatsApp messages, and retrieve message history across all channels.
The Messages API lets you send outbound SMS and WhatsApp messages to leads, and retrieve the full message history across all channels (SMS, WhatsApp, and email) for your workspace.
## Send an SMS
Sends an SMS message to a phone number. By default, the message is sent from your workspace's primary phone number.
Recipient phone number in E.164 format (e.g. `"+15550001111"`).
Message content. Maximum 1,600 characters. Messages longer than 160 characters are split into segments by the carrier.
Sender phone number to use. Must be a number registered in your workspace. Defaults to your workspace's primary number.
```bash cURL theme={null}
curl -X POST https://api.boltcall.org/v1/messages/sms \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "+15550001111",
"body": "Thanks for calling! Your appointment is confirmed for Friday at 10am."
}'
```
```javascript Node.js theme={null}
const response = await fetch('https://api.boltcall.org/v1/messages/sms', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
to: '+15550001111',
body: 'Thanks for calling! Your appointment is confirmed for Friday at 10am.',
}),
});
const message = await response.json();
```
```python Python theme={null}
import requests
message = requests.post(
'https://api.boltcall.org/v1/messages/sms',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
json={
'to': '+15550001111',
'body': 'Thanks for calling! Your appointment is confirmed for Friday at 10am.',
},
).json()
```
```json Response theme={null}
{
"id": "msg_sms001",
"channel": "sms",
"status": "sent",
"to": "+15550001111",
"created_at": "2025-03-20T15:00:00Z"
}
```
***
## Send a WhatsApp message
Sends a WhatsApp message using an approved message template. Templates must be pre-approved through your WhatsApp Business Account before use.
Recipient phone number in E.164 format.
The approved WhatsApp template name (e.g. `"appointment_reminder"`).
Key-value pairs used to fill template placeholders. Keys match the variable names defined in the template.
WhatsApp only allows outbound messages using pre-approved templates. Contact your account manager to set up templates, or manage them in **Integrations → WhatsApp**.
```bash cURL theme={null}
curl -X POST https://api.boltcall.org/v1/messages/whatsapp \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "+15550001111",
"template": "appointment_reminder",
"variables": {
"customer_name": "Jane Smith",
"appointment_time": "Friday at 10am"
}
}'
```
```javascript Node.js theme={null}
const response = await fetch('https://api.boltcall.org/v1/messages/whatsapp', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
to: '+15550001111',
template: 'appointment_reminder',
variables: {
customer_name: 'Jane Smith',
appointment_time: 'Friday at 10am',
},
}),
});
const message = await response.json();
```
```python Python theme={null}
import requests
message = requests.post(
'https://api.boltcall.org/v1/messages/whatsapp',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
json={
'to': '+15550001111',
'template': 'appointment_reminder',
'variables': {
'customer_name': 'Jane Smith',
'appointment_time': 'Friday at 10am',
},
},
).json()
```
```json Response theme={null}
{
"id": "msg_wa001",
"channel": "whatsapp",
"status": "sent",
"to": "+15550001111",
"created_at": "2025-03-20T15:05:00Z"
}
```
***
## List messages
Returns paginated message history across all channels. Filter by channel or by a specific lead.
Filter by messaging channel. Accepted values: `"sms"`, `"whatsapp"`, `"email"`.
Return only messages associated with a specific lead.
Number of results per page. Default: `20`.
```bash cURL theme={null}
curl "https://api.boltcall.org/v1/messages?channel=sms&limit=20" \
-H "Authorization: Bearer YOUR_API_KEY"
```
```javascript Node.js theme={null}
const params = new URLSearchParams({ channel: 'sms', limit: '20' });
const response = await fetch(`https://api.boltcall.org/v1/messages?${params}`, {
headers: { 'Authorization': 'Bearer YOUR_API_KEY' },
});
const { data, meta } = await response.json();
```
```python Python theme={null}
import requests
response = requests.get(
'https://api.boltcall.org/v1/messages',
params={'channel': 'sms', 'limit': 20},
headers={'Authorization': 'Bearer YOUR_API_KEY'},
)
result = response.json()
```
```json Response theme={null}
{
"data": [
{
"id": "msg_sms001",
"channel": "sms",
"direction": "outbound",
"to": "+15550001111",
"body": "Thanks for calling! Your appointment is confirmed.",
"status": "delivered",
"created_at": "2025-03-20T15:00:00Z"
}
],
"meta": { "page": 1, "limit": 20, "total": 89 }
}
```
Unique message identifier.
Messaging channel: `"sms"`, `"whatsapp"`, or `"email"`.
`"outbound"` (sent by Boltcall) or `"inbound"` (received from the contact).
Recipient phone number or email address.
Message text content.
Delivery status: `"sent"`, `"delivered"`, or `"failed"`.
ISO 8601 timestamp when the message was created.
Subscribe to the `new_lead` [webhook event](/api/webhooks) to receive real-time notifications when a new lead is captured, which includes the channel they contacted you through.
# Rate limits
Source: https://boltcall.mintlify.app/api/rate-limits
Understand Boltcall API rate limits and how to handle them gracefully.
Boltcall enforces rate limits per API key to ensure fair usage across all customers. Limits vary by plan.
## Limits by plan
| Plan | Rate limit |
| -------- | ----------------------- |
| Starter | 60 requests / minute |
| Pro | 300 requests / minute |
| Ultimate | 1,000 requests / minute |
## Rate limit headers
Every API response includes the following headers so you can monitor your current usage:
| Header | Description |
| ----------------------- | ----------------------------------------------------- |
| `X-RateLimit-Limit` | Maximum number of requests allowed per minute |
| `X-RateLimit-Remaining` | Number of requests remaining in the current window |
| `X-RateLimit-Reset` | Unix timestamp (seconds) when the limit window resets |
## 429 Too Many Requests
When you exceed the rate limit, the API returns a `429` status with the following body:
```json theme={null}
{
"error": {
"code": "rate_limited",
"message": "Too many requests. Back off and retry with exponential delay.",
"status": 429
}
}
```
Check the `X-RateLimit-Reset` header to determine when you can resume sending requests.
## Best practices
Implement exponential backoff when retrying after a 429. Start with a 1-second delay and double it on each subsequent retry, up to a maximum of 60 seconds.
* **Cache responses** — for read-heavy operations like listing agents or leads, cache results locally for 30–60 seconds rather than polling the API.
* **Use webhooks** — instead of polling for state changes (e.g., call completed, lead updated), subscribe to [webhook events](/api/webhooks) to receive push notifications.
* **Batch operations** — use pagination parameters (`limit`, `page`) to retrieve larger datasets in fewer requests.
* **Monitor headers** — track `X-RateLimit-Remaining` proactively and slow down before hitting zero.
### Exponential backoff example
```javascript Node.js theme={null}
async function fetchWithBackoff(url, options, maxRetries = 5) {
let delay = 1000;
for (let attempt = 0; attempt <= maxRetries; attempt++) {
const response = await fetch(url, options);
if (response.status !== 429) {
return response;
}
if (attempt === maxRetries) {
throw new Error('Rate limit exceeded — max retries reached');
}
await new Promise((resolve) => setTimeout(resolve, delay));
delay = Math.min(delay * 2, 60_000);
}
}
```
# Webhooks API
Source: https://boltcall.mintlify.app/api/webhooks
Register webhook endpoints to receive real-time event notifications from Boltcall.
Webhooks let your application react to Boltcall events in real time — new leads, completed calls, booked appointments, and more — without polling the API. Boltcall sends an HTTP `POST` request to your endpoint each time a subscribed event occurs.
For a UI-based setup guide, see [Integrations → Webhooks](/integrations/webhooks).
## Events
Each webhook subscription listens to a single trigger event:
| Event | Description |
| -------------------- | ------------------------------------------------------------- |
| `new_lead` | A new lead was captured from a call, SMS, or form |
| `missed_call` | An inbound call was not answered by the agent |
| `appointment_booked` | An appointment was scheduled by the agent |
| `call_completed` | A call ended — payload includes transcript and recording URLs |
| `review_received` | A new review was received |
## Payload structure
Every webhook payload follows the same structure:
```json Example payload theme={null}
{
"event": "call_completed",
"timestamp": "2025-03-20T09:17:22Z",
"data": {
"id": "call_xyz789",
"agent_id": "agent_abc123",
"direction": "inbound",
"caller": "+19876543210",
"duration_seconds": 142,
"status": "completed",
"sentiment": "positive",
"summary": "Caller requested appointment for Friday.",
"recording_url": "https://api.boltcall.org/v1/calls/call_xyz789/recording"
}
}
```
The `data` object contains the full resource that triggered the event (lead, call, appointment, etc.).
## Signature verification
Boltcall signs every webhook request with an `X-Boltcall-Signature` header so you can verify the payload came from Boltcall and was not tampered with.
The signature is an HMAC-SHA256 hex digest computed from the raw request body using the webhook's `secret` as the key.
Always verify the signature before processing a webhook payload. Skipping verification exposes your endpoint to forged requests.
```javascript Node.js theme={null}
import crypto from 'crypto';
function verifyBoltcallSignature(rawBody, secret, signature) {
const expected = crypto
.createHmac('sha256', secret)
.update(rawBody, 'utf8')
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(expected, 'hex'),
Buffer.from(signature, 'hex'),
);
}
// Express.js example
app.post('/hooks/boltcall', express.raw({ type: 'application/json' }), (req, res) => {
const signature = req.headers['x-boltcall-signature'];
const secret = process.env.BOLTCALL_WEBHOOK_SECRET;
if (!verifyBoltcallSignature(req.body, secret, signature)) {
return res.status(401).json({ error: 'Invalid signature' });
}
const payload = JSON.parse(req.body);
console.log('Verified event:', payload.event);
res.sendStatus(200);
});
```
Use `express.raw()` (not `express.json()`) to preserve the raw request body for signature verification. Parsing the body first changes the byte sequence and causes verification to fail.
***
## List webhooks
Returns all webhook endpoints registered in your workspace.
```bash cURL theme={null}
curl https://api.boltcall.org/v1/webhooks \
-H "Authorization: Bearer YOUR_API_KEY"
```
```javascript Node.js theme={null}
const response = await fetch('https://api.boltcall.org/v1/webhooks', {
headers: { 'Authorization': 'Bearer YOUR_API_KEY' },
});
const { data } = await response.json();
```
```python Python theme={null}
import requests
response = requests.get(
'https://api.boltcall.org/v1/webhooks',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
)
result = response.json()
```
```json Response theme={null}
{
"data": [
{
"id": "wh_001",
"name": "Lead notification",
"url": "https://yourapp.com/hooks/boltcall",
"trigger_event": "new_lead",
"is_active": true,
"created_at": "2025-02-10T12:00:00Z"
}
]
}
```
***
## Register a webhook
Creates a new webhook subscription.
Optional display name for the webhook (e.g. `"Zapier Lead Notification"`). For your reference only.
The HTTPS endpoint URL that Boltcall will POST events to. Must use HTTPS.
The event type to subscribe to. See the [events table](#events) for accepted values.
The `secret` is returned in full only at creation time. Copy and store it immediately in a secure location (e.g. your environment variables). You cannot retrieve it again from the API.
```bash cURL theme={null}
curl -X POST https://api.boltcall.org/v1/webhooks \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "New lead alert",
"url": "https://yourapp.com/hooks/boltcall",
"trigger_event": "new_lead"
}'
```
```javascript Node.js theme={null}
const response = await fetch('https://api.boltcall.org/v1/webhooks', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
name: 'New lead alert',
url: 'https://yourapp.com/hooks/boltcall',
trigger_event: 'new_lead',
}),
});
const webhook = await response.json();
// Save webhook.secret to your environment variables immediately
```
```python Python theme={null}
import requests
webhook = requests.post(
'https://api.boltcall.org/v1/webhooks',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
json={
'name': 'New lead alert',
'url': 'https://yourapp.com/hooks/boltcall',
'trigger_event': 'new_lead',
},
).json()
# Save webhook['secret'] to your environment variables immediately
```
```json Response theme={null}
{
"id": "wh_002",
"name": "New lead alert",
"url": "https://yourapp.com/hooks/boltcall",
"trigger_event": "new_lead",
"is_active": true,
"secret": "whsec_abc123...",
"created_at": "2025-03-20T16:00:00Z"
}
```
***
## Delete a webhook
Removes a webhook subscription. Boltcall will stop sending events to the registered URL immediately.
**Path parameter**
The ID of the webhook to delete.
```bash cURL theme={null}
curl -X DELETE https://api.boltcall.org/v1/webhooks/wh_002 \
-H "Authorization: Bearer YOUR_API_KEY"
```
```javascript Node.js theme={null}
await fetch('https://api.boltcall.org/v1/webhooks/wh_002', {
method: 'DELETE',
headers: { 'Authorization': 'Bearer YOUR_API_KEY' },
});
```
```python Python theme={null}
import requests
requests.delete(
'https://api.boltcall.org/v1/webhooks/wh_002',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
)
```
```json Response theme={null}
{ "deleted": true }
```
## Retry behavior
Boltcall does not automatically retry failed webhook deliveries. If your endpoint returns a non-2xx status code or times out, the delivery is logged as failed. You can view delivery history in **Dashboard → Integrations → Webhooks** and use the test/replay feature to manually re-send a payload after resolving the issue.
Your endpoint should respond with `200 OK` as quickly as possible. Process the payload asynchronously (e.g. push to a queue) rather than doing heavy work synchronously during the HTTP request.
# AI agents
Source: https://boltcall.mintlify.app/dashboard/agents
Create and manage AI voice agents that answer inbound calls and make outbound calls on your behalf.
Agents are the AI voices that handle phone calls for your business. Each agent has its own voice, knowledge base, phone number, language, and call direction. You can have multiple agents for different purposes — for example, one that answers incoming calls and another that follows up with new leads.
Agents require the **Starter plan** or higher. Upgrade at [account/plans](/account/plans).
## Agent types
When creating an agent, choose the type that matches its purpose:
| Type | Direction | What it does |
| -------------------- | --------- | ------------------------------------------------- |
| Inbound receptionist | Inbound | Answers incoming calls — booking, FAQs, transfers |
| Speed to lead | Outbound | Calls new leads within minutes of form submission |
| Reactivation | Outbound | Re-engages past leads or dormant customers |
| Appointment reminder | Outbound | Confirms upcoming appointments by phone |
| Review request | Outbound | Asks satisfied customers for a Google review |
## Create an agent
You can start from scratch or use an industry template. Templates are available for HVAC, dental, real estate, legal, retail, healthcare, and beauty, with pre-built greetings and sample questions for each industry.
Go to **Dashboard → Agents** and click **Add Agent**, or choose **Start from Scratch** / **Browse Templates** if you have no agents yet.
Select the agent type that matches its purpose. Inbound agents answer calls; outbound agents make calls.
Enter a name for the agent. Callers do not hear this name — it is for your reference only.
Use the voice picker to browse available voices. Click the play button next to any voice to preview it before choosing.
Select one or more knowledge base folders. The agent uses documents in these folders to answer questions. If you have not created any folders yet, go to [Knowledge Base](/dashboard/knowledge-base) first.
Select a phone number from the dropdown. The agent will answer (or make) calls on this number. If you have no numbers yet, go to [Phone Numbers](/dashboard/phone-numbers) first.
Enter a fallback phone number. If a caller asks to speak with a person, or if the agent cannot handle the request, the call transfers to this number.
Select the language the agent speaks. Supported languages include English, Spanish, French, German, Italian, Portuguese, Chinese, Japanese, and Korean.
Click **Create Agent**. Your agent is active immediately.
You can change any agent setting after creation. Click the agent name in the list to open its detail page.
## Test your agent
From the agent list, each row has action icons:
* **Phone icon** — opens the Talk to Agent modal, which calls your phone so you can speak with the agent live
* **Chat icon** — opens the test chat modal, where you enter your phone number and receive a callback to test the agent
* **Refresh icon** — regenerates the agent's system prompt based on your current business profile
## Edit an agent
Click any agent in the list to open its detail page. From there you can update the name, voice, greeting message, system prompt, transfer phone number, and assigned knowledge base folders. Click **Save changes** when done.
## Pause or delete an agent
On the agent detail page, set the status to **inactive** to pause the agent without deleting it. To remove an agent permanently, use the options menu (three dots) in the agent list and select **Delete**.
Deleting an agent cannot be undone. The agent's call history is preserved, but the agent itself is removed.
## Agent tests
The **Agent Tests** tab on the Agents page lets you run automated test scenarios against your agents to verify they respond correctly before going live.
# Analytics
Source: https://boltcall.mintlify.app/dashboard/analytics
Track call volume, lead conversion, agent performance, and token usage across your Boltcall account.
The Analytics page gives you a real-time view of how your AI agents are performing. Use it to understand call trends, measure lead conversion, monitor response quality, and track your token consumption.
Full analytics — including 30-day and 90-day date ranges and trend charts — require the **Pro plan** or higher. See [account/plans](/account/plans) for details.
## Date range
At the top of the page, select the time window you want to analyse:
* **7 days** — rolling last 7 days (default)
* **30 days** — rolling last 30 days
* **90 days** — rolling last 90 days
* **Custom** — pick a specific start and end date
Click **Refresh** at any time to reload the latest data. Analytics data is also refreshed automatically every 5 minutes.
## Key metrics
### Primary KPIs
| Metric | What it measures |
| ---------------------- | --------------------------------------------------------------------------------- |
| **Total calls (24h)** | Number of calls handled by your agents in the last 24 hours |
| **Success rate** | Percentage of calls where the agent achieved its goal (booking, answer, transfer) |
| **Avg duration** | Average length of a call, in minutes and seconds |
| **SMS sent today** | Number of outbound SMS messages sent in the last 24 hours |
| **Total leads** | All leads captured across calls, chat, and forms |
| **Missed calls (24h)** | Calls that were not answered by an agent in the last 24 hours |
### Secondary metrics
| Metric | What it measures |
| ------------------- | -------------------------------------------------- |
| **Calls (7d)** | Total calls over the past 7 days |
| **Talk time today** | Total minutes your agents have been on calls today |
| **Active agents** | Number of agents currently in active status |
| **SMS received** | Inbound SMS messages received today |
| **Phone numbers** | Total phone numbers in your account |
### Token usage
The token usage card shows how your AI credits are being consumed:
| Metric | What it measures |
| ---------------------- | ----------------------------------------------------- |
| **Consumed today** | Tokens used in the current calendar day |
| **Consumed this week** | Tokens used since the start of the current week |
| **Remaining balance** | Tokens remaining in your account |
| **Monthly used** | Percentage of your monthly allocation consumed so far |
A progress bar visualizes how much of your monthly token allocation you have used.
## Activity breakdown
The activity breakdown card shows:
* **Callbacks** — total callbacks requested and how many are still pending
* **Chats** — total chat conversations and how many are currently active
* **Phone numbers** — a list of your active phone numbers
## Trend chart
The trend chart plots daily leads and bookings over your selected date range. This helps you spot patterns — for example, whether calls spike on certain days of the week or after a marketing campaign.
If the trend chart shows "No data yet", it means the daily metrics collector has not run since you signed up. Data typically appears within 24 hours of your first calls.
## Export
To export your analytics data, use the Boltcall API. The `/api/calls` and `/api/leads` endpoints return full records with date filters. See [api/calls](/api/calls) and [api/leads](/api/leads) for details.
# Knowledge base
Source: https://boltcall.mintlify.app/dashboard/knowledge-base
Add the business information your AI agents use to answer questions accurately.
The knowledge base is where you store the information your AI agents draw on when answering calls. When a caller asks about your services, prices, hours, or policies, the agent searches your knowledge base and uses that content to respond accurately.
## Folders
Documents are organized into folders. You can create multiple folders and assign different folders to different agents. For example, you might have a "General Info" folder shared across all agents and a "Sales Offers" folder assigned only to your outbound agent.
A **Default** folder is created automatically when you sign up. Agents created from templates are linked to your default folder.
## Document types
When adding a document to a folder, choose from three types:
| Type | What it does |
| -------- | ---------------------------------------------------- |
| **URL** | Boltcall scrapes the webpage and imports the content |
| **File** | Upload a PDF or document file |
| **Text** | Type or paste content directly |
## Add a document
Go to **Dashboard → Knowledge Base**.
Click the folder you want to add the document to. To create a new folder first, click **New Folder**, enter a name, and save.
Click **Add Document** and select **URL**, **File**, or **Text**.
* **URL** — paste the full web address (e.g. `https://yourbusiness.com/services`) and click **Import**
* **File** — drag and drop or browse to upload your PDF or document
* **Text** — enter a title, then type or paste the content into the editor
Click **Save**. The document is available to any agent linked to that folder immediately.
## Best practices
Structure your knowledge base around the questions callers actually ask. A well-organized knowledge base leads to more accurate, confident answers.
**Services and pricing**
List each service with its price or price range. Be specific — vague answers frustrate callers.
```text theme={null}
Emergency call-out — $150
Drain cleaning — $120
Hot water system replacement — from $2,500
Blocked toilet — $90–$140
```
**FAQs**
Write your most common questions and answers in a simple Q\&A format. Include one question and one answer per block.
```text theme={null}
Q: Do you offer emergency service?
A: Yes, we offer 24/7 emergency plumbing. Call us any time and we'll dispatch a technician.
Q: How quickly can you come out?
A: Same-day for emergencies, next-day for standard jobs in most areas.
Q: Do you offer free quotes?
A: Yes, all quotes are free with no obligation.
```
**Business hours**
State your hours clearly. Include after-hours coverage if your AI agent handles calls outside business hours.
```text theme={null}
Monday–Friday: 7 am – 6 pm
Saturday: 8 am – 4 pm
Sunday: Emergency calls only
After-hours: AI receptionist available 24/7
```
**Cancellation and deposit policies**
```text theme={null}
Cancellation: 24-hour notice required or a $50 fee applies
Deposit: 50% deposit required for jobs over $500
Rescheduling: Free with 12-hour notice
```
## Example: plumbing business
Here is a complete example knowledge base for a plumbing business.
**Services and prices**
```text theme={null}
Emergency call-out — $150 (any time, 24/7)
Drain cleaning — $120
Blocked toilet — $90–$140
Burst pipe repair — from $200
Hot water system replacement — from $2,500
Leak detection — $180
Tap replacement — $95
Pipe relining — custom quote
```
**FAQs**
```text theme={null}
Q: Do you offer emergency plumbing?
A: Yes. We respond to emergencies 24/7, including nights, weekends, and public holidays.
Q: What areas do you service?
A: We cover the greater metro area and surrounding suburbs within 30 km.
Q: Are your plumbers licensed?
A: Yes, all our plumbers are fully licensed and insured.
Q: Do you provide upfront pricing?
A: Yes. We quote before we start, so there are no surprises.
Q: Can I book online?
A: You can request a booking through our website or call us directly and we'll find a time that suits you.
```
Keep each document focused on one topic. An agent retrieves the most relevant documents for each question — short, focused documents tend to produce better answers than long, mixed ones.
# Dashboard overview
Source: https://boltcall.mintlify.app/dashboard/overview
A guide to navigating the Boltcall dashboard — layout, sidebar sections, and key metrics.
After logging in, you land on the Boltcall dashboard. The layout has two main areas: a sidebar on the left for navigation and a main content area on the right where each page loads.
## Sidebar navigation
The sidebar groups your workspace into four areas:
**Activity**
* **Dashboard** — home screen with setup guide and alerts
* **Leads** — all captured leads from calls, forms, and chat
* **Calls** — call log with recordings and transcripts
* **Messages** — SMS and chat conversations
**AI Receptionist**
* **AI Receptionist** — enable and configure your 24/7 call answering service
* **Agents** — create and manage your AI voice agents
* **Voice Library** — browse and preview available voices
* **Knowledge Base** — add the business information your agents use
* **Phone** — claim and manage phone numbers
* **Chat Widget** — configure the website chat widget
* **Analytics** — call volume, lead data, and performance metrics
**Engagement**
* **Reminders** — automated appointment reminder campaigns
* **Reputation** — review request campaigns
* **Instant Lead Response** — auto-call new leads within seconds
* **Calendar** — connect your booking calendar
* **SMS** — two-way SMS conversations
* **WhatsApp** — WhatsApp messaging
* **Email** — email follow-up sequences
**Workspace**
* **Integrations** — connect to your CRM, calendar, and other tools
* **Settings** — billing, team members, notifications, and business profile
## Dashboard home
The dashboard home shows a **Setup Guide** that tracks your onboarding progress. Each step links to the relevant page and awards tokens when completed. Steps include:
1. Create your first agent
2. Connect Cal.com
3. Set up AI Receptionist
4. Configure phone numbers
5. Set up your knowledge base
6. Test your agent
Once your first agent is active, a **Talk to Your Agent** button appears at the bottom of the setup guide. Click it and Boltcall calls your phone so you can test your AI receptionist live.
Below the setup guide, a **Feature Hub** shows the status of each feature you have enabled, and an **Alerts** panel surfaces any issues that need attention.
## Multi-location support
If your account has multiple locations, a location switcher appears in the top bar. Select a location to view and manage its agents, phone numbers, and analytics independently.
## Where to go next
Create and configure the AI voice agents that answer your calls.
Add the business information your agents use to answer questions.
Claim a local number or assign an existing number to an agent.
Track call volume, lead conversion, and agent performance.
# Phone numbers
Source: https://boltcall.mintlify.app/dashboard/phone-numbers
Claim a local phone number or port your existing number to Boltcall, then assign it to an AI agent.
Your AI agent needs a phone number to receive or make calls. You can claim a new local number directly from the dashboard, or port your existing business number to Boltcall so callers dial the same number they always have.
## Claim a new number
Go to **Dashboard → Phone** and click **Add Number**.
A modal opens showing available numbers. Enter an area code to filter results by location.
Browse the list and click the number you want. Boltcall shows the friendly name, locality, and region for each available number.
Confirm your selection. The number is added to your account immediately and appears in your phone numbers list.
Click the number in your list to open its settings panel. Under **Assigned agent**, select the agent that should handle calls on this number. Save your changes.
## How call routing works
When someone calls your Boltcall number:
1. The call is received by Boltcall and routed to the assigned agent.
2. The agent answers, greets the caller, and handles the conversation using your knowledge base.
3. If the caller asks to speak with a person — or if the agent cannot handle the request — the call transfers to the **human transfer phone number** configured on the agent.
4. The call is logged, transcribed, and stored under **Dashboard → Calls**.
Each phone number can be assigned to one agent at a time. To change the assignment, open the number's settings and select a different agent.
## Port an existing number
If you want callers to reach your AI agent on your current business number, you can port that number to Boltcall.
Reach out to the Boltcall support team to start the porting process. Have your current carrier account details ready.
The support team will send you a Letter of Authorization (LOA) to sign and will coordinate the transfer with your current carrier.
Number porting typically takes 5–10 business days depending on your carrier. Your existing number continues to work normally during this period.
Once the transfer is complete, the number appears in your phone numbers list. Assign it to an agent as you would with any other number.
Do not cancel service with your current carrier before the port is complete. Cancelling early can result in losing the number permanently.
## Connect a SIP trunk
If you use a SIP provider, you can connect your SIP trunk to Boltcall instead of claiming a new number. Click **Add Number → Connect SIP trunk** and enter your SIP termination URI, username, and password.
## Manage numbers
From the phone numbers list you can:
* View the number's status (active or inactive)
* See which agent it is assigned to
* Open the settings panel to reassign or rename the number
* Release a number you no longer need
# AI Receptionist
Source: https://boltcall.mintlify.app/features/ai-receptionist
Answer every inbound call 24/7 with a natural-sounding AI voice that greets callers, handles FAQs, books appointments, and transfers to humans when needed.
AI Receptionist requires the **Starter plan** or higher. [View plans](/account/plans)
Your AI Receptionist answers every call the moment it comes in — day or night, weekends included. It greets callers with your business name, handles common questions from your knowledge base, books appointments directly into your calendar, and hands off to a human when the situation calls for it.
## Key benefits
Every inbound call is answered immediately — no voicemail, no hold music, no missed opportunities.
40% of calls come in outside business hours. Your AI receptionist handles them all.
Callers get the same professional greeting and accurate answers every time.
The AI checks your calendar live and confirms bookings during the call.
## How it works
When a call comes in, your AI receptionist:
1. **Answers immediately** with your custom greeting ("Thanks for calling Acme Plumbing, how can I help you?")
2. **Understands the caller's intent** — booking, FAQ, emergency, or transfer request
3. **Answers questions** using your linked knowledge base
4. **Checks your calendar** and books appointments in real time
5. **Transfers to a human** if the caller asks, or if your transfer rules are triggered
6. **Saves call details** — transcript, caller info, and outcome — to your dashboard
## Setup
Open your [dashboard](/dashboard/overview) and navigate to **AI Receptionist** in the sidebar.
Enter the greeting your AI will say when it answers. For example:
> "Thanks for calling \[Your Business Name]. I'm an AI assistant — how can I help you today?"
You can also choose a voice that matches your brand tone. Preview voices before saving.
Add the phone number the AI should call when it needs to transfer to a human. You can set rules for when transfers trigger — such as during business hours only, or when the caller explicitly asks to speak with someone.
Connect your [knowledge base](/dashboard/knowledge-base) so the AI can accurately answer FAQs about your services, hours, pricing, and location. The more context you provide, the better the AI performs.
Link your calendar via the [integrations page](/integrations/calendar) so the AI can check availability and book appointments live during calls. Boltcall connects with Cal.com and Google Calendar.
Assign a phone number on the [Phone Numbers](/dashboard/phone-numbers) page — either a new local or toll-free number, or forward your existing business line. Your AI receptionist is now active.
## Call routing and transfers
You control when the AI hands off to a human. Transfer rules you can configure:
* **On request** — transfer any time the caller asks to speak with someone
* **Business hours only** — transfer during your set hours; take messages after hours
* **By keyword** — transfer when the caller mentions specific words (e.g., "emergency", "billing")
* **After qualification** — let the AI gather information first, then transfer with context
When a transfer happens, the AI briefs the receiving agent with the caller's name and what they need, so the caller does not have to repeat themselves.
## What callers experience
Callers hear a natural-sounding voice — not a phone tree. They can speak freely, and the AI understands what they mean. Common interactions handled automatically:
* Hours of operation and location
* Service availability and pricing questions
* Appointment booking and rescheduling
* Requests to leave a message or schedule a callback
* Urgent or emergency routing
Add your most common FAQs to your [knowledge base](/dashboard/knowledge-base) before going live. This significantly improves answer accuracy on the first day.
## Frequently asked questions
Yes. The AI understands natural language and can handle multi-part questions. For anything outside its knowledge base, it takes a detailed message or transfers the call to you with full context.
The AI transfers the call at any time a caller requests it. You configure when and where transfers go — including fallback to voicemail if no one is available.
Yes. You can forward your current business number to the AI receptionist without changing your number. See [Phone Numbers](/dashboard/phone-numbers) for setup instructions.
Every call is transcribed and saved to your dashboard. You can review any conversation from the [Analytics](/dashboard/analytics) page.
## Related
Add FAQs and business info your AI uses to answer calls.
Assign a number or forward your existing line.
Connect Cal.com or Google Calendar for live booking.
View call stats, transcripts, and AI performance.
# Automated Reminders
Source: https://boltcall.mintlify.app/features/automated-reminders
Send SMS and email reminders before appointments to reduce no-shows. Customers can confirm, reschedule, or cancel by replying — all handled automatically.
No-shows cost businesses thousands of dollars a month in lost revenue and wasted time. Automated Reminders sends personalized SMS and email messages before every appointment, keeping customers informed and giving them an easy way to reschedule if plans change.
You configure it once. The system handles every reminder from that point forward.
## What it does
* Sends reminders at configurable intervals (e.g., 1 week, 48 hours, 24 hours, 2 hours before)
* Personalizes each message with the customer's name, appointment time, and service details
* Supports two-way replies — customers can confirm, reschedule, or cancel by text
* Handles rescheduling automatically by checking your calendar and offering new times
* Frees up cancelled slots so other customers can fill them
## Key benefits
Automated reminders typically reduce no-show rates by 50–70%.
Customers can reschedule by reply. The AI finds a new time and updates your calendar.
Send via SMS, email, or both. Configure per customer or per appointment type.
Reminders run automatically for every appointment once configured.
## Setup
In your dashboard, navigate to **Reminders** in the sidebar.
Reminders require a connected calendar. If you have not done so already, link your Cal.com or Google Calendar from the [Calendar integration](/integrations/calendar) page.
Choose when reminders are sent relative to each appointment. You can add multiple reminders per appointment:
| Timing | Recommended use |
| --------------- | ------------------------------- |
| 1 week before | High-value or long appointments |
| 48 hours before | Standard appointments |
| 24 hours before | Most appointment types |
| 2 hours before | Same-day confirmation |
Select the timings that make sense for your business and appointment types.
Write the SMS and email messages your customers will receive. Templates support merge fields:
**Example SMS (24h reminder):**
```text theme={null}
Hi {{first_name}}, just a reminder about your appointment with
{{business_name}} tomorrow at {{time}}. Reply YES to confirm,
RESCHEDULE to change your time, or CANCEL to cancel.
```
**Example SMS (2h reminder):**
```text theme={null}
See you soon, {{first_name}}! Your {{service}} appointment is
today at {{time}} at {{address}}. Reply HELP if you need anything.
```
Toggle on the channels you want to use. If you enable both, reminders are sent via SMS and email for every appointment.
Click **Save**. Reminders will be scheduled automatically for all upcoming appointments.
## Two-way rescheduling
When a customer replies to a reminder, Boltcall handles the response automatically:
* **YES / Confirm** — the confirmation is logged; no action needed
* **RESCHEDULE** — the AI asks for their preferred new time, checks your calendar, and updates the booking
* **CANCEL** — the appointment is cancelled, the slot is freed, and you are notified
* **Any other reply** — the AI responds conversationally and escalates to you if needed
Keep your calendar availability up to date. When customers reschedule, the AI only offers time slots that are genuinely open.
## Reminder content tips
Include the following in your reminder messages to reduce confusion and no-shows:
* Customer's first name
* Appointment date and time
* Service or appointment type
* Business address or location (for in-person visits)
* Preparation instructions if applicable (e.g., "Please arrive 10 minutes early")
* Clear reply options (YES to confirm, RESCHEDULE to change)
Do not include sensitive personal or medical information in SMS reminder messages. Use email for content that requires more privacy.
## Opt-outs
Customers can opt out of reminders at any time by replying STOP. Boltcall removes them from future automated messages immediately and in compliance with SMS regulations.
## Frequently asked questions
Yes. You can create different reminder timing and message templates for different services or appointment types.
Customers can reply STOP at any time to opt out. You can also manually disable reminders for a specific customer from their lead record.
No. Boltcall sends reminders during reasonable hours based on the customer's time zone. A 24-hour reminder will not go out at 3am.
Yes. Add custom preparation instructions, parking info, or what to bring directly in your message templates. You can vary this per appointment type.
Yes. Any appointment created through [SMS Booking](/features/sms-booking), the AI Receptionist, or manually added to your calendar will trigger the reminder sequence automatically.
## Related
Book appointments via two-way SMS conversations.
Connect your calendar to power reminders and booking.
Answer calls and book appointments automatically.
View upcoming reminders and appointment history.
# Instant Lead Reply
Source: https://boltcall.mintlify.app/features/instant-lead-reply
Automatically send an SMS to every new lead within seconds — whether they came from a missed call, a website contact form, or a Facebook Lead Ad.
Instant Lead Reply requires the **Pro plan** or higher. [View plans](/account/plans)
When a potential customer reaches out and does not get an immediate response, they move on. Instant Lead Reply sends a personalized SMS within seconds of a new lead arriving — keeping them engaged while you are busy.
Research shows that responding within 60 seconds increases conversion by 391%. Boltcall makes that the default.
## Sources monitored
Boltcall watches for new leads from three channels:
| Source | What triggers a reply |
| ------------------------- | ---------------------------------------------------- |
| **Missed calls** | Your business line receives a call you do not answer |
| **Website contact forms** | A visitor submits a form on your site (via webhook) |
| **Facebook Lead Ads** | A lead completes a Facebook or Instagram lead form |
## How it works
1. A lead comes in from one of the monitored sources
2. Boltcall identifies the lead's phone number
3. An SMS is sent within seconds using your configured message template
4. The AI follows up with qualifying questions if you have a qualification sequence enabled
5. If the lead responds, the conversation continues automatically until they are ready to book
## Setup
In your dashboard, go to **Instant Lead Reply** in the sidebar.
Choose which sources you want to monitor:
* **Missed calls** — enabled automatically if you have a Boltcall phone number assigned
* **Website forms** — copy your unique webhook URL and paste it into your form platform's webhook settings
* **Facebook Lead Ads** — click **Connect Facebook** and authorize Boltcall to access your ad account
Write the SMS your leads will receive. Keep it brief, friendly, and action-oriented. Templates support merge fields like `{{first_name}}` and `{{business_name}}`.
**Missed call example:**
```text theme={null}
Hi {{first_name}}, this is {{business_name}}. Sorry we missed your call!
We'd love to help — what can we assist you with today?
```
**Form submission example:**
```text theme={null}
Hi {{first_name}}, thanks for reaching out to {{business_name}}!
We got your message and will be in touch shortly. Is there anything
specific you'd like to know right away?
```
**Facebook lead example:**
```text theme={null}
Hi {{first_name}}, we saw your interest in {{service}}!
We're {{business_name}} — happy to answer any questions.
When's a good time to connect?
```
Enable a follow-up sequence to automatically ask qualifying questions after the initial reply. The AI continues the SMS conversation, gathers key details, and flags the lead for you when they are ready to book.
Toggle the feature on and send a test lead to confirm the reply arrives. Adjust timing or message copy as needed.
## Example SMS conversations
**Missed call flow:**
```text theme={null}
Boltcall → Lead:
"Hi Sarah, this is Acme Plumbing. Sorry we missed your call!
How can we help — are you dealing with an emergency or
looking to schedule a service?"
Lead → Boltcall:
"Just need a quote for a bathroom faucet replacement."
Boltcall → Lead:
"Got it! We can usually get you a same-week appointment.
What's your address and availability this week?"
```
**Facebook lead flow:**
```text theme={null}
Boltcall → Lead:
"Hi James, thanks for your interest in our HVAC tune-up special!
I'm with Green Air — happy to get you scheduled.
Are mornings or afternoons better for you?"
Lead → Boltcall:
"Afternoons work. This week if possible."
Boltcall → Lead:
"Perfect. I have Thursday at 2pm or Friday at 3pm available.
Which works best?"
```
## Lead source configuration
### Website forms
Copy your webhook URL from the Instant Lead Reply dashboard and add it to your form tool's settings. Boltcall supports any platform that sends webhooks, including:
* Gravity Forms, WPForms, Contact Form 7 (WordPress)
* Typeform, JotForm
* Squarespace and Wix native forms
* Custom HTML forms (via fetch/XHR)
The webhook payload should include at minimum the lead's phone number. Name and email are used for personalization when available.
### Facebook Lead Ads
Connect your Facebook Business account from the dashboard. Once connected, Boltcall monitors all active lead forms across your pages and sends a reply within seconds of each submission.
Run a test lead through your Facebook form after connecting to confirm the webhook fires correctly and the SMS arrives as expected.
## Frequently asked questions
Replies are sent within 5–10 seconds of a lead arriving. This is consistent regardless of time of day or lead volume.
Yes. You can configure a separate message template for missed calls, form submissions, and Facebook leads.
If a form submission does not include a phone number, Boltcall will send an email reply instead (if an email address is present). You can configure email templates separately.
Yes. Any lead that replies STOP is automatically removed from future automated messages. Boltcall handles opt-outs in compliance with SMS regulations.
## Related
Turn a lead reply into a booked appointment via two-way SMS.
Re-engage leads that went quiet after the initial reply.
Connect your CRM, calendar, and ad platforms.
Set up webhook integrations for custom form platforms.
# Lead Reactivation
Source: https://boltcall.mintlify.app/features/lead-reactivation
Automatically re-engage cold leads who never booked or went quiet. Boltcall identifies dormant contacts and sends a personalized SMS sequence to bring them back.
Lead Reactivation requires the **Pro plan** or higher. [View plans](/account/plans)
Most businesses have a list of leads who showed interest but never booked. These contacts did not say no — they just got busy, were not ready, or slipped through the cracks. Lead Reactivation automatically identifies those dormant leads and sends a personalized SMS sequence to bring them back into your pipeline.
Reactivating an existing lead costs significantly less than acquiring a new one, and the conversion rate is higher because the lead already knows your business.
## How it works
Boltcall watches your leads for inactivity. When a lead has not had any contact for a configurable number of days, they are added to a reactivation sequence. The AI sends a series of personalized SMS messages designed to re-open the conversation — without being pushy.
If the lead responds, the AI continues the conversation and can guide them toward booking an appointment or connecting with you directly.
## Setup
In your dashboard, navigate to **Lead Reactivation** under the features section.
Define when a lead is considered dormant. Common configurations:
| Trigger | Use case |
| -------------------------- | ------------------------------------------------- |
| 7 days since last contact | Fast-moving service businesses |
| 30 days since last contact | Most local businesses |
| 60 days since last contact | Longer sales cycles |
| Custom lead status | Trigger based on CRM status (e.g., "No response") |
You can set multiple triggers for different lead segments.
Write the SMS messages that will be sent as part of the sequence. A typical sequence has 2–4 messages spaced several days apart:
**Message 1 (day 1):**
```text theme={null}
Hi {{first_name}}, it's {{business_name}} — we spoke a while back
about {{service}}. Wanted to check in and see if you're still
interested or if there's anything we can help with. No pressure!
```
**Message 2 (day 4):**
```text theme={null}
Hey {{first_name}}, just following up from {{business_name}}.
We have some availability opening up this week if you'd like to
get something scheduled. Want me to grab you a time?
```
**Message 3 (day 10):**
```text theme={null}
Hi {{first_name}}, last follow-up from us — we know life gets busy.
If you ever need {{service}}, we're here. Feel free to text or call
anytime. Have a great day!
```
Configure how many days apart each message in the sequence is sent. Boltcall will not send multiple messages on the same day.
When a dormant lead replies, the AI resumes the conversation. Choose what happens next:
* **AI continues** — the AI qualifies the lead and attempts to book an appointment
* **Notify me** — you receive an alert so you can follow up personally
* **Both** — the AI responds first, then notifies you when the lead is engaged
Toggle Lead Reactivation on. Boltcall will begin identifying dormant leads and enrolling them in the sequence automatically.
## Configurable triggers
You can target dormant leads based on:
* **Days since last contact** — leads with no inbound or outbound activity for X days
* **Lead status** — leads with a specific CRM status (e.g., "Unresponsive", "Quote sent – no reply")
* **Source** — only reactivate leads from specific sources (e.g., Facebook leads, missed calls)
* **Service interest** — send different sequences to leads interested in different services
Segment your cold leads before activating. Leads that went quiet after a quote need a different message than leads that never responded to your first SMS.
## What happens when a lead responds
When a reactivated lead replies, Boltcall handles the conversation automatically:
* The AI acknowledges their reply and picks up the conversation naturally
* If the lead is ready to book, the AI checks your calendar and confirms an appointment
* If the lead has questions, the AI answers them using your knowledge base
* Lead activity is updated in your dashboard so you can see which leads re-engaged
Leads who opt out (reply STOP) are immediately removed from all future reactivation messages.
## Best practices
**Do not only use discounts.** Reaching out with a helpful check-in or a relevant piece of information often outperforms a generic "20% off" message. Most leads went quiet because of timing, not price.
**Acknowledge the gap.** A message like "We haven't chatted in a while" feels more genuine than pretending no time has passed. It humanizes the outreach.
**Keep sequences short.** Two or three messages over 10–14 days is usually enough. More messages without a response can feel intrusive and damage your reputation with that contact.
**Stop after opt-out.** Respect any lead that asks not to be contacted. Boltcall enforces this automatically.
## Frequently asked questions
There is no maximum age. However, the messaging approach should reflect the time gap. A lead that went quiet last month needs a different message than one from two years ago.
Yes. You can connect your CRM via the [integrations page](/integrations/crm) and Boltcall will sync leads automatically. You can also tag or filter which leads are eligible for reactivation.
Any lead that replies STOP is immediately removed from all future automated messages. You can also manually exclude specific leads from reactivation campaigns.
Yes. In addition to the automated trigger-based campaigns, you can select a group of leads and manually start a reactivation sequence for them from the dashboard.
The dashboard shows reply rates, re-engagement rates, and appointments booked from reactivated leads. You can see which message in the sequence gets the best response and adjust accordingly.
## Related
Engage new leads before they go cold in the first place.
Turn a reactivated lead into a booked appointment via SMS.
Sync your lead data and trigger reactivation from CRM status.
Track reactivation campaign performance and ROI.
# SMS Booking
Source: https://boltcall.mintlify.app/features/sms-booking
Let leads book appointments through a two-way SMS conversation. The AI qualifies them, checks your calendar, and confirms the booking — no human needed.
SMS Booking turns a text message into a booked appointment. When a lead texts your business number, the AI starts a natural conversation — it asks qualifying questions, checks your live calendar availability, and sends a confirmation. No phone calls, no back-and-forth email chains, no manual scheduling.
Customers book on their terms, using the messaging app already on their phone.
## How it works
A customer sends a message to your Boltcall number — anything from "I'd like to book an appointment" to a specific service request.
The AI asks a few targeted questions to understand what the customer needs, when they are available, and whether the request is a good fit for your services.
Boltcall connects to your Cal.com calendar in real time and identifies open time slots that match the customer's preferences.
The AI presents available times, the customer picks one, and a booking confirmation is sent via SMS — with appointment details and any instructions you have configured.
The appointment is added to your calendar immediately. You receive a notification, and the customer receives a confirmation.
## Example conversation
```text theme={null}
Lead:
"Hi, I'd like to book a cleaning appointment."
Boltcall:
"Hi there! Happy to help get you scheduled with Sparkle Clean.
Are you looking for a standard clean or a deep clean?"
Lead:
"Deep clean, 3-bedroom house."
Boltcall:
"Perfect. Deep cleans for a 3-bed usually take about 4 hours.
Do you have a preferred day this week or next?"
Lead:
"Next Tuesday or Wednesday works."
Boltcall:
"I have Tuesday the 15th at 9am or Wednesday the 16th at 1pm
available. Which works better for you?"
Lead:
"Tuesday at 9 is great."
Boltcall:
"Confirmed! Your deep clean is booked for Tuesday, April 15th
at 9:00am. We'll send a reminder the day before.
Reply HELP if you need to reschedule. See you then!"
```
## Calendar integration
SMS Booking connects to your calendar through the [Calendar integration](/integrations/calendar). Boltcall currently supports:
* **Cal.com** — recommended for full two-way booking support
* **Google Calendar** — for availability checks and event creation
The AI checks your calendar live during the conversation, so it only offers time slots that are genuinely available. Double-booking is not possible.
Use Cal.com event types to configure buffer times, minimum notice periods, and service-specific durations. The AI will respect all your event type rules.
## Qualifying questions
You can configure the questions the AI asks before checking availability. Common examples:
* Service type (e.g., standard vs. deep clean, new patient vs. returning)
* Location or address
* Number of people, rooms, or units
* Urgency or preferred timeframe
* Budget range (for services with variable pricing)
Qualification data is stored with the lead record so you have full context before the appointment.
## Rescheduling and cancellations
After booking, customers can text your number at any time to:
* Request a new time — the AI checks availability and offers alternatives
* Cancel — the slot is freed on your calendar and you are notified
* Ask questions about their upcoming appointment
All changes are reflected in your calendar automatically.
## Supported use cases
SMS Booking works for any business that takes appointments:
* Home services (cleaning, HVAC, plumbing, landscaping)
* Health and wellness (clinics, salons, spas, gyms)
* Professional services (legal, financial, consulting)
* Trades and contractors
## Frequently asked questions
No. SMS Booking works with any phone that can send and receive text messages. No app download or account creation required.
Boltcall connects to Cal.com and Google Calendar. See the [Calendar integration](/integrations/calendar) page for setup instructions.
Yes. You can configure multiple service types with different durations, questions, and availability rules. The AI will ask the customer which service they need and route accordingly.
The AI offers the next two or three available times that are closest to the customer's preference. If none work, it asks for alternate days or times.
Yes. If a customer asks to speak with someone directly, the AI can transfer to a phone call or schedule a callback at a time that works for both parties.
## Related
Connect Cal.com or Google Calendar to enable live booking.
Send SMS reminders before booked appointments to reduce no-shows.
Engage new leads before they are ready to book.
Book appointments over phone calls instead of SMS.
# Website Widget
Source: https://boltcall.mintlify.app/features/website-widget
Add an AI chat bubble or voice call button to your website. Visitors can ask questions, get answers, and book appointments without leaving your site.
The Website Widget is a small embeddable component that sits in the corner of your website. Visitors can open it to chat with your AI assistant via text, or click to start a voice call — all without leaving the page.
It works on any website platform and takes about two minutes to install.
## Two modes
**Chat bubble** — visitors type questions and receive text responses. The AI answers FAQs, qualifies leads, collects contact information, and can book appointments directly in the chat window.
**Voice call button** — visitors click to start a live voice conversation with your AI receptionist. Works like a phone call, but through the browser.
You can enable one or both modes, depending on your preference.
## Key benefits
Engage every visitor, even when you are offline. Leads are captured and saved automatically.
Reduce bounce rate by answering visitor questions before they leave your site.
Visitors can book appointments from the chat window — no phone call or form required.
One embed snippet works on WordPress, Squarespace, Wix, Webflow, and custom HTML sites.
## Installation
In your dashboard, navigate to **Website Widget** (Chat Bubble) in the sidebar.
Set up the widget appearance and behavior:
* **Greeting message** — the first thing visitors see when they open the chat (e.g., "Hi! How can I help you today?")
* **Color** — pick a primary color to match your brand
* **Position** — bottom-right or bottom-left corner
* **Mode** — chat, voice, or both
Click **Copy embed code**. Your unique snippet will look like this:
```html theme={null}
```
Add the snippet to your website just before the closing `