Developer Voice API

Programmatic AI Calling API for Developers & Platforms

Trigger outbound AI calls with one REST request, create and manage agents through the API, and receive each call's transcript, summary and extracted answers by webhook the moment it ends.

Updated

Four ways to connect Vistara AI

  1. Upload a spreadsheet (No code). Upload an Excel or CSV list in the dashboard, map the columns to your agent's greeting and launch a campaign with automatic retries. Excel campaigns →
  2. Connect your CRM or Google Sheets (No code). Sync leads in and call results out with Google Sheets, HubSpot, Salesforce or Zoho CRM. CRM integrations →
  3. Call the REST API (Developers). Start a call with one POST to /api/v1/calls/initiate and receive the transcript, summary, sentiment and extracted answers by webhook when it ends.
  4. Paste a prompt into your AI coding tool (Developers and app builders). Copy one prompt into Claude, Cursor, ChatGPT, Copilot, Lovable, Bolt or another AI coding tool. It sets up the agent, rings your phone and writes the integration code. Pick your AI tool →

RESTful API & Webhooks

Trigger outbound phone calls with a single JSON POST payload.

Post-Call Webhooks

One POST per call with the transcript, summary, sentiment, recording URL and the answers your agent was asked to extract.

Flat INR Developer Billing

No complex USD billing or unpredictable seat license fees.

Mid-Call Tool Calls Into Your API

The agent can hit your endpoints during the conversation and use the response in its next turn — real answers instead of callback promises.

Agents Through the API

Create, list and fetch voice agents with the same API key, so your product can set up an agent per customer or use case.

Where Businesses Use Vistara AI

In-Product Voice Notifications

Turn a critical event in your application into a phone call within seconds.

Verification & OTP Fallback

Voice verification when SMS delivery fails or is unavailable.

Embedded Calling for SaaS Platforms

Offer calling as a feature inside your own product without becoming a telephony company.

Workflow Automation

Add a phone-call step to an existing pipeline in your ERP, LMS or internal tooling.

Marketplace Order Confirmation

Confirm high-risk orders programmatically before fulfilment is triggered.

Scheduled Batch Jobs

Nightly jobs that queue tomorrow reminder calls from your own database.

Join 100+ Indian Businesses Automating Telecalling

Low-latency AI voice agents from ₹2.00 per minute. No setup fees, no subscription traps.

If you are building a product that needs to make phone calls, the buy-versus-build question is really about how much telephony you want to own. Building on raw carrier infrastructure means solving SIP, media handling, jitter, echo, concurrency, number provisioning and regulatory screening before you write a line of product code — and then keeping all of it running.

The Vistara AI calling API sits above that. You post a phone number and some context; you receive a webhook with structured results when it ends. Everything between — carrier routing, streaming speech recognition, reasoning, synthesis, retries — is handled. This page covers the integration model, the failure modes worth designing for, and where the API boundary sits.

REST
Trigger a Call in One POST
2,000/min
Call Requests Allowed
Webhooks
Results After Every Call
₹2.00–₹3.00
Per Minute, INR Billing

The Integration Model in Four Steps

The API surface is deliberately small. Most integrations use four endpoints and one webhook handler, and are working end to end inside a day.

  • Create the agent — Define the prompt, the voice, the allowed tools and the structured fields you want extracted. This is configuration, done once, not per call.
  • Trigger the call — Post the destination number, the agent ID and a JSON context object. You get back a call ID immediately; the call is queued and placed asynchronously.
  • Receive the result webhook — When the call ends your endpoint gets one event: call.completed with the results, or call.failed if the call did not connect (busy, no answer, failed).
  • Handle the completion payload — On completion you receive the transcript, recording URL, disposition and the structured fields the agent extracted, ready to write into your database.

Design your webhook handler to be idempotent and to return quickly. Acknowledge first, process asynchronously, and run a reconciliation job that fetches any call whose webhook you missed.

Quickstart: Trigger an Outbound Call in 10 Seconds

Pass the customer's phone number, the agent ID and any context about the customer in one authenticated JSON POST. Add the header x-call-type: test while you call your own phone:

cURL — Outbound AI Voice Bot Dispatchbash
curl -X POST https://app.vistaraai.in/api/v1/calls/initiate \
  -H "x-api-key: $VISTARA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "phone": "+919876543210",
    "agentId": "AGENT_UUID",
    "name": "Ravi",
    "metadata": { "lead_id": "L-1042" }
  }'

# Response: { "success": true, "callId": "7b840e61-…", "message": "Call initiated successfully" }

Webhook Receiver: Structured Results After Every Call

Once the call finishes, Vistara AI posts one event to the agent's webhook URL with the recording URL, transcript, summary, sentiment and extracted answers. Webhooks carry no signature, so protect the URL with a secret token:

Node.js / Express Webhook Handlerjavascript
// Express webhook handler (set the URL as the agent's webhook_url)
app.post("/webhooks/vistara/:token", express.json(), (req, res) => {
  if (req.params.token !== process.env.VISTARA_WEBHOOK_TOKEN) return res.sendStatus(404);
  res.sendStatus(200); // acknowledge first, then process

  const { event, callId, data } = req.body;
  if (event === "call.completed") {
    // data.transcript, data.summary, data.sentiment, data.answers, data.recordingUrl, data.metadata
    saveCallResult(callId, data);
  } else if (event === "call.failed") {
    markNotConnected(callId, data.status); // busy | no-answer | failed | canceled
  }
});

Failure Modes to Design For

Voice adds failure modes that a purely HTTP integration does not have, because there is a physical phone network and a human being involved. Handle these explicitly rather than treating any non-success as a generic error.

  • The call is never answered — The most common outcome by volume in outbound. Your data model needs attempt-level records, not just a single call result per contact.
  • Answered by voicemail — Dispositioned separately from a human answer. Treating these as connects will quietly corrupt every ratio you calculate.
  • Answered, then immediately hung up — Distinct from a completed call and diagnostically important — it usually points at your opening line rather than anything technical.
  • Partial extraction — The call completed but the customer did not answer every question. Make your fields nullable and decide what constitutes a usable result.
  • Transfer failed — The hot transfer was attempted and nobody picked up. Have a defined fallback — usually booking a callback — rather than leaving the customer stranded.
  • Duplicate triggers — Retried requests from your side. Call creation has no idempotency key, so do not blindly resend a request that timed out: mark it uncertain and let a reconciliation job check the call before retrying.

What the API Handles and What Stays Yours

A clear boundary makes estimation easier. This is the split.

ConcernHandled by Vistara AIStays with you
Carrier routing & PSTNYes—
Number provisioning & CLIYesChoosing which CLI per campaign
Speech recognition & synthesisYesChoosing the voice and language
Conversation reasoningYesWriting the prompt and guardrails
Retry scheduling & concurrencyYesSetting the policy
DND & calling-window screeningYesConfirming your campaign category
Recording & transcript storageYesYour own retention policy
Business logic & data model—Yours
Deciding who to call and when—Yours

Triggering Calls From Your Own Systems

The integration surface is deliberately small. If your system can send an HTTP request, it can place a call — no telephony knowledge required, and no need to understand SIP or carrier routing.

  • Outbound trigger — Post the destination number, the agent ID and a JSON object of context variables. The call is queued immediately and returns a call ID.
  • Result webhooks — Your endpoint receives one event per call when it ends — call.completed or call.failed — so your own system stays in sync without polling.
  • Completion payload — On completion you get the transcript, the recording URL, the disposition and the structured fields the agent extracted.
  • Mid-call tool calls — The agent can call back into your API during the conversation to check stock, fetch an outstanding balance, or reserve a slot, then speak the answer.
  • No-code paths — For teams without engineering bandwidth, Google Sheets, file upload and native CRM connectors cover most workflows without writing anything.

Frequently Asked Questions

How does the Vistara AI Calling API work?
Make an authenticated HTTP POST request with the destination phone number and agent prompt ID. Vistara handles carrier telephony and the conversation, then sends the call's results to your webhook when it ends.
How do we authenticate API requests?
With an API key issued from your dashboard, sent as a bearer token. Keys are scoped to your account, can be rotated, and should never be embedded in client-side code — call creation must happen from your backend.
Can the agent call our API during a conversation?
Yes. You define the available tools with their parameters, and the agent invokes them when the conversation requires it, then uses the response in its next turn. Keep these endpoints fast — the customer is waiting on the line, so a two-second lookup is audible as a pause.
Is there a sandbox for testing?
You can test end to end against your own phone numbers before pointing the integration at real customers, which exercises the full path including carrier behaviour. Because real telephony is involved, test calls consume talk minutes like any other call.
What rate limits apply?
Limits apply per account on call creation rather than on concurrent conversations, which scale with your volume. If you are planning a large batch, queue it through the API and let the platform pace the dialling rather than firing thousands of creation requests at once.
Can we self-host or run this on our own infrastructure?
The platform is delivered as a hosted service — the telephony routes and model infrastructure are what make the latency and compliance guarantees possible. For teams with strict data-residency requirements, the practical route is discussing retention, storage and sub-processor terms rather than self-hosting.
Can calls be triggered from Zapier, Make, or n8n?
Yes. Any of them can issue the authenticated HTTP request that starts a call, and can receive the completion webhook. Teams commonly use this to bridge tools that have no native integration, such as a legacy ERP or an internal admin panel.

Related Reading