Create agents, attach tools, place calls and read transcripts from your own backend. Get told when a call ends through signed webhooks, or connect without code through Zapier and n8n.
Edesy AI Voice Agent has a public REST API under /api/v1 with a machine-readable OpenAPI spec. Server keys (vp_live_ or vp_test_) carry per-resource scopes and a default limit of 120 requests a minute. You can manage agents, functions, knowledge bases and phone numbers, place and read calls, read campaigns, trigger workflows and subscribe to signed webhooks.
What you need before your first request
| Item | Value |
|---|---|
| Base URL | https://voice-agent.edesy.in/api/v1 |
| OpenAPI spec | GET https://voice-agent.edesy.in/api/v1/openapi.json (no auth needed) |
| Authentication | Authorization: Bearer <key> or X-API-Key: <key> |
| Key types | vp_live_ (production), vp_test_ (non-production). Server-side only; never ship a key to a browser |
| Scopes | agents, functions, calls, phone_numbers, knowledge_base, workflows; each :read or :write. Write does not imply read |
| Rate limit | 120 requests per minute per key by default, with X-RateLimit-* headers and Retry-After on 429 |
| Rotation | New key issued first; the old key keeps working for a 24-hour grace period. Revocation is immediate |
| Tenancy | Each key is bound to one workspace. Another workspace's IDs return 404 |
| Errors | { success: false, error, code }. Branch on code, which is stable |
| Pagination | limit (default 50, max 100) and offset; responses include total |
Everything the dashboard does for agent setup and calling
GET, POST /agents and GET, PATCH, DELETE /agents/{id}. Set the prompt, greeting, language, LLM, voice, telephony, transfer and variables. A PATCH is live on the next call.
GET, POST /functions and GET, PATCH, DELETE /functions/{id}. HTTP tools the agent calls mid-conversation, with {{placeholders}} and response mapping.
POST /calls places an outbound call. GET /calls lists them, GET /calls/{id} returns the summary, disposition, extraction and recording, and GET /calls/{id}/transcript returns the turns.
GET /campaigns, GET /campaigns/{id} and GET /campaigns/{id}/calls to track campaign progress and results from your system.
GET, POST /knowledge-base and GET, PATCH, DELETE /knowledge-base/{id} to manage the knowledge bases your agents search.
GET, POST /phone-numbers and GET, PATCH, DELETE /phone-numbers/{id}. Import numbers you already own (BYOP) and assign them to agents.
POST /workflows/{id}/trigger starts a workflow from your system, for example when a lead is created in your CRM.
POST /interview-session creates a browser WebRTC session and sends the agent into it, for voice calls inside your own web app.
POST /api/v1/calls needs agentId and phoneNumber. variables fill the agent's {{variables}}, metadata is echoed back on the call record, and callbackUrl is notified once when the call ends. The response returns as soon as the call is dispatched.
curl -X POST https://voice-agent.edesy.in/api/v1/calls \
-H "Authorization: Bearer $EDESY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"agentId": 1042,
"phoneNumber": "+9198XXXXXXXX",
"variables": { "customer_name": "Test Customer", "order_id": "ORD-1001" },
"metadata": { "crm_lead_id": "L-001" },
"callbackUrl": "https://example.com/hooks/call-ended"
}'
# Response
{ "success": true, "data": { "conversationId": "c3f1...", "callSid": "CA9f...", "status": "initiated" } }
# Later: read the outcome
curl https://voice-agent.edesy.in/api/v1/calls/c3f1... \
-H "Authorization: Bearer $EDESY_API_KEY"Signed, retried deliveries you set up under Settings, Webhooks
The call has ended, with the transcript and call metadata.
Sent once when all post-call analysis is complete: summary, extraction and transcript. The best single event for most integrations.
The call did not connect: busy, no answer or rejected.
Post-call data extraction has finished, with the fields you defined on the agent.
The recording has been uploaded. recording_url is a signed link tied to that call.
Each delivery is signed with HMAC-SHA256 over "{timestamp}.{raw body}" using your whsec_ secret. Up to 5 attempts with backoff; HTTP 410 disables the subscription. Test, resend and rotate the secret from the dashboard.
The signature header has the form t=<timestamp>,v1=<hex>. Recompute the HMAC over the timestamp, a dot and the raw request body, and compare in constant time. Check the header name and payload shape in the webhook docs.
// Node.js
const crypto = require('crypto');
function verify(rawBody, header, secret) {
const parts = Object.fromEntries(header.split(',').map(p => p.split('=')));
const expected = crypto
.createHmac('sha256', secret)
.update(`${parts.t}.${rawBody}`)
.digest('hex');
return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1));
}Connect without writing a backend, or use a typed client
Triggers: call finished, call not connected, recording ready, data extracted and form submission. Action: start call. Search: find call.
A community node for n8n with five ready-made workflow templates, so you can start calls and react to call results inside n8n.
Python, Go, Node and React SDKs are available. Ask us for access. You can also generate a typed client from the OpenAPI spec.
Let the agent call your APIs during a call. Store API keys as credentials and reference them by name. Function templates cover Shopify, Stripe, Zendesk, HubSpot, Twilio SMS and SendGrid.
In the dashboard, open Settings, API Keys and create a key with the scopes you need. It is shown once, so store it in your secrets manager.
POST /api/v1/agents, or build the agent in the dashboard from a template and note its ID.
POST /api/v1/calls with agentId and phoneNumber. Send E.164 numbers for international destinations.
Subscribe to call.analyzed, or poll GET /api/v1/calls/{id}. Summary, disposition and extraction are null until post-call analysis finishes.
Common integration questions
From ₹4/min on plans and credit packs, ₹6/min pay as you go. Bring your own AI keys for a platform fee from ₹1/min. New accounts get ₹50 free credit. Prices exclude 18% GST.
Share your use case and volume. We reply within one working day with a setup plan and pricing.
Explore more comparisons, alternatives, and resources
Create a key, place your first call and subscribe to call.analyzed. ₹50 free credit on sign-up, no card needed.
Real demo calls showcasing low latency and natural conversations in multiple Indian languages
AI voice agent qualifying B2B leads for corporate gifting. Ultra-low latency with 1-2 second response time. Bilingual conversation in Hindi and English.
Audio player powered by Google Drive
Open in DriveAI voice agent handling admission inquiries and appointment booking for educational institutes in Malayalam language.
Audio player powered by Google Drive
Open in DriveAI voice agent handling admission inquiries and appointment booking for educational institutes in Tamil language.
Audio player powered by Google Drive
Open in DriveAI voice agent qualifying leads for solar installation company in Assamese language. Natural conversation flow with product inquiry handling.
Audio player powered by Google Drive
Open in DriveAI voice bot helping patients book hospital appointments in Bengali. Natural conversation with availability checking and confirmation.
Audio player powered by Google Drive
Open in DriveAI voice bot helping patients book hospital appointments in Hindi. Handles doctor selection, time slot booking, and confirmation.
Audio player powered by Google Drive
Open in DriveAI voice bot helping patients book hospital appointments in Telugu. Natural conversation flow for healthcare scheduling.
Audio player powered by Google Drive
Open in DriveFrom ₹4/min on plans and credit packs, ₹6/min pay as you go. ₹50 free credit on sign-up.