Voice APIs for developers

Voice tech,
made easy to build.

IVR Solutions gives developers simple REST APIs for calls, dialers, agents and logs — clean JSON over HTTPS, with ready-to-run code samples. Add voice to your product in an afternoon.

Explore the API Run in Postman
66
REST endpoints
10
Capability groups
JSON
over HTTPS
Bearer
Token auth
Click‑to‑Call · POST /api/c2c_post LIVE
# Bridge an agent and a customer in one request
curl -X POST https://api.ivrsolutions.in/api/c2c_post \
  -H "Authorization: Bearer ••••••••" \
  -F "did=+911143104567" \
  -F "ext_no=2101" \
  -F "phone=09876543210"

→ 200 OK
{
  "status": 200,
  "message": "Call connecting. Please wait...",
  "logid": 123456
}
Connected · agent ↔ customer · ~1.2s to ring
Number Masking · Click-Connect

Connect people,
hide their numbers.

Bridge a rider and a driver, a buyer and a seller, a patient and a clinic — over your DID, so neither party ever sees the other’s real number. The mapping lives only inside the session, so once the job’s done the link is gone. It’s the privacy layer behind Uber- and Ola-style “contact the driver” calling.

  • Real numbers stay private — both legs ring from your DID, never from each other.
  • Sessions expire — cancel or update a live call, and numbers can’t be harvested afterward.
  • Fully logged — pull per-session records to audit every masked conversation.
See the API POST /api/click_connect

Start in minutes.

Authenticate with your token, then pick a starting point. Each call is documented with copy-paste examples.

POST /api/c2c_post

Make your first call

Bridge an agent and a customer instantly with click-to-call.

Open
POST /api/create_text_dialer

Launch a campaign

Spin up an outbound auto-dialer from a text-to-speech template.

Open
GET /api/call_logs

Fetch call logs

Pull complete call history and reconcile results in JSON.

Open
POST /ivrappv2/buy_did

Buy a DID number

Search availability by region and purchase a virtual number.

Open

Everything voice, by API.

Ten capability groups across 66 endpoints — composable into anything from a “call me” button to an AI-driven outbound campaign.

Click‑to‑Call

Instantly bridge an agent and a customer over GET or POST. Perfect for callbacks and “call me” buttons.

Number Masking

Connect two people through your DID so neither sees the other’s real number — the privacy layer behind Uber-style calling.

Auto Dialer

Fire outbound calls from text-to-speech templates or pre-built IVR flows, one at a time or in bulk.

Campaigns

Start, stop and add numbers to dialer campaigns on the fly, and track every result.

AI Voice Bots

Stream live call audio to your WebSocket bot via the WSS Telephony Bridge — real-time speech-to-text, system prompts, DTMF and in-call transfers.

Text Templates

Create, list and check the status of text-to-speech templates for your dialers.

Agents

Add, edit and deactivate agents and extensions, set expiry and assign DID numbers.

Call Logs

Pull complete history across click-to-call, dialer and inbound. Filter, check status, add notes.

DID Numbers

List, search and provision virtual numbers, and manage contacts and call variables.

Webhooks

Register webhook URLs to receive real-time call events — rings, answers, hangups and DTMF.

Built for real workflows.

A few endpoints compose into complete voice journeys. Here’s how teams wire them together.

E-commerce

COD order confirmation

  1. Send a voice call with /api/dial_by_text — “Press 1 to confirm, 2 to cancel.”
  2. Capture the customer’s keypress (DTMF) inside your call flow.
  3. Update the order or route to an agent based on the input.
  4. Reconcile every result later via /api/dialer_logs.
Conversion

Instant “call me” callback

  1. Visitor taps a button; your backend calls /api/c2c_post.
  2. The platform rings your agent, then dials the customer.
  3. Both legs bridge — a live conversation in seconds.
  4. Track outcome with /api/get_call_status using the logid.
Growth

Outbound campaign blast

  1. Create the message with /api/create_text_dialer.
  2. Load your contacts via /api/add_to_ivrdialerbulk.
  3. Start (or pause) it with /api/change_dialer_status.
  4. Monitor delivery and responses in /api/dialer_logs.
AI / Realtime

AI voice bot on a live call

  1. Start the call with /api/dial_by_aivoicebot, pointing wss_url at your bot.
  2. Your bot receives start and media audio events over the WebSocket.
  3. Reply with response.audio.delta to speak; handle dtmf keypresses.
  4. Transfer to a human with session.transfer or end with session.hangup.
API Reference

Every endpoint.

64 REST endpoints, grouped by capability. Expand any call for its parameters and example payloads, or test them live in Postman.

Need a token? Sign in to IVR Solutions, then open Settings → API token — or Integrations → API documentation — and send it as a Bearer token in the Authorization header.

Click to Call 4

Instantly bridge an agent and a customer. The platform calls the agent first, then the customer, and connects them — ideal for support callbacks, sales follow-ups and "call me" buttons. Available as GET (query params) or POST (JSON).

GET /api/c2c_get Click To Call (GET)

Bridge an agent and a customer with a single GET request — ideal for links and webhooks that can only fire a URL.

How it works: Pass your token, the did to show as caller ID, the agent's ext_no and the customer's phone as query parameters. The platform rings the agent first, then dials the customer and bridges both legs.

Use it for click-to-call links, no-code tools and webhook actions that can only call a URL.

Parameters

tokenrequired string · query Bearer token for authentication
didrequired string · query DID number (your virtual number)
ext_norequired string · query Agent extension number
phonerequired string · query Customer phone number to call

Response 200

{
    "status": 200,
    "message": "Call connecting. Please wait...",
    "logid": 123456
}
POST /api/c2c_post Click To Call (POST)

Bridge an agent and a customer with a POST request — the standard way to trigger click-to-call from your backend.

How it works: Send the did (caller ID), the agent ext_no and the customer phone. The platform calls the agent, then the customer, and connects the two legs in about a second.

Use it for “call me” buttons, CRM click-to-dial, support callbacks and sales follow-ups.

Parameters

didrequired string DID number (your virtual number)
ext_norequired string Agent extension number
phonerequired string Customer phone number to call

Request body

{
    "did": "+911143104567",
    "ext_no": "2101",
    "phone": "09876543210"
}

Response 200

{
    "status": 200,
    "message": "Call connecting. Please wait...",
    "logid": 123456
}
POST /api/c2c_advance Click To Call (advanced)

Bridge two numbers with extra control — a spoken intro, scheduling and explicit first/second legs.

How it works: Pass the did, first_phone and second_phone (and optional body message, schedule_datetime/timezone). The platform calls the first leg, optionally plays the message, then dials and bridges the second.

Use it for scheduled callbacks, whisper announcements before connect and custom two-party bridges.

Parameters

body string
didrequired string
first_phonerequired string
schedule_datetime string
second_phonerequired string
timezone string

Request body

{
    "body": "Hello, connecting your call",
    "did": "+911143104567",
    "first_phone": "+919876543210",
    "schedule_datetime": "2025-12-31 13:00:00",
    "second_phone": "+919123456789",
    "timezone": "Asia/Kolkata"
}
POST /v1/click_to_call_record Click-to-call recordings

Retrieve recordings for click-to-call calls.

How it works: Call the endpoint to get recording references for bridged click-to-call calls.

Use it for QA, training and compliance review of callbacks.

Number Masking 3

Connect two people through your DID so neither party ever sees the other's real phone number — the privacy layer behind Uber/Ola-style "contact the driver" calling. Both legs ring from your DID, the platform bridges them, and you can update or cancel a live session and pull per-session logs. Use it for marketplaces, ride-hailing, deliveries, classifieds, real-estate and healthcare, where buyers and sellers must talk without exchanging personal numbers.

POST /api/click_connect Start a masked call (Click-Connect)

Bridge two people through your DID without revealing either party's real phone number — the same call-masking pattern Uber and Ola use to connect riders and drivers.

How it works: you pass both real numbers and a did. The platform calls the first party, then the second, and connects the two legs. Each party sees only your DID on their handset — never the other person's number. The mapping lives only inside the session, so once the call (or job) is over the link is gone and the numbers can never be harvested.

Use it for marketplaces, ride-hailing and deliveries, classifieds, real estate and healthcare — anywhere a buyer and seller must talk while keeping personal numbers private. Manage a live session with /api/click_connect_update (e.g. cancel it) and pull per-session records with /api/click_connect_logs.

Parameters

first_phonerequired string First party's phone number
second_phonerequired string Second party's phone number
didrequired string DID number to use as caller ID

Request body

{
    "first_phone": "+919876543210",
    "second_phone": "+919123456789",
    "did": "+911143104567"
}

Response 200

{
    "status": 200,
    "message": "Call connecting. Please wait...",
    "logid": 123457
}
POST /api/click_connect_update Manage a masked-call session

Update or cancel a live number-masking (Click-Connect) session.

How it works: Identify the session with did and first_number, then pass an action (e.g. cancel) and optional body message to change or drop the connection.

Use it for ending a masked call early or adjusting a session in flight.

Parameters

actionrequired string
body string
didrequired string
first_numberrequired string

Request body

{
    "action": "cancel",
    "body": "Hello, connecting your call",
    "did": "+911143104567",
    "first_number": "+919876543210"
}
POST /api/click_connect_logs Masked-call logs

Fetch logs for your number-masking (Click-Connect) sessions.

How it works: Pass an optional did and from_date/to_date range; the API returns who connected, when and for how long.

Use it for auditing privacy-masked conversations and reconciling marketplace calls.

Parameters

did string
from_date string
orderby string
to_date string

Request body

{
    "did": "+911143104567",
    "from_date": "2025-08-01",
    "orderby": "desc",
    "to_date": "2025-08-31"
}

Auto Dialer 13

Run outbound voice campaigns at scale. Schedule and send calls from text-to-speech templates or pre-built IVR call flows, add numbers (single or bulk) to a campaign, and start/stop dialers on the fly.

GET /api/get_callflow Get Call Flows

List every call flow (IVR) configured in your account, with its ID and name.

How it works: Send your token; the API returns all saved call flows so you can pick a flow_id to play on outbound calls.

Use it for populating a flow picker, or looking up a flow_id before calling dial_by_flow.

Response 200

{
    "status": 200,
    "data": [
        {
            "id": 1001,
            "name": "Welcome IVR",
            "description": "Main welcome menu"
        },
        {
            "id": 1002,
            "name": "Order Confirmation",
            "description": "COD order confirmation flow"
        },
        {
            "id": 1003,
            "name": "Feedback Survey",
            "description": "Post-call feedback collection"
        }
    ]
}
POST /api/dial_by_flow Dial and Play Flow ID

Place an outbound call and play a pre-built IVR call flow to the customer.

How it works: Pass the did_no, the flow_id to play and the customer_no. The platform dials the customer and runs the flow, capturing the keypresses defined in it; add schedule_datetime and timezone to send it later.

Use it for order confirmations, reminders, surveys and any menu-driven outbound call.

Parameters

did_norequired string Your DID Number
flow_idrequired string Your Call Flow ID
customer_norequired string Phone number to call (with 0 prefix)
schedule_datetime string Schedule call for later (format: YYYY-MM-DD HH:mm:ss)
timezone string Timezone for scheduled call

Request body

{
    "did_no": "+911143104567",
    "flow_id": "1001",
    "customer_no": "09871234567",
    "schedule_datetime": "2024-12-31 13:00:00",
    "timezone": "Asia/Kolkata"
}
POST /api/dial_by_text Dial and Play Text

Place an outbound call that speaks a text-to-speech message built from a template.

How it works: Pass the did_no, customer_no and a template_name, filling any Variable placeholders. The platform dials the customer and reads out the rendered message; schedule it with schedule_datetime.

Use it for OTP and voice alerts, personalized reminders and confirmations without recording audio.

Parameters

did_norequired string Your DID Number
flow_id string Call Flow ID for context and options (optional)
customer_norequired string Phone number to call (with 0 prefix)
template_namerequired string Name of the text template
Variable string Variables as per text template (comma-separated)
schedule_datetime string Schedule call for later (format: YYYY-MM-DD HH:mm:ss)
timezone string Timezone for scheduled call

Request body

{
    "did_no": "+911143104567",
    "flow_id": "1701",
    "customer_no": "09354123456",
    "template_name": "api_order_confirm",
    "Variable": "John,ORD12345,1500",
    "schedule_datetime": "2024-12-31 13:00:00",
    "timezone": "Asia/Kolkata"
}

Response 200

{
    "status": 200,
    "message": "Call initiated successfully",
    "call_id": "call_txt_abc123"
}
GET /api/get_dialers_list Get Auto Dialer List

List your auto-dialer campaigns with their IDs and status.

How it works: Send your token to get every dialer you've created, so you can pick a dialerid to load numbers into or start and stop.

Use it for showing a campaign dashboard, or looking up a dialerid before adding numbers.

Response 200

{
    "status": 200,
    "data": [
        {
            "id": 101,
            "name": "Order Confirmation Campaign",
            "did_no": "+911143104567",
            "status": "on",
            "start_time": "09:00",
            "end_time": "18:00",
            "no_of_calls": 5,
            "total_numbers": 1250,
            "completed": 890,
            "pending": 360
        },
        {
            "id": 102,
            "name": "Feedback Survey",
            "did_no": "+911143104568",
            "status": "off",
            "start_time": "10:00",
            "end_time": "17:00",
            "no_of_calls": 3,
            "total_numbers": 500,
            "completed": 500,
            "pending": 0
        }
    ]
}
POST /api/add_to_ivrdialer Add Number to Dialer

Add a single contact to an existing auto-dialer campaign.

How it works: Pass the dialerid with the number (and optional name / order_id). The contact joins the campaign's queue and is called when the dialer runs.

Use it for dripping new leads or COD orders into a running campaign one at a time.

Parameters

dialeridrequired integer Dialer ID
numberrequired string Phone number to add
name string Customer name (variable)
order_id string Order ID (variable)

Request body

{
    "dialerid": 101,
    "number": "09876543210",
    "name": "John Doe",
    "order_id": "ORD12345"
}

Response 200

{
    "status": true,
    "message": "Number added to dialer successfully"
}
POST /api/add_to_ivrdialerbulk Add Numbers to Dialer (Bulk)

Add many contacts to an auto-dialer campaign in one request.

How it works: Pass the dialerid and an array of numbers; all are queued for the campaign at once.

Use it for loading a full contact list or daily batch before starting a campaign.

Parameters

dialeridrequired integer Dialer ID
numbersrequired array Array of numbers with variables (max 100)

Request body

{
    "dialerid": 101,
    "numbers": [
        {
            "number": "09876543210",
            "name": "John Doe",
            "order_id": "ORD001"
        },
        {
            "number": "09876543211",
            "name": "Jane Smith",
            "order_id": "ORD002"
        },
        {
            "number": "09876543212",
            "name": "Bob Wilson",
            "order_id": "ORD003"
        }
    ]
}

Response 200

{
    "status": true,
    "message": "3 numbers added to dialer successfully"
}
POST /api/change_dialer_status Change Dialer Status

Start, pause or stop an auto-dialer campaign.

How it works: Pass the dialerid and the new status; the platform begins or halts dialing immediately.

Use it for launching a campaign, pausing during off-hours or stopping once a target is met.

Parameters

dialeridrequired integer Dialer ID
statusrequired string Status to set

Request body

{
    "dialerid": 101,
    "status": "on"
}

Response 200

{
    "status": true,
    "message": "Dialer status changed to on"
}
GET /api/customerlist Get Customer Lists

List the saved customer/contact lists in your account.

How it works: Send your token to retrieve every contact list with its name and ID.

Use it for choosing an audience when building a campaign.

Response 200

{
    "status": 200,
    "data": [
        {
            "id": 1,
            "name": "December Leads",
            "count": 1500,
            "created_at": "2024-12-01 10:00:00"
        },
        {
            "id": 2,
            "name": "Premium Customers",
            "count": 350,
            "created_at": "2024-11-15 14:30:00"
        }
    ]
}
POST /api/create_customerlist Create Customer List

Create a new named customer list to group contacts.

How it works: Pass a listname; the API creates an empty list you can then fill with contacts.

Use it for segmenting audiences — by city, product or campaign — before dialing.

Parameters

listnamerequired string Name for the customer list

Request body

{
    "listname": "January Campaign 2025"
}

Response 200

{
    "status": true,
    "message": "Customer list created successfully",
    "list_id": 15
}
POST /api/create_text_dialer Create Text Dialer

Create an outbound text-to-speech dialer campaign.

How it works: Define the name, did_no, calls-per-attempt (no_of_call), calling window (start_time/end_time) and the text_template_id to speak. The campaign is created ready for numbers.

Use it for setting up recurring TTS broadcasts — reminders, offers or alerts.

Parameters

namerequired string Dialer campaign name
did_norequired string DID number to use
no_of_callrequired integer Number of concurrent calls
start_timerequired string Start time (24Hr format HH:mm)
end_timerequired string End time (24Hr format HH:mm)
text_template_idrequired integer Text template ID to use
send_call_flow_id integer Call flow ID for language (Kannada: 5421, Tamil: 5422, English: 102, Telugu: 5423)

Request body

{
    "name": "Order Confirmation Dialer",
    "did_no": "+911143104567",
    "no_of_call": 5,
    "start_time": "09:00",
    "end_time": "18:00",
    "text_template_id": 101,
    "send_call_flow_id": 102
}

Response 200

{
    "status": true,
    "message": "Text dialer created successfully",
    "dialer_id": 105
}
POST /api/edit_text_dialer Edit Text Dialer

Update the settings of an existing text-to-speech dialer.

How it works: Pass the dialer id with any fields to change — name, did_no, calling window or text_template_id.

Use it for retuning a campaign's hours, message or pace without recreating it.

Parameters

idrequired integer Dialer ID to edit
name string Dialer campaign name
did_no string DID number to use
no_of_call integer Number of concurrent calls
start_time string Start time (24Hr format HH:mm)
end_time string End time (24Hr format HH:mm)
text_template_id integer Text template ID to use

Request body

{
    "id": 105,
    "name": null,
    "did_no": null,
    "no_of_call": null,
    "start_time": null,
    "end_time": null,
    "text_template_id": null
}

Response 200

{
    "status": true,
    "message": "Dialer updated successfully"
}
POST /api/add_to_dialer Add records to dialer (bulk)

Add a batch of records to a dialer campaign.

How it works: Pass a recordList array of contacts; all are queued for dialing in one call.

Use it for bulk-loading leads from a form, sheet or nightly export.

Parameters

recordList array List of records to dial

Request body

{
    "recordList": [
        {
            "number": "09876543210",
            "name": "John Doe"
        }
    ]
}
POST /v1/dial_by_flow_get Dial by flow (query style)

Trigger a flow-based outbound call with simple query parameters.

How it works: Pass your token, did, flow and phone (with optional body); the platform dials the number and plays the flow.

Use it for webhook actions and links that can only send query parameters.

Parameters

tokenrequired string API token
didrequired string Your DID number
flowrequired string Call flow id
phonerequired string Customer number
body string Optional call body

Request body

{
    "token": "YOUR_API_TOKEN",
    "did": "+911143104567",
    "flow": "1001",
    "phone": "09876543210",
    "body": ""
}

Agents 9

Manage who can take and make calls. Enable or disable agent extensions, add new agents, and assign DID numbers to agents.

POST /api/enable_disable_users Activate / Deactivate Agents

Turn an agent extension on or off.

How it works: Pass the ext_no and the desired status; a disabled agent can't make or receive calls until re-enabled.

Use it for suspending agents who've left a shift, are offboarding or are temporarily blocked.

Parameters

ext_norequired string Agent extension number
statusrequired string 0 for disable, 1 for enable

Request body

{
    "ext_no": "2101",
    "status": "1"
}
POST /ivrappv2/addagent Add Agent

Create a new agent with a login and extension.

How it works: Pass name, email, phonenumber and password; the agent is provisioned and can sign in to take calls.

Use it for onboarding new team members programmatically from your HR or admin tool.

Parameters

namerequired string Agent's full name
emailrequired string Agent's email address
phonenumberrequired string Agent's phone number (10 digits)
passwordrequired string Agent's login password (must contain uppercase, lowercase, number, special char)

Request body

{
    "name": "John Doe",
    "email": "john.doe@company.com",
    "phonenumber": "9876543210",
    "password": "SecurePass@123"
}

Response 200

{
    "status": true,
    "message": "Agent added successfully",
    "data": {
        "agent_id": 456,
        "ext_no": "2105",
        "name": "John Doe",
        "email": "john.doe@company.com"
    }
}
POST /ivrappv2/update_agent_did Update Agent DID

Assign or change the DID number tied to an agent.

How it works: Pass the agent_ext and the did_num; outbound calls from that agent then show the new DID.

Use it for giving agents local caller IDs or moving numbers between team members.

Parameters

agent_extrequired string Agent extension number
did_numrequired string DID number to assign

Request body

{
    "agent_ext": "2101",
    "did_num": "+911143104567"
}

Response 200

{
    "status": true,
    "message": "Agent DID updated successfully"
}
GET /api/get_agents List agents

List the agents in your account.

How it works: Send your token to retrieve all agents with their extensions and status.

Use it for team dashboards and looking up an extension before assigning calls.

Parameters

token string · query API token (alternative to Bearer header)
POST /api/get_extension List extensions

List all extensions configured in your account.

How it works: Call the endpoint to get every extension with its owner and state.

Use it for mapping extensions to agents and building routing UIs.

POST /api/get_extension_details Get extension details

Get the full configuration of a single extension.

How it works: Pass the ext_no to retrieve its settings, owner and assigned DID.

Use it for showing or editing one extension's setup.

Parameters

ext_no string

Request body

{
    "ext_no": "2101"
}
POST /api/deactivate_group_user Deactivate extension user

Deactivate the user on a group extension.

How it works: Pass the ext_no; that user can no longer use the extension until reactivated.

Use it for revoking access when someone leaves a shared line or team.

Parameters

ext_no string

Request body

{
    "ext_no": "2101"
}
POST /api/set_expiry Set extension expiry

Set an expiry date on an extension.

How it works: Pass the ext_no and expiry_date; the extension auto-disables after that date.

Use it for temporary agents, trials and contractor access.

Parameters

expiry_date string
ext_no string

Request body

{
    "expiry_date": "2025-12-31",
    "ext_no": "2101"
}
POST /api/add_group_user Add group user / extension

Create a new group extension with its user and call settings.

How it works: Pass name, extn_no, password and options like did_no, call_forwarding, expiry_date and kyc_required; the extension is provisioned ready to take calls.

Use it for onboarding team members onto shared DIDs with the right routing.

Parameters

call_forwardingrequired string Flag: "0" or "1"
connectionrequired string Flag: "0" or "1"
did_norequired string
email string
expiry_date string
extn_no string
kyc_required string Flag: "0" or "1"
name string
passwordrequired string
phone string
recording_idrequired string

Request body

{
    "call_forwarding": "1",
    "connection": "1",
    "did_no": "+911143104567",
    "email": "user@company.com",
    "expiry_date": "2025-12-31",
    "extn_no": "2101",
    "kyc_required": "0",
    "name": "John Doe",
    "password": "SecurePass@123",
    "phone": "09876543210",
    "recording_id": "2207"
}

Call Logs 9

Audit and reconcile every interaction. Fetch complete call history — click-to-call, auto-dialer and inbound — filter by number or type, check live call status and attach notes to records.

POST /api/call_logs Get Call Logs

Fetch your full call history for a date range.

How it works: Pass from_date and to_date; the API returns calls across click-to-call, dialer and inbound with status and timing.

Use it for reporting, reconciliation and syncing call activity into your CRM.

Parameters

from_date string Start date (YYYY-MM-DD)
to_date string End date (YYYY-MM-DD)

Request body

{
    "from_date": "2024-12-01",
    "to_date": "2024-12-31"
}

Response 200

{
    "status": 200,
    "data": [
        {
            "recordid": 12345,
            "did_no": "+911143104567",
            "client_no": "9876543210",
            "agent_no": "9123456789",
            "attended_by": "John Doe",
            "ext_no": "2101",
            "call_time": "2024-12-15 10:30:45",
            "call_duration": 185,
            "call_status": "answered",
            "call_type": "inbound",
            "recording_url": "https://calls.ivrsolutions.in/monitor/2024/12/15/rec_12345.mp3",
            "dtmf_input": "1"
        },
        {
            "recordid": 12346,
            "did_no": "+911143104567",
            "client_no": "9876543211",
            "agent_no": "9123456788",
            "attended_by": "Jane Smith",
            "ext_no": "2102",
            "call_time": "2024-12-15 11:15:22",
            "call_duration": 92,
            "call_status": "answered",
            "call_type": "inbound",
            "recording_url": "https://calls.ivrsolutions.in/monitor/2024/12/15/rec_12346.mp3",
            "dtmf_input": ""
        }
    ]
}
GET /api/calllog_by_number Get Call Logs by Number

Look up all calls involving a specific phone number.

How it works: Pass your token and the phone; the API returns every log entry for that number.

Use it for showing a contact's call history on their profile screen.

Parameters

tokenrequired string · query
phonerequired string · query Phone number to search

Response 200

{
    "status": 200,
    "data": [
        {
            "recordid": 12345,
            "did_no": "+911143104567",
            "client_no": "9876543210",
            "attended_by": "John Doe",
            "call_time": "2024-12-15 10:30:45",
            "call_duration": 185,
            "call_type": "inbound",
            "recording_url": "https://calls.ivrsolutions.in/monitor/2024/12/15/rec_12345.mp3"
        }
    ]
}
POST /api/click_to_call_log Get Click-to-Call Logs

Fetch logs specific to click-to-call (agent↔customer bridge) calls.

How it works: Call the endpoint to get click-to-call records with connection status and duration.

Use it for measuring callback success and agent response on click-to-call.

Response 200

{
    "status": 200,
    "data": [
        {
            "recordid": 56789,
            "did_no": "+911143104567",
            "agent_no": "9123456789",
            "client_no": "9876543210",
            "agent_name": "John Doe",
            "call_time": "2024-12-15 14:22:10",
            "call_duration": 245,
            "call_status": "answered",
            "recording_url": "https://calls.ivrsolutions.in/monitor/c2c/2024/12/15/c2c_56789.mp3"
        }
    ]
}
GET /api/c2clog_by_number Get Click-to-Call Logs by Number

Look up click-to-call records for one phone number.

How it works: Pass your token and the phone to get that number's click-to-call history.

Use it for tracing a specific customer's callback attempts.

Parameters

tokenrequired string · query
phonerequired string · query Phone number to search

Response 200

{
    "status": 200,
    "data": [
        {
            "recordid": 56789,
            "did_no": "+911143104567",
            "agent_no": "9123456789",
            "client_no": "9876543210",
            "call_time": "2024-12-15 14:22:10",
            "call_duration": 245,
            "recording_url": "https://calls.ivrsolutions.in/monitor/c2c/2024/12/15/c2c_56789.mp3"
        }
    ]
}
POST /api/dialer_logs Get Dialer Logs

Fetch the results of an auto-dialer campaign.

How it works: Pass the dialerid to get every attempted call with answer status, keypresses and outcome.

Use it for reconciling campaign delivery and acting on customer responses.

Parameters

dialerid integer Filter by specific dialer ID (optional)

Request body

{
    "dialerid": 101
}

Response 200

{
    "status": 200,
    "data": [
        {
            "id": 78901,
            "dialer_id": 101,
            "dialer_name": "Order Confirmation Campaign",
            "customer_no": "9876543210",
            "call_time": "2024-12-15 10:05:30",
            "call_duration": 45,
            "call_status": "answered",
            "dtmf_input": "1",
            "attempts": 1
        },
        {
            "id": 78902,
            "dialer_id": 101,
            "dialer_name": "Order Confirmation Campaign",
            "customer_no": "9876543211",
            "call_time": "2024-12-15 10:06:15",
            "call_duration": 0,
            "call_status": "no_answer",
            "dtmf_input": "",
            "attempts": 2
        }
    ]
}
GET /api/get_call_status Get Call Status Options

Get the list of call status values you can filter by or set on records.

How it works: Send your token to retrieve the supported status labels (e.g. answered, missed, busy).

Use it for building status filters and dropdowns in your dashboard.

Response 200

{
    "status": true,
    "data": [
        {
            "id": 1,
            "name": "Interested"
        },
        {
            "id": 2,
            "name": "Not Interested"
        },
        {
            "id": 3,
            "name": "Call Back Later"
        },
        {
            "id": 4,
            "name": "Wrong Number"
        },
        {
            "id": 5,
            "name": "DND"
        },
        {
            "id": 6,
            "name": "Converted"
        },
        {
            "id": 7,
            "name": "Follow Up Required"
        }
    ]
}
POST /api/update_call_note Update Call Remark

Attach a status and note to a call record.

How it works: Pass the record_id with call_status, call_type and call_remark; the record is updated for reporting.

Use it for logging dispositions — interested, callback, wrong number — against each call.

Parameters

record_idrequired string Record ID from call_log API or webhook
call_statusrequired integer Status ID from get_call_status API
call_typerequired string Type of call
call_remark string Remark or note for the call (optional)

Request body

{
    "record_id": "12345",
    "call_status": 1,
    "call_type": "incoming",
    "call_remark": "Customer interested in premium plan. Follow up next week."
}

Response 200

{
    "status": true,
    "message": "Call note updated successfully"
}
POST /v1/all_call_logs Fetch all call logs (incremental)

Pull new call logs since your last sync, across all call types.

How it works: Pass the last seen IDs (last_c2c_log_id, last_call_log_id, last_dialer_log_id); the API returns only newer records so you never refetch.

Use it for efficient incremental syncs into a data warehouse or CRM.

Parameters

last_c2c_log_id string Last click-to-call log id you have
last_call_log_id string Last call log id you have
last_dialer_log_id string Last dialer log id you have

Request body

{
    "last_c2c_log_id": "0",
    "last_call_log_id": "0",
    "last_dialer_log_id": "0"
}
POST /v1/add_note Add a note to a call

Attach a note and status to a specific call.

How it works: Pass the sip_call_id with the note, call_type and status to annotate that call.

Use it for logging dispositions and context against individual calls.

Parameters

sip_call_idrequired string SIP call id of the call
noterequired string Note text
call_type string incoming | outgoing | c2c | dialer
status string Call status code

Request body

{
    "sip_call_id": "abc123.45@sip",
    "note": "Customer requested a callback",
    "call_type": "c2c",
    "status": "1"
}

DID 11

Manage your virtual (DID) numbers. List the numbers you own, search availability by region, and purchase new DID numbers programmatically.

POST /ivrappv2/get_dids Get Linked DIDs

List the DID (virtual) numbers linked to your account.

How it works: Call the endpoint to retrieve every DID you own with its details.

Use it for populating caller-ID pickers and auditing your number inventory.

Response 200

{
    "status": true,
    "data": [
        {
            "did_number": "+911143104567",
            "region": "Delhi",
            "status": "active",
            "type": "landline"
        },
        {
            "did_number": "+918043104568",
            "region": "Bangalore",
            "status": "active",
            "type": "landline"
        },
        {
            "did_number": "+911onal60123",
            "region": "Toll-Free",
            "status": "active",
            "type": "tollfree"
        }
    ]
}
GET /ivrappv2/get_did_region Get DID Regions

List the regions where DID numbers are available to buy.

How it works: Send your token to get the regions you can search and purchase numbers in.

Use it for driving a region selector before searching for a number.

Response 200

{
    "status": true,
    "message": "Region found successfully",
    "data": [
        {
            "id": 1,
            "name": "Delhi",
            "code": "011"
        },
        {
            "id": 2,
            "name": "Bangalore",
            "code": "080"
        },
        {
            "id": 3,
            "name": "Mumbai",
            "code": "022"
        },
        {
            "id": 4,
            "name": "Chennai",
            "code": "044"
        },
        {
            "id": 5,
            "name": "Hyderabad",
            "code": "040"
        },
        {
            "id": 6,
            "name": "Faridabad",
            "code": "0129"
        }
    ]
}
POST /ivrappv2/search_dids Search Available DIDs

Search for DID numbers available to purchase.

How it works: Pass country_code, region and an optional search_pattern; the API returns matching available numbers.

Use it for letting customers pick a local or vanity number to buy.

Parameters

country_coderequired string Country code
regionrequired string Region ID (1: Delhi, 2: Bangalore, 6: Faridabad)
search_pattern string Search pattern type (optional)
pattern string Pattern to search (optional)

Request body

{
    "country_code": "IN",
    "region": "1",
    "search_pattern": null,
    "pattern": "4310"
}

Response 200

{
    "status": true,
    "message": "Numbers found",
    "cost": "500",
    "currency": "INR",
    "data": [
        "+911143104501",
        "+911143104502",
        "+911143104503",
        "+911143104504",
        "+911143104505"
    ]
}
POST /ivrappv2/buy_did Buy DID

Purchase a DID number and add it to your account.

How it works: Pass the country and the chosen number; the platform provisions it and links it to you.

Use it for self-serving new local presence or campaign numbers.

Parameters

countryrequired string Country code
numberrequired string DID number to purchase

Request body

{
    "country": "IN",
    "number": "+911143104501"
}

Response 200

{
    "status": true,
    "message": "Did added to your account",
    "data": "+911143104501"
}
POST /api/get_dids List linked DIDs

List the DID numbers linked to your account.

How it works: Call the endpoint to retrieve every DID with its status and assignment.

Use it for auditing numbers and choosing caller IDs.

POST /api/get_available_dids Search available DIDs

Search for purchasable DID numbers by region and pattern.

How it works: Pass did_region, availabilty_level, pattern_last_digits and size to get matching available numbers.

Use it for offering customers a choice of local or memorable numbers.

Parameters

availabilty_level string
did_region string
pattern_last_digits string
size string

Request body

{
    "availabilty_level": "1",
    "did_region": "1",
    "pattern_last_digits": "4310",
    "size": "20"
}
POST /api/add_manage_did Provision & manage DID

Provision and configure a DID — routing, owner and options — in one call.

How it works: Pass did_no with settings like extn_no, call_forwarding, connection, expiry_date and kyc_required to set up or update the number.

Use it for fully automating number onboarding and routing changes.

Parameters

call_forwardingrequired string Flag: "0" or "1"
connectionrequired string Flag: "0" or "1"
did_no string
email string
expiry_date string
extn_no string
kyc_required string Flag: "0" or "1"
name string
passwordrequired string
phone string
recording_idrequired string

Request body

{
    "call_forwarding": "1",
    "connection": "1",
    "did_no": "+911143104567",
    "email": "user@company.com",
    "expiry_date": "2025-12-31",
    "extn_no": "2101",
    "kyc_required": "0",
    "name": "John Doe",
    "password": "SecurePass@123",
    "phone": "09876543210",
    "recording_id": "2207"
}
POST /api/manage_group_did Manage group DID

Configure a DID shared by a group or team.

How it works: Pass did_no with the group's settings — call_forwarding, connection, expiry_date and kyc_required — to manage the shared number.

Use it for running a team hotline or department line by API.

Parameters

call_forwardingrequired string Flag: "0" or "1"
connectionrequired string Flag: "0" or "1"
did_no string
expiry_date string
extn_no string
kyc_requiredrequired string Flag: "0" or "1"
name string
passwordrequired string
recording_idrequired string

Request body

{
    "call_forwarding": "1",
    "connection": "1",
    "did_no": "+911143104567",
    "expiry_date": "2025-12-31",
    "extn_no": "2101",
    "kyc_required": "0",
    "name": "John Doe",
    "password": "SecurePass@123",
    "recording_id": "2207"
}
POST /api/manage_group_did_as_sipuser Manage group DID (SIP user)

Configure a group DID for a SIP / softphone user.

How it works: Pass did_no with the SIP user's details (email, phone) and routing options to provision them on the shared number.

Use it for putting softphone or WebRTC agents on a shared DID.

Parameters

call_forwardingrequired string Flag: "0" or "1"
connectionrequired string Flag: "0" or "1"
did_no string
email string
expiry_date string
extn_no string
kyc_requiredrequired string Flag: "0" or "1"
name string
passwordrequired string
phone string
recording_idrequired string

Request body

{
    "call_forwarding": "1",
    "connection": "1",
    "did_no": "+911143104567",
    "email": "user@company.com",
    "expiry_date": "2025-12-31",
    "extn_no": "2101",
    "kyc_required": "0",
    "name": "John Doe",
    "password": "SecurePass@123",
    "phone": "09876543210",
    "recording_id": "2207"
}
POST /api/get_live_did Get live DID status

Check the live status of your DID numbers.

How it works: Send your token to see which DIDs are active and reachable right now.

Use it for uptime dashboards and routing health checks.

Parameters

token string API token (alternative to the Bearer header)

Request body

{
    "token": "YOUR_API_TOKEN"
}
POST /api/get_live_did_agent Get live DID status (agent)

Check live DID status in the agent's context.

How it works: Send your token to get the agent's DIDs and their current state.

Use it for showing agents whether their lines are live.

Parameters

token string API token (alternative to the Bearer header)

Request body

{
    "token": "YOUR_API_TOKEN"
}

Voice Bots 5

Place outbound calls answered by AI / WSS voice bots. Calls bridge to your WebSocket server for real-time, bidirectional audio via the WSS Telephony Bridge.

POST /api/get_voicebot List voice bots

List the AI voice bots configured in your account.

How it works: Call the endpoint to get each bot with its ID, so you can reference one when placing AI calls.

Use it for populating a bot selector before dialing with an AI agent.

POST /api/dial_by_aivoicebot Dial by AI voice bot

Place an outbound call answered by an AI voice bot over your WebSocket bridge.

How it works: Pass the customer_no and a wss_url (plus optional system_msg, sttlanguage_code and wss_header). The call connects to your WebSocket for real-time, two-way audio — speech-to-text in, audio out, with in-call transfers and DTMF.

Use it for AI receptionists, lead qualification calls and conversational reminders.

Parameters

Voicechat_id string ID of the configured voice bot to use
ai_agent_ext string Agent extension to bridge for hybrid (bot + human) routing
connect_ws_after_answer string Connect the WebSocket only after the call is answered ("0" or "1")
customer_no string Customer phone number to call (prefix 0 or use country code)
schedule_datetime string Optional schedule time, format "YYYY-mm-dd H:i:s"
sip_url string SIP target the bot can transfer/bridge to
sttlanguage_code string Speech-to-text language code, e.g. en-IN, hi-IN
system_msg string System prompt that defines the AI agent’s behaviour
text string Optional opening line the bot speaks when the call connects
timezone string Timezone for scheduling, e.g. Asia/Kolkata
wss_header string Header sent when the bridge connects to your WSS endpoint, e.g. "Authorization: Bearer YOUR_TOKEN"
wss_url string Your WebSocket Secure (WSS) endpoint the call audio streams to/from, e.g. wss://your-bot.example.com/voice

Request body

{
    "Voicechat_id": "4821",
    "ai_agent_ext": "2101",
    "connect_ws_after_answer": "1",
    "customer_no": "09876543210",
    "schedule_datetime": "2025-12-31 13:00:00",
    "sip_url": "sip:bot@example.com",
    "sttlanguage_code": "en-IN",
    "system_msg": "You are a helpful assistant.",
    "text": "Hi, this is an automated call.",
    "timezone": "Asia/Kolkata",
    "wss_header": "Authorization: Bearer xyz",
    "wss_url": "wss://example.com/stream"
}
POST /api/dial_by_voicebot Dial by voice bot

Place an outbound call handled by a pre-built voice bot.

How it works: Pass the customer_no, did_num and the Voicechat_id (with optional system_msg/text). The platform dials and runs the chosen bot.

Use it for running a saved conversational bot without wiring up your own WebSocket.

Parameters

Voicechat_id string ID of the configured voice bot to use
customer_no string Customer phone number to call (prefix 0 or use country code)
did_num string Your DID number to place the call from
schedule_datetime string Optional schedule time, format "YYYY-mm-dd H:i:s"
system_msg string System prompt that defines the AI agent’s behaviour
text string Optional opening line the bot speaks when the call connects
timezone string Timezone for scheduling, e.g. Asia/Kolkata

Request body

{
    "Voicechat_id": "4821",
    "customer_no": "09876543210",
    "did_num": "+911143104567",
    "schedule_datetime": "2025-12-31 13:00:00",
    "system_msg": "You are a helpful assistant.",
    "text": "Hi, this is an automated call.",
    "timezone": "Asia/Kolkata"
}
POST /v1/get_voicebots List voice bots

List your AI voice bots.

How it works: Call the endpoint to get each bot with its ID and metadata.

Use it for choosing a bot when configuring AI calls.

POST /v1/get_voicebot_data Get voice bot data

Get a voice bot's configuration and training data.

How it works: Pass the voicebot_id (and the aitraingdata flag) to retrieve its setup and knowledge.

Use it for inspecting or syncing a bot's training before deploying it.

Parameters

voicebot_idrequired string Voice bot id
aitraingdata string Include AI training data (0|1)

Request body

{
    "voicebot_id": "4821",
    "aitraingdata": "1"
}

Text Templates 3

Create and manage text-to-speech templates for dialers.

POST /api/create_text_template Create text template

Create a reusable text-to-speech template.

How it works: Pass a template_name and the text_content (with variable placeholders); it's saved for use by TTS dialers.

Use it for standardizing OTP, reminder and alert scripts across campaigns.

Parameters

template_name string
text_content string

Request body

{
    "template_name": "api_order_confirm",
    "text_content": "Press 1 to confirm your order."
}
POST /api/check_text_template_status Check text template status

Check whether a text template is approved and ready to use.

How it works: Pass the template_name to get its current status.

Use it for confirming a template is live before launching a dependent campaign.

Parameters

template_name string

Request body

{
    "template_name": "api_order_confirm"
}
GET /api/get_text_template_list List text templates

List your text-to-speech templates.

How it works: Send your token to retrieve every template with its name and status.

Use it for showing a template picker when building TTS dialers.

Parameters

token string · query API token (alternative to Bearer header)

Contacts 5

Save and look up contacts, and list call variables.

POST /api/add_contact Add contact

Save a contact to your address book.

How it works: Pass name, number and country_code; the contact is stored for lookups and screen-pops.

Use it for syncing CRM contacts so agents see names on incoming calls.

Parameters

country_code string
name string
number string

Request body

{
    "country_code": "+91",
    "name": "John Doe",
    "number": "09876543210"
}
POST /api/get_contact_info Get contact info by number

Look up a saved contact by phone number.

How it works: Pass the phone to get the matching contact's stored details.

Use it for caller-ID screen-pops and click-to-dial lookups.

Parameters

phone string

Request body

{
    "phone": "09876543210"
}
POST /api/get_contact_info_agent Get contact info (agent context)

Look up a contact in the calling agent's context.

How it works: Pass the phone to resolve the contact as visible to the agent handling the call.

Use it for powering agent screen-pops scoped to their own contacts.

Parameters

phone string

Request body

{
    "phone": "09876543210"
}
GET /api/get_variables List call/template variables

List the variables available for call flows and text templates.

How it works: Send your token to get the variable keys you can insert into messages and flows.

Use it for showing available merge fields when authoring templates.

Parameters

token string · query API token (alternative to Bearer header)
POST /v1/Caller_info Look up caller info

Resolve details about an inbound caller.

How it works: Pass the caller_number to get any stored contact and history for that caller.

Use it for instant screen-pops the moment a call rings.

Parameters

caller_numberrequired string Phone number to look up

Request body

{
    "caller_number": "09876543210"
}

Webhooks 1

Register webhook URLs to receive real-time call events.

POST /api/add_webhook_url Register webhook URL

Register a URL to receive real-time call events.

How it works: Pass your webhookurl and a secret_key; the platform POSTs events — rings, answers, hangups, DTMF — to that URL, signed with your key.

Use it for syncing call state into your app, triggering automations and verifying payloads.

Parameters

secret_key string
webhookurl string

Request body

{
    "secret_key": "whsec_abc123",
    "webhookurl": "https://yourapp.com/webhooks/ivr"
}

Integrations 1

Helper endpoints for CRM and lead integrations.

POST /api/get_data_for_leadcrm Get Lead CRM data

Fetch lead data formatted for CRM integration.

How it works: Call the endpoint to pull lead and call data ready to push into your CRM.

Use it for feeding leads and call outcomes into your sales pipeline.

Built around you

Every API is fully customizable.

These endpoints are a starting point, not a ceiling. Tell us your requirement — new endpoints, custom payloads, bespoke call flows — and our team will build it to fit how you work.