canonical: https://jentic.com/apis/exotel.com/exotel

# Exotel API

Jentic publishes the only available OpenAPI specification for Exotel API, keeping it validated and agent-ready. Exotel is a cloud communications platform widely used in India and South-East Asia for cloud telephony, voice calls, and SMS. This subset covers core SMS send and call-status operations: sending single and bulk SMS, retrieving SMS message details, and fetching call details by CallSid. Authentication is HTTP Basic using your Exotel API key and token.

## For AI agents

Send single and bulk SMS through Exotel, look up SMS message status, and fetch the details of an Exotel voice call by its CallSid.

## Scope

Does not handle outbound voice campaigns, IVR flow design, email, or push notifications - use for sending SMS, retrieving SMS status, and fetching voice call details only.

## Capabilities

- Send a single SMS to a destination number from an Exotel virtual number
- Send a bulk SMS campaign with per-recipient dynamic message content
- Retrieve the delivery status and metadata of a specific SMS by SmsSid
- Fetch the call details, duration, and status of a voice call by CallSid
- Use account-scoped paths so multi-tenant agents can target the right Exotel account
- Authenticate per-account with API key and token over HTTPS

## Use cases

### Transactional SMS Notifications

Use POST `/Sms/send` to dispatch transactional SMS such as OTPs, order confirmations, or appointment reminders to Indian and South-East Asian numbers from an Exotel virtual number. Status can be confirmed with GET `/SMS/Messages/{SmsSid}.` Suitable for fintech, logistics, and healthcare flows where Exotel's regional regulatory compliance and DLT registration matter.

Example prompt: Call POST `/Sms/send` with To=+919876543210, From=<virtual_number>, and Body='Your OTP is 123456', then poll GET `/SMS/Messages/{SmsSid}` until Status is delivered.

### Bulk SMS Campaigns with Dynamic Content

POST `/Sms/bulksend` accepts a list of recipients with per-recipient dynamic content, letting a marketing or operations agent send a campaign in a single API call. This is more efficient than looping POST `/Sms/send` and matches Exotel's billing model for bulk sends.

Example prompt: Call POST `/Sms/bulksend` with a list of {To, Body} pairs derived from a customer segment and capture the returned per-recipient SmsSids.

### Call Outcome Reconciliation

After an Exotel voice call completes, an agent can call GET `/Calls/{CallSid}` to retrieve duration, status, recording URL, and from/to numbers. This is used to reconcile call outcomes into a CRM, score sales calls, or trigger downstream workflows when a customer was not reached.

Example prompt: Call GET `/Calls/{CallSid}` for a recently completed call, parse Duration and Status, and write both into the linked CRM contact.

### AI Notification Agent via Jentic

An AI agent that sends customer notifications loads Exotel's send and lookup operations through Jentic. The agent searches by intent ("send an sms via exotel"), loads the operation schema, and executes with vault-held basic-auth credentials so the API key and token never enter agent context.

Example prompt: Through Jentic, search 'send sms via exotel', load the POST `/Sms/send` operation, and execute it with the recipient's number and message body.

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| POST | `/Sms/send` | Send a single SMS |
| POST | `/Sms/bulksend` | Send a bulk SMS with dynamic content per recipient |
| GET | `/SMS/Messages/{SmsSid}` | Get details of an SMS by SmsSid |
| GET | `/Calls/{CallSid}` | Get details of a call by CallSid |

## Key resources

- **SMS** — Send single and bulk SMS messages and look up status
- **Calls** — Retrieve call details and status by CallSid

## Why Jentic

- **Setup:** Wiring the Exotel API by hand means encoding HTTP Basic auth, pointing at the right regional host under api or api.in, and tracking the SMS and call endpoints yourself. Through Jentic you install once, import Exotel from the API Directory, store the key and token once, and your agent calls it.
- **Permission scoping:** Exotel puts the account SID in the base path (`/v1/Accounts/{account_sid}`), so a rule can pin your agent to one account, and the message and call ids in paths like `/SMS/Messages/{SmsSid}` keep reads to a single record. You choose the operations it may call, so bulk send is not included unless you add it.
- **Credential handling:** Your Exotel key and token are stored once, encrypted, by your own Jentic One instance and injected as HTTP Basic auth at execution time. They never enter the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'send an sms via exotel' or 'get call details', and Jentic returns the matching Exotel operation with its input schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **Twilio API** — Twilio is a global SMS and voice provider with broader country coverage than Exotel
- **Plivo API** — Plivo offers similar SMS and voice capabilities with global routing
- **MessageBird SMS API** — MessageBird SMS adds Europe-leaning SMS coverage alongside Exotel's India-first reach

## FAQ

### Why is there no official OpenAPI spec for Exotel API?

Exotel does not publish an OpenAPI specification. Jentic generates and maintains this spec so that AI agents and developers can call Exotel API via structured tooling. It is validated against the live API and kept up to date. Get started with Jentic One, the self-hosted execution layer.

### What authentication does the Exotel API use?

The Exotel API uses HTTP Basic authentication with your account's API key as the username and API token as the password, both available from the Exotel dashboard. Through Jentic these credentials live in the encrypted vault and are injected per call so they never appear in agent prompts or logs.

### How do I send a bulk SMS with different content per recipient?

Use POST `/Sms/bulksend` and supply a list of recipients each with their own message body. Exotel returns a per-recipient SmsSid array so you can correlate delivery status. This is preferred over looping POST `/Sms/send` for campaigns.

### How do I check whether an SMS was delivered?

Call GET `/SMS/Messages/{SmsSid}` with the SmsSid returned at send time. The response includes Status (queued, sending, sent, delivered, failed) and any error code. Poll until Status is terminal or rely on Exotel status callbacks if you have those configured.

### How do I send a transactional SMS through Jentic?

Run pip install jentic, then search 'send sms via exotel', load the POST `/Sms/send` operation, and execute it with To, From (your Exotel virtual number), and Body. Jentic injects basic-auth credentials at execution time.

### What region does this API serve best?

Exotel is primarily a cloud communications provider for India and South-East Asia, with DLT-registered SMS routing for Indian numbers. For global SMS coverage compare against Twilio or Plivo.

### Can I limit what my agent is allowed to do with the Exotel API?

Yes. Because you run Jentic One yourself, your own rules decide which Exotel operations the agent may call, so you can grant read-only access with GET `/SMS/Messages/{SmsSid}` and GET `/Calls/{CallSid}` while withholding sending, or allow POST `/Sms/send` but not the higher-volume POST `/Sms/bulksend.` Since the account SID sits in the base path (`/v1/Accounts/{account_sid}`), a rule can pin the agent to a single Exotel account, and the SmsSid and CallSid in the read paths keep each lookup to one record. The API key and token you store are injected only for the operations you have permitted, so the agent cannot reach beyond the access you define.
