# Agent Calling
Source: https://docs.callcow.ai/agent-calling
Let AI agents make phone calls through CallCow with a single API request
## Overview
Agent calling lets external AI agents (Claude, GPT, n8n, Make, custom bots) make phone calls by sending a short natural language prompt. CallCow generates a call workflow from the prompt, makes the call, and delivers results to a callback URL.
No workflow setup needed. One API call does everything.
## Setup
Sign up at [callcow.ai](https://www.callcow.ai) and complete onboarding.
Go to **Settings > Phone Numbers** and add a phone number. This is the number your AI agent will call from.
Go to **Settings > API Keys** and click **Create API Key**. Copy the key immediately -- it starts with `ck_live_` and is only shown once.
## Making a call
Send a POST request to `/api/call-prompt` with your prompt and the recipient's phone number:
```bash theme={null}
curl -X POST https://www.callcow.ai/api/call-prompt \
-H "Authorization: Bearer ck_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Book a dinner reservation for Friday at 7pm, party of 2, under Josh",
"recipient_phone": "+14155551234"
}'
```
The API returns a `workflow_id` and `call_id`:
```json theme={null}
{
"success": true,
"workflow_id": "abc-123",
"call_id": "def-456"
}
```
The AI agent introduces itself as an AI assistant at the start of every call.
## Writing good prompts
Write prompts like you're briefing a human assistant. Include all the details they'd need.
* "Book a dinner reservation at Olive Garden for Friday 7pm, party of 2,
under Josh Miller" - "Confirm Sarah Johnson's 3pm appointment tomorrow at
Dr. Smith's office" - "Ask about store hours and if they have size 10 Nike
Air Max in stock"
* "Make a call" (too vague) - "Book something" (no details) - "Call them"
(who? about what?)
**Tip:** Include who, what, when, where, and any specific details.
## Getting call results
Add a `callback_url` to your request to receive results when the call ends:
```bash theme={null}
curl -X POST https://www.callcow.ai/api/call-prompt \
-H "Authorization: Bearer ck_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Book a reservation for Friday 7pm, party of 2",
"recipient_phone": "+14155551234",
"callback_url": "https://your-server.com/callback",
"callback_secret": "my-secret-token"
}'
```
CallCow will POST results to your URL when the call completes **or fails**:
```json theme={null}
{
"call_id": "def-456",
"workflow_id": "abc-123",
"call_status": "success",
"provider_status": "completed",
"call_summary": "Successfully booked a reservation for Friday 7pm, party of 2.",
"messages": [],
"form_fills": [],
"created_at": "2026-03-30T12:00:00.000Z"
}
```
If you provided `callback_secret`, the request includes `Authorization: Bearer my-secret-token` so you can verify it came from CallCow.
### Call statuses
| `call_status` | `provider_status` | What happened |
| --------------- | ----------------- | --------------------------------------- |
| `success` | `completed` | Call completed normally |
| `not_picked_up` | `no-answer` | No one answered |
| `not_picked_up` | `busy` | Line was busy |
| `not_picked_up` | `failed` | Call failed (bad number, carrier error) |
| `voicemail` | `completed` | Went to voicemail |
## Preventing duplicate calls
Pass an `idempotency_key` to prevent duplicate calls if your agent retries:
```json theme={null}
{
"prompt": "Book a reservation...",
"recipient_phone": "+14155551234",
"idempotency_key": "task-12345"
}
```
Same key within 5 minutes returns the cached response without making a new call.
## Rate limits
60 requests per minute per organization. If you hit the limit, the API returns `429` with a `Retry-After` header.
## Skill file for AI agents
If your AI agent reads skill files or system prompts, run
```bash theme={null}
npx skills add https://github.com/yiminghan/callcow-skills --skill agent-call
```
# Trigger Call
Source: https://docs.callcow.ai/api-reference/endpoint/call
POST /call
Initiates an AI phone call workflow to the specified recipient. Requires an API key for authentication.
## Idempotency
To prevent duplicate calls from retries, you can pass an optional `idempotency_key` in the request body. If the same key is sent within a 5-minute window, the API returns the cached response without creating a new call.
```json theme={null}
{
"workflow_id": "wf_abc123xyz",
"recipient_phone": "+14155552671",
"idempotency_key": "order-12345-call"
}
```
# Call with Prompt
Source: https://docs.callcow.ai/api-reference/endpoint/call-prompt
POST /call-prompt
Create and trigger an AI phone call from a natural language prompt. Generates a workflow, initiates the call, and optionally delivers results to a callback URL.
## Overview
Create and trigger an AI phone call from a natural language prompt in a single request. The system generates a workflow from your prompt, initiates the call, and optionally delivers results to a callback URL.
This is ideal for agent-to-agent orchestration, where external agents can make calls without pre-creating workflows.
## Callback
If you provide a `callback_url`, the API will POST call results to that URL when the call completes **or fails** (including not picked up, busy, voicemail).
Callback delivery is best-effort (single attempt, 30-second timeout). For guaranteed delivery, poll the call status as a fallback.
### Callback payload
```json theme={null}
{
"call_id": "abc-123",
"workflow_id": "def-456",
"call_status": "success",
"provider_status": "completed",
"call_summary": "Customer booked a reservation for Friday 7pm, party of 2.",
"messages": [],
"context": null,
"form_fills": [],
"created_at": "2026-03-30T12:00:00.000Z"
}
```
If you provided a `callback_secret`, the callback request includes an `Authorization: Bearer ` header.
### Terminal statuses
| `call_status` | `provider_status` | Meaning |
| --------------- | ----------------- | --------------------------------------- |
| `success` | `completed` | Call completed normally |
| `not_picked_up` | `no-answer` | No one answered |
| `not_picked_up` | `busy` | Line was busy |
| `not_picked_up` | `failed` | Call failed (bad number, carrier error) |
| `not_picked_up` | `canceled` | Call was canceled |
| `voicemail` | `completed` | Went to voicemail |
## Idempotency
To prevent duplicate calls from retries, pass an optional `idempotency_key`. If the same key is sent within a 5-minute window, the API returns the cached response without creating a new call.
```json theme={null}
{
"prompt": "Book a reservation at Friday 7pm for Josh for 2",
"recipient_phone": "+14155552671",
"idempotency_key": "agent-task-12345"
}
```
# List Workflows
Source: https://docs.callcow.ai/api-reference/endpoint/workflows
GET /workflows
Returns all non-deleted workflows for the authenticated organization.
# Introduction
Source: https://docs.callcow.ai/api-reference/introduction
## Welcome
Here you can explore how to use voice workflow automations with our API.
## Authentication
All API requests require an API key passed via the `Authorization` header:
```
Authorization: Bearer ck_live_...
```
Generate API keys from **Settings → API Keys** in your [CallCow dashboard](https://www.callcow.ai/settings?tab=api-keys).
API keys are only shown once at creation time. Copy and store your key securely — you won't be able to see it again.
## Rate Limits
API requests are rate-limited to **60 requests per minute** per organization. If you exceed the limit, you'll receive a `429` response with a `Retry-After` header indicating when you can retry.
## Endpoints
Trigger an AI phone call workflow via API
Make a call from a natural language prompt
List all workflows in your organization
# List Calling
Source: https://docs.callcow.ai/bulk-calls/list-calling
One of the common use cases for AI automation is to call a list of contacts. This guide explains how to setup list calling with your dedicated number.
# Creating a list
There are 2 ways to create a list:
1. in /contacts page, select **Upload Contacts** and upload a CSV. A list will be automatically created.
2. Create a list directly via **Create List** in /contacts page.
# Start List Calling
Once you have a list, first **make sure** that the numbers in the list are correct (with country codes)
then, click the **Start List** button inside the list detail page.
Choose the workflow and phone number you want for the list, and our AI will start automating calls sequentially in the background. You do not need to keep the page open.
# List Calling Status
Once list calling starts, you should be able to see call status and call details in the list details page.
# List Schedule
If you have a large list, you can also update your list schedule - we will stop calling after your scheduled time - and resume the list calling the next day on a predetermined schedule.
You can update your list calling schedule in the list detail page.
# List calling with multiple numbers
We are still testing out multiple numbers for list calling. If you would like to be a test partner - email us at [yiming@callcow.ai](mailto:yiming@callcow.ai)
# Clone Your Voice
Source: https://docs.callcow.ai/clone-voice/voice-clone
# Voice Cloning
You can clone your voice in 2 easy steps:
1. Select the voice tab in the settings page
2. Record a 30 second audio snippet and clone your voice!
And that's it! You are done! You can now use your cloned voice in all workflows
# Security Considerations
We do not store any audios of your actual calls, only the 30 second audio snippet will be used for voice cloning.
# Forms
Source: https://docs.callcow.ai/forms/forms
Forms let you define structured data collection templates that your AI agent fills out during calls. Each form has typed fields (like phone, email, text, number, select, or multiselect), and the collected data is stored with the call record.
# Field Types
| Type | Description |
| ------------ | --------------------------------------- |
| Text | Free-form text input |
| Number | Numeric values |
| Email | Email addresses |
| Phone | Phone numbers |
| Select | Single choice from a list of options |
| Multi-select | Multiple choices from a list of options |
For **Select** and **Multi-select** fields, you'll need to define the available options when creating the field.
# Using Forms in Workflows
To use a form during a call, add a **Form** state node in the workflow builder:
1. Open your workflow in the **/workflows** page.
2. Add a new state and select the **Form** type.
3. Choose an existing form or create a new one inline.
When the call reaches the form state, the AI agent will conversationally collect the required information from the caller based on your field definitions.
# Viewing Collected Data
After a call completes, the filled form data appears on the call detail page. Navigate to **/calls** and select a call to view the collected responses.
# Post-Call Integrations
Form data is included in post-call webhook payloads, so you can send collected data to your CRM, spreadsheet, or any other system. See the [Webhooks documentation](/webhooks/webhook) for setup details.
# Getting Started
Source: https://docs.callcow.ai/getting-started
Watch this video first on how to get started.
If you have problems with set up, you can book a meeting with us [here](http://callcow.ai/schedule-custom).
# Inbound Contacts
Source: https://docs.callcow.ai/inbound-contacts/inbound-contacts
Inbound contacts are people who have called or messaged your agent. Any contacts that have shown any interest will be saved to inbound contacts.
## Contact Details
Each inbound contact stores:
* **Phone number** — the caller's phone number (always present)
* **Name** — collected from calls or manually added
* **Email** — collected from forms or manually added
* **Notes** — free-form notes you can add to a contact
## Preferred Number
The **preferred number** is the default "from" number used when creating new SMS threads with a contact or call with a contact.
We automatically link one number to one contact so the contact associate the number and trust it more.
A perferred number is automatically linked when the contact calls / texts a number for the first time.
## Message Threads
You can send and receive SMS messages with inbound contacts directly from CallCow.
### Creating a Thread
1. Open a contact from the **/contacts/inbound** page.
2. Click **New Thread** to start a conversation.
3. Select a "from" number (the preferred number is pre-selected if one is set).
4. Type your message and send.
### Viewing Threads
Each thread shows the full message history between you and the contact on a specific number. You can have multiple threads with the same contact using different phone numbers.
### Sending Messages
Type a message in the thread view and click send. Messages are delivered via Twilio using the thread's "from" number.
## Inbound SMS Contacts
When someone sends an SMS to a phone number that is assigned to a workflow, an inbound contact is automatically created for that person.
* **Automatic creation** — The contact is created as soon as the first SMS is received from a new phone number.
* **Preferred number** — The phone number they texted is automatically set as their preferred number.
* **Workflow trigger** — If the phone number is assigned to an SMS-triggered workflow, the workflow will run automatically for the new contact.
This means you do not need to manually create contacts for people who text your numbers. Simply assign a phone number to your workflow, enable SMS, and any incoming text message will create the contact and trigger the workflow.
For instructions on enabling SMS on a phone number, see the [Phone Number Guide](/phone-number-guide#setting-up-sms).
# CallCow Documentation
Source: https://docs.callcow.ai/index
## Setting up
Check our API guide for automating voice workflows.
We also set up custom zapier and n8n workflows. [book a meeting](https://www.callcow.ai/login-beta) with us if you need any custom integrations.
Start here for API automation
# Cal.com Integration Setup
Source: https://docs.callcow.ai/integration-guides/calcom/calcom
For Cal.com Integration, you will need to configure an API key for us to create schedules for you on your behalf.
Here's the step by step guide to get your API KEY:
1. Go to [app.calcom.com](https://app.cal.com), and go to the settings page
2. Click on API Keys in Settings and create a new API Key
3. Make sure the key never expires.
4. Make sure to double check that the key never expires before copying it for CallCow!
## Security Considerations
Using an API Key in this way is 100% Safe.
Any time you feel like you want to stop connecting to CallCow, just remove the integration and remove the key on cal.com settings page.
There is no way for us to access your calendar after.
# Calendly Integration Setup
Source: https://docs.callcow.ai/integration-guides/calendly/calendly
For Calendly Integration, you will need to configure an API key for us to create schedules for you on your behalf.
Here's the step by step guide to get your API KEY:
1. Go to [calendly.com/integrations](https://calendly.com/integrations), and go to the "integrations & apps" page.
Search for "API" in the integration and select "API and webhooks"
2. Click on "Generate New Token"
3. Proceed with generating your personal access token
4. Copy the access token
## Security Considerations
Using an API Key in this way is 100% Safe.
Any time you feel like you want to stop connecting to CallCow, just remove the integration and revoke the key on the "API & webhooks" page
There is no way for us to access your calendar after.
# Embed Website Widget
Source: https://docs.callcow.ai/integration-guides/embed/embed
We currently offer 2 types of website widgets that you can easily embed into your website.
1. Floating Widget
Floating widget acts like any chat widget that just floats at the bottom right of the screen.
2. Inline Widget
You can put the inline widget in any of your website sections
# Getting the code to integrate
Click on **Embed on Website** inside the workflow page you want to use, and follow the integration instructions.
# Custom Widgets
If you need to help setup custom widgets or integrations, book a meeting with us [here](https://callcow.ai/schedule-custom).
# Make.com
Source: https://docs.callcow.ai/integration-guides/make/make
Connect CallCow to Make.com for bidirectional workflow automation
## Overview
Integrate CallCow with [Make.com](https://www.make.com) to:
* **Make.com → CallCow**: Trigger AI phone calls from Make.com scenarios (e.g., when a form is submitted, a CRM record is created, etc.)
* **CallCow → Make.com**: Send post-call data (summary, form fills, recording) to Make.com for further processing
## Prerequisites
1. A CallCow account with at least one workflow
2. A Make.com account
3. A CallCow API key (generate from **Settings → API Keys**)
## Make.com → CallCow: Trigger Calls
Use Make.com's HTTP module to call the CallCow API and trigger AI phone calls.
### Step 1: Generate an API Key
1. Go to [Settings → API Keys](https://www.callcow.ai/settings?tab=api-keys) in your CallCow dashboard
2. Click **Create API Key** and give it a name (e.g., "Make.com")
3. Copy the key immediately — you won't be able to see it again
### Step 2: Get Your Workflow ID
You can find your workflow ID in one of two ways:
* From your CallCow dashboard URL when editing a workflow
* Via the [List Workflows API endpoint](/api-reference/endpoint/workflows)
### Step 3: Set Up the HTTP Module in Make.com
1. In your Make.com scenario, add an **HTTP → Make a request** module
2. Configure it as follows:
| Setting | Value |
| ------------- | ----------------------------------- |
| **URL** | `https://www.callcow.ai/api/call` |
| **Method** | `POST` |
| **Headers** | `Authorization: Bearer ck_live_...` |
| **Body type** | JSON |
3. Set the JSON body:
```json theme={null}
{
"workflow_id": "your-workflow-id",
"recipient_phone": "+14155552671",
"recipient_name": "John Doe",
"recipient_email": "john@example.com",
"recipient_context": "Additional context for the AI",
"idempotency_key": "unique-key-for-this-call"
}
```
Use the `idempotency_key` field to prevent duplicate calls if Make.com retries the request. Use a unique identifier from your trigger (e.g., form submission ID, CRM record ID).
### Step 4: Test
Run your scenario and verify the call is triggered. You should receive a response:
```json theme={null}
{
"success": true,
"message": "Thanks! Our AI agent will call you shortly."
}
```
## CallCow → Make.com: Receive Post-Call Data
Use CallCow's built-in webhook integration to send post-call data to Make.com.
### Step 1: Create a Make.com Webhook
1. In your Make.com scenario, add a **Webhooks → Custom webhook** trigger
2. Copy the webhook URL (it will look like `https://hook.make.com/...`)
### Step 2: Configure the Webhook in CallCow
1. Go to your CallCow dashboard and navigate to **Integrations**
2. Create a new **Webhook** integration
3. Paste the Make.com webhook URL
4. Attach the webhook integration to your workflow
### Step 3: Test
Trigger a call (via the dashboard, API, or phone). When the call completes, CallCow will send a POST request to your Make.com webhook with the call data:
```json theme={null}
{
"call_id": "e0f4c895-e3ea-416a-a98a-578e82868473",
"workflow_id": "008bda4d-b467-4f55-a8ed-803b3d1d69d5",
"workflow_name": "Customer Support",
"phone_number_from": "+14155552671",
"phone_number_to": "+14155559999",
"call_status": "success",
"call_summary": "Customer asked about pricing and was provided plan details.",
"messages": [...],
"form_fills": [...],
"created_at": "2026-03-17T14:48:36.371886"
}
```
See the [Webhooks documentation](/webhooks/webhook) for the full payload reference.
## Example Scenarios
Here are some common Make.com + CallCow scenarios:
| Trigger | Action |
| --------------------------- | -------------------------------------------------- |
| New HubSpot contact | Trigger a welcome call via CallCow |
| Google Form submission | Trigger a follow-up call with form data as context |
| CallCow call completed | Create a HubSpot note with call summary |
| CallCow call completed | Send a Slack notification with call results |
| CallCow form fill completed | Add row to Google Sheets |
| New Calendly booking | Trigger a confirmation call via CallCow |
## Rate Limits
The CallCow API is rate-limited to **60 requests per minute** per organization. If you hit the limit, Make.com will receive a `429` response with a `Retry-After` header. Configure Make.com's error handling to retry after the specified delay.
## Troubleshooting
| Issue | Solution |
| ------------------------ | ----------------------------------------------------------------- |
| `401 Unauthorized` | Check that your API key is correct and hasn't been revoked |
| `403 Forbidden` | The workflow belongs to a different organization than the API key |
| `404 Workflow not found` | Verify the workflow ID exists and hasn't been deleted |
| `429 Too Many Requests` | You've hit the rate limit — add a delay between requests |
| Webhook not firing | Ensure the webhook integration is attached to your workflow |
# Monday CRM Integration Setup
Source: https://docs.callcow.ai/integration-guides/monday/monday
For Monday CRM Integration, you will need to configure an API key for us to integrate which boards are needed.
# Get Monday API Key
Here's the step by step guide to get your API KEY:
1. Go to **Developer Settings** and click on **API token**
2. Copy the API token
# Considerations when creating the integration
### Call logs are meeting dates:
Often we are using other monday CRM automation together with CallCow.
Creating new fields for **call log** and **meeting start time** helps with future automations, as they provide information for creating new calendar events and alert triggers for your CRM and syncs to your CRM as the source of truth.
### Extra call context:
It is normal to pass in extra call context to your calls. When creating your integration, add the extra context you would like to add and it will be passed to the call workflow.
# Trigger call workflow when a row is created
The most common way for Monday CRM integration to be used is to trigger a call when a new row is added.
To do this, make sure you have first created a Monday CRM integration with the board of your choosing in the **Integrations** Tab.
Go to **Run Workflow** section of the workflow you want to trigger, and copy the webhook link generated:
Follow the instructions to copy the webhook link, then go to your board, click **Integrate** -> **More Integrations**
Create a webhook for **When an item is created, send a webhook**.
Copy the webhook link into the webhook.
Create the automation. You should see something like this:
## Custom Setup
If you need help setting up a custom solution, you can book a meeting with us [here](http://callcow.ai/schedule-custom).
## Security Considerations
We **ONLY** use use the API key to fetch the new row that was created and update call status to it.
CallCow never stores any data from your CRM, only the call logs.
# TidyCal Integration Setup
Source: https://docs.callcow.ai/integration-guides/tidycal/tidycal
For TidyCal Integration, you will need to configure an API key for us to create schedules for you on your behalf.
Here's the step by step guide to get your API KEY:
1. Go to [tidycal.com/integrations/oauth](https://tidycal.com/integrations/oauth) and log in to your account
2. Generate APIKEY and copy it
3. Add the key and add the event you want with your tidycal. Note that paid booking cannot be booked via API - thuse they cannot be included.
## Security Considerations
Any time you feel like you want to stop connecting to CallCow, just remove the integration and revoke the key on tidyCal's settings page.
There is no way for us to access your calendar after.
# Trafft Integration Setup
Source: https://docs.callcow.ai/integration-guides/trafft/trafft
For Trafft Integration, you will need to configure an API key for us to create appointments and manage bookings on your behalf.
Here's the step by step guide to get your API KEY:
1. Go to your Trafft admin panel and navigate to **Account Settings**, click on **Features and Integrations**.
2. Search for **API** and click **Set up**.
3. Copy the API Keys and other secrets
4. Copy the settings to CallCow API
## Configuring Your Trafft Integration
Once you have your API key, you'll also need:
* **Service ID**: The specific service you want CallCow to book appointments for
You can select a number of services for each integration.
We recommend create different integrations for different services if you want to have different services for different workflows.
## Booking Rules:
We will book the first employee that is available for the timeslot. Currently there are no specific bookings for different employee.
## Security Considerations
Any time you feel like you want to stop connecting to CallCow, just remove the integration and revoke the API key in your Trafft settings.
There is no way for us to access your Trafft account after.
# Zapier Integration Guide
Source: https://docs.callcow.ai/integration-guides/zapier/zapier
## Setting Up CallCow with Zapier
Follow these steps to integrate CallCow with your lead generation workflows:
### 1. Connect to the CallCow Zapier App
Our Zapier App is currently invite only. Click the [**Zapier invite link**](https://zapier.com/developer/public-invite/232727/45c3209dfedcd445fe42140ec0463703/) to get started.
### 2. Create a new Zap
Create a new Zap, starting with Facebook Lead Ads or Google Lead Ads as your trigger.
Or, if you have any other lead form integration, make sure it takes phone numbers
### 3. Configure the CallCow Integration
1. Pick "Create Workflow" Action for the integration
2. Authorize OAuth Permission
3. Use your workflow ID from CallCow (found in your workflow settings)
### 4. Map your Zap
Map the workflow with the appropriate fields for name, phone, and email, depending on your lead form configuration.
# Phone Number Guide
Source: https://docs.callcow.ai/phone-number-guide
CallCow uses Twilio to handle phone calls. To connect your own Twilio account, you'll need to get a phone number and API credentials.
## Getting a Twilio Phone Number
1. Sign up for a Twilio account at [twilio.com](https://www.twilio.com)
2. Once logged in, go to **Phone Numbers** > **Manage** > **Buy a number**
3. Search for a number by country, area code, or capabilities (Voice, SMS)
4. Click **Buy** to purchase the number
5. Copy the phone number and add it to your CallCow workflow settings
## Getting Your Twilio API Credentials
1. Log in to the [Twilio Console](https://console.twilio.com)
2. On the dashboard, locate your **Account SID** and **Auth Token**
3. Click the eye icon to reveal your Auth Token
4. Copy both the Account SID and Auth Token
5. Paste these credentials into CallCow's Twilio integration settings
**Note:** Keep your Auth Token secret. Never share it publicly or commit it to version control.
## Setting Up SMS
To enable SMS capabilities for your Twilio phone number, you need to configure a TwiML App and connect it to your number.
1. In the [Twilio Console](https://console.twilio.com), go to **Messaging** > **Services** and click **Create Messaging Service**
2. Give your service a name and click **Create Messaging Service**
3. Under **Sender Pool**, click **Add Senders** and add your Twilio phone number
4. In the **Integration** step, select **Send a webhook** and enter your CallCow webhook URL as the **Request URL**
5. Complete the setup and click **Save**
6. Back in CallCow, enable SMS for your workflow and select the phone number you configured
**Note:** If you're on a Twilio trial account, you can only send SMS to verified phone numbers. Upgrade your account to send SMS to any number.
## Concurrent Calls Limit
CallCow uses Twilio for phone calls. By default, Twilio accounts have the following limits:
| Account Type | Calls Per Second (CPS) | Concurrent Calls |
| ----------------------------------- | ---------------------- | ---------------- |
| Trial | 1 CPS | 4 |
| Upgraded (without Business Profile) | 1 CPS | Limited |
| Upgraded (with Business Profile) | Configurable | Unlimited |
**Key points:**
* CPS limits only apply to outbound API calls, not inbound calls
* If you need higher throughput, you can increase your CPS limit in the [Twilio Console](https://console.twilio.com) Voice Settings page (requires an approved Business Profile)
For more details, see [Twilio's documentation on call limits](https://support.twilio.com/hc/en-us/articles/223180028-How-Fast-Can-I-Place-or-Receive-Phone-Calls-with-Twilio).
# Transfer To Human
Source: https://docs.callcow.ai/transfer-to-human/transfer-to-human
In some cases, the caller will still perfer to talk to a human. Here's how to setup call transfer to a specific number you choose (for example, your business line.)
**Primary Customer Profile Required**
To enable call transfers, you must set up a Primary Customer Profile in your Twilio account. This is required by Twilio for outbound call capabilities.
[Learn how to create a Primary Customer Profile](https://www.twilio.com/docs/trust-hub/trusthub-rest-api/console-create-a-primary-customer-profile)
First, create an integration for call transfer, and enter the number you which to use. Make sure to test the number so it is valid.
Once this is saved, you can update them in custom workflows via **Edit Metadata** or in basic workflows under the **Call Transfer** section:
## Dynamic Transfer URL
If you need the transfer destination to change based on who is calling (e.g. routing to different departments or agents), you can set an optional **Dynamic Transfer URL** on the call transfer integration.
When configured, the agent will `POST` to your URL at the moment of transfer with the caller's phone number:
```json theme={null}
{
"number": "+15551234567"
}
```
Your endpoint should return a JSON response with the destination number:
```json theme={null}
{
"transferNumber": "+15559876543"
}
```
If the request fails or does not return a valid `transferNumber`, the agent will fall back to the static **Transfer Phone Number** you configured above.
# Twilio Business Profile
Source: https://docs.callcow.ai/twilio-business-profile
## What is a Twilio Business Profile?
A Twilio Business Profile is an identity verification process for your Twilio account. It confirms your business identity with Twilio, allowing them to verify that you are a legitimate organization using their communication services.
## Why Does It Matter?
Having an approved Business Profile unlocks important capabilities for your phone numbers:
* **Call Transfer** — You **must** setup your business profile for Call Transfer
* **SMS** — You **must** setup your business profile for SMS
* **Higher concurrent calls** — Verified accounts can handle more simultaneous calls
* **Configurable CPS (Calls Per Second)** — Increase your outbound calling throughput
See the [Concurrent Calls Limit](/phone-number-guide#concurrent-calls-limit) section in the Phone Number Guide for details on how your profile status affects call limits.
## Profile Statuses
| Status | Meaning |
| --------------------- | ------------------------------------------------------------------------------ |
| **Profile Approved** | Your profile is verified and full capabilities are unlocked. |
| **Profile In Review** | Twilio is actively reviewing your submission. |
| **Profile Pending** | Your profile has been submitted and is waiting to enter review. |
| **Profile Draft** | You have started creating a profile but have not yet submitted it. |
| **Profile Rejected** | Your profile was rejected by Twilio and needs corrections before resubmitting. |
| **Profile Error** | Something went wrong. Please contact support. |
| **No Profile** | You have not yet created a Business Profile. |
## How to Create a Business Profile
1. Log in to the [Twilio Console](https://www.twilio.com/console)
2. Navigate to **Account** > **Business Profiles**
3. Click **Create a Business Profile** and follow the prompts to submit your business information
4. Once submitted, Twilio will review your profile — this typically takes a few business days
After your profile is approved, the benefits will automatically apply to the phone numbers on your account.
# Voice Mail Forwarding
Source: https://docs.callcow.ai/voicemail-transfer/voicemail-transfer
For most small businesses, our recommendation is do not let AI take 100% of your inbound calls. Instead, let AI handle you calls ONLY when you fail to pick up the phone.
Traditionally, any missed call will be redirected to voicemail, but for most carriers, we can also setup voicemail forwarding. This feature lets you keep your personal calls,
and forwards the caller to an AI agent only if you missed the call.
We find that this creates an overall best experience for clients.
# Setup Guide
To setup voice mail forwarding, the steps are different for each individual carrier.
To see a quick demo on what it looks like on Rogers, check our youtube short video for our guide: [https://youtube.com/shorts/J7nBTLstdPU](https://youtube.com/shorts/J7nBTLstdPU)
If you need to help setup voice mail forwarding with your specific provider, book a meeting with us [here](https://callcow.ai/schedule-custom).
# Webhooks
Source: https://docs.callcow.ai/webhooks/webhook
## Overview
Webhooks allow you to receive real-time notifications when calls are completed. When a call ends, CallCow will send a POST request to your configured webhook URL with detailed information about the call.
## Setting Up Webhooks
You can create a webhook in the **Integration** tab. Once you have created a webhook, you can update your custom workflow metadata to use the webhook.
## Payload Format
When a call completes, you'll receive a POST request with a JSON payload containing the following fields:
```json theme={null}
{
"call_id": "e0f4c895-e3ea-416a-a98a-578e82868473",
"workflow_id": "008bda4d-b467-4f55-a8ed-803b3d1d69d5",
"workflow_name": "calendly test (Copy)",
"phone_number_from": "browser",
"phone_number_to": "browser",
"call_status": "not_picked_up",
"call_summary": "User and assistant exchange greetings, with assistant introducing themselves as Alex.",
"messages": [
{
"role": "user",
"content": "Hi"
},
{
"role": "assistant",
"content": "\nHello. Thank you for answering. My name is Alex."
},
{
"role": "user",
"content": "Hello?"
},
{
"role": "assistant",
"content": "Yes yes"
}
],
"context": "{\"name\": \"YiMing HAN\", \"email\": \"hanyiming1995@gmail.com\", \"number\": \"+14165551234\"}",
"form_fills": [
{
"title": "Form Title",
"values": {
"Email": "xxx@gmail.com",
"Phone Number": "+1416xxx1234",
"Options": null
}
}],
"created_at": "2026-01-30T14:48:36.371886"
}
```
## Field Reference
| Field | Type | Description |
| ------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `call_id` | string | Unique identifier for the call |
| `workflow_id` | string | ID of the workflow that handled the call |
| `workflow_name` | string | Name of the workflow |
| `phone_number_from` | string | The originating phone number (or `browser` for web calls) |
| `phone_number_to` | string | The destination phone number (or `browser` for web calls) |
| `call_status` | string | Status of the call (e.g., `success`, `not_picked_up`) |
| `call_summary` | string | AI-generated summary of the call |
| `messages` | array | Full conversation transcript with `role` and `content` for each message |
| `context` | string | JSON string containing custom context data passed to the workflow (e.g., name, email, phone number) |
| `form_fills` | array | Array of forms filled out during the call, where each entry contains a `title` (string) and `values` (object mapping field names to values or null). This will only be included if you have forms in your workflow. |
| `created_at` | string | ISO 8601 timestamp when the call was created |
## Handling Webhooks
Your webhook endpoint should:
1. Accept POST requests with JSON content
2. Respond with a 2xx status code to acknowledge receipt
3. Process the webhook asynchronously if needed to avoid timeouts
### Example Handler (Node.js)
```javascript theme={null}
app.post('/webhook/callcow', (req, res) => {
const payload = req.body;
console.log('Call completed:', payload.call_id);
console.log('Status:', payload.call_status);
console.log('Summary:', payload.call_summary);
// Parse context if needed
const context = JSON.parse(payload.context);
console.log('Caller:', context.name);
// Process the webhook data
// e.g., update your CRM, send notifications, etc.
res.status(200).send('OK');
});
```
## Best Practices
* **Handle duplicates**: Implement idempotency using the `call_id` field to handle potential duplicate deliveries
* **Respond quickly**: Return a 2xx response promptly and process data asynchronously
* **Debug and Verify**: Webhook works on browser calls as well. So as soon as you updated your webhook you can trigger a call in your browser test it.
# White Labeling
Source: https://docs.callcow.ai/white-labeling/white-labeling
For agency owners, there is a common pattern to create many different organization to manage differnet client's projects.
For this usecase, we have introduced share billing for all our clients - Here's how to enable it:
1. Go into **/settings** page
2. On a free account - go to **"Parent Organization"** section and select the agency organization.
3. Select the parent oganization you would like to link for billing.
Now all your usage is tied to one account - and you can share analytics / stats with different clients without worrying about exposing other client's information
# Workflow Guide
Source: https://docs.callcow.ai/workflow-guides/custom-workflow
Here's a basic video guide to get started on custom workflows:
We are working hard to make custom workflows experience better for our users. If you have problems with set up, you can book a meeting with us [here](http://callcow.ai/schedule-custom).