Once you have a number and an API key, your first call is one cURL request: send from, to and text, and Edesy calls the number and speaks the text. This page takes about five minutes. Buying a number needs approved KYC first, which takes about 24 hours, so start that early.
Before you start#
| You need | How to get it |
|---|---|
An Edesy number you own (the from) |
Numbers page in voice-app.edesy.in. See Search and Buy |
| Wallet balance | Billing page. Calls are refused with 402 when the wallet is too low |
An API key (sk_...) |
API Keys page. See Authentication |
export EDESY_KEY="sk_your_api_key_here"
1. Place a call that speaks a message#
curl -X POST https://voice-api.edesy.in/v1/calls \
-H "Authorization: Bearer $EDESY_KEY" \
-H "Content-Type: application/json" \
-d '{
"from": "+9180XXXXXXXX",
"to": "+9198XXXXXXXX",
"text": "Hello! This is a test call from Edesy. Goodbye."
}'
Response 201:
{
"data": {
"call_sid": "CA_6f1c2d3e-0000-4000-8000-000000000000",
"sid": "CA_6f1c2d3e-0000-4000-8000-000000000000",
"account_sid": "2b7e0a1c-0000-4000-8000-000000000000",
"from": "+9180XXXXXXXX",
"to": "+9198XXXXXXXX",
"direction": "outbound-api",
"status": "queued",
"created_at": "2026-10-28T09:30:00Z"
},
"meta": { "request_id": "req_...", "timestamp": "2026-10-28T09:30:00Z" }
}
Your phone rings. When you answer, you hear the text. For Hindi, add "language": "hi-IN" and write the text in Hindi.
2. Check the call#
curl https://voice-api.edesy.in/v1/calls/CA_6f1c2d3e-0000-4000-8000-000000000000 \
-H "Authorization: Bearer $EDESY_KEY"
After the call ends the response includes status, duration (seconds), price, hangup_cause, sip_response_code and call_outcome. See Call Events and Outcomes.
3. Get status callbacks#
Add status_callback to receive each lifecycle change on your server:
curl -X POST https://voice-api.edesy.in/v1/calls \
-H "Authorization: Bearer $EDESY_KEY" \
-H "Content-Type: application/json" \
-d '{
"from": "+9180XXXXXXXX",
"to": "+9198XXXXXXXX",
"text": "Your order has been shipped.",
"status_callback": "https://example.com/edesy/status",
"custom_parameters": { "order_id": "ORD-1042" }
}'
Your endpoint receives a JSON POST with CallSid, CallStatus, Duration, HangupReason, CallOutcome and your custom_parameters under Custom. See Status Callbacks.
Next steps#
- Control the call from your server with an answer URL that returns VoiceML: Make a Call and VoiceML Reference.
- Connect an AI bot: Media Streams or Conversation Relay.
- Answer inbound calls: Inbound Routing.