Exotel Voice API

Place and control outbound voice calls.

Operations 1

POST /v1/Accounts/{sid}/Calls/connect.json Connect two numbers or connect a number to a call flow #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/exotel-voice-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

exotel-voice-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Exotel Voice API
  description: Exotel is an Indian cloud telephony and customer-engagement (CPaaS) platform.
  version: '1.0'
  contact:
    name: Exotel Developer Support
    url: https://developer.exotel.com
  x-grounding:
    confirmedEndpoints:
    - POST /v1/Accounts/{sid}/Calls/connect
    - GET /v1/Accounts/{sid}/Calls/{CallSid}
    - GET /v1/Accounts/{sid}/Numbers/{Number}
    - POST /v1/Accounts/{sid}/Sms/send
    - POST /v2/accounts/{sid}/campaigns
    - GET /v2/accounts/{sid}/campaigns/{campaign_id}
    - GET /v2/accounts/{sid}/campaigns/{campaign_id}/call-details
    modeledEndpoints:
    - GET /v1/Accounts/{sid}/Calls (bulk list; documented as existing, path follows Exotel convention)
    - GET /v1/Accounts/{sid}/Sms/Messages/{SmsSid} (SMS details; documented as existing, path follows Exotel convention)
    schemaStatus: All request/response body and form-field schemas are modeled from documented parameter lists, not from a vendor-published OpenAPI.
servers:
- url: https://api.exotel.com
  description: Singapore cluster (default)
- url: https://api.in.exotel.com
  description: Mumbai / India cluster
security:
- basicAuth: []
tags:
- name: Voice
  description: Place and control outbound voice calls.
paths:
  /v1/Accounts/{sid}/Calls/connect.json:
    parameters:
    - $ref: '#/components/parameters/AccountSid'
    post:
      operationId: connectCall
      tags:
      - Voice
      summary: Connect two numbers or connect a number to a call flow
      description: Places an outbound call. In the "connect two numbers" mode, Exotel first calls `From`, and when answered connects to `To`. In the "connect to a flow" mode, provide `Url` pointing to an Exotel call flow (App/applet, e.g. `http://my.exotel.com/{sid}/exoml/start_voice/{flow_id}`) instead of `To`. Confirmed endpoint; body schema modeled from documented form parameters.
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/ConnectCallRequest'
      responses:
        '200':
          description: Call queued/initiated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CallResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
components:
  responses:
    Unauthorized:
      description: Missing or invalid API Key/Token.
    TooManyRequests:
      description: Rate limit exceeded (Voice APIs are limited to ~200 calls/minute).
  schemas:
    CallResponse:
      type: object
      properties:
        Sid:
          type: string
        AccountSid:
          type: string
        Status:
          type: string
          enum:
          - queued
          - in-progress
          - completed
          - failed
          - busy
          - no-answer
        From:
          type: string
        To:
          type: string
        PhoneNumberSid:
          type: string
          description: The ExoPhone / virtual number used.
        Direction:
          type: string
        Duration:
          type: integer
        Price:
          type: string
        RecordingUrl:
          type: string
        DateCreated:
          type: string
    ConnectCallRequest:
      type: object
      required:
      - From
      - CallerId
      properties:
        From:
          type: string
          description: The number Exotel calls first (E.164 preferred).
        To:
          type: string
          description: The number to connect to. Use this OR Url.
        Url:
          type: string
          description: An Exotel call-flow URL to connect the call to instead of a second number, e.g. http://my.exotel.com/{sid}/exoml/start_voice/{flow_id}.
        CallerId:
          type: string
          description: Your ExoPhone / virtual number shown as caller ID.
        CallType:
          type: string
          enum:
          - trans
          - promo
          description: Call type classification.
        TimeLimit:
          type: integer
          description: Max call duration in seconds (up to 14400).
        TimeOut:
          type: integer
          description: Ring timeout in seconds.
        WaitUrl:
          type: string
          description: Audio URL to play while the callee is being connected.
        Record:
          type: boolean
          description: Whether to record the call.
        StatusCallback:
          type: string
          description: Webhook URL called on call state changes.
        StatusCallbackEvents:
          type: array
          items:
            type: string
            enum:
            - terminal
            - answered
        CustomField:
          type: string
  parameters:
    AccountSid:
      name: sid
      in: path
      required: true
      description: Your Exotel account Sid (Account SID).
      schema:
        type: string
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: HTTP Basic authentication. Username = API Key, Password = API Token (both from Exotel Dashboard -> Settings -> API Settings). May also be embedded in the URL as https://<key>:<token>@<subdomain>/...