# 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. List Start 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. Call Status # 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. Call Schedule # 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! Record And Clone And that's it! You are done! You can now use your cloned voice in all workflows Clone Voice # 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.