{
  "info": {
    "name": "Exotel API",
    "description": "Representative subset of Exotel's Twilio-style cloud telephony REST API: connect calls, send SMS, retrieve call details, look up number metadata, and manage call campaigns. Base URL is region-specific: https://api.exotel.com (Singapore) or https://api.in.exotel.com (Mumbai/India). Auth is HTTP Basic with API Key (username) and API Token (password); Account SID appears in every path. Exotel returns XML by default - append .json for JSON. Endpoint paths/methods are confirmed from Exotel docs; body/response field schemas are modeled.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "basic",
    "basic": [
      { "key": "username", "value": "{{apiKey}}", "type": "string" },
      { "key": "password", "value": "{{apiToken}}", "type": "string" }
    ]
  },
  "variable": [
    { "key": "baseUrl", "value": "https://api.exotel.com", "type": "string" },
    { "key": "accountSid", "value": "", "type": "string" },
    { "key": "apiKey", "value": "", "type": "string" },
    { "key": "apiToken", "value": "", "type": "string" }
  ],
  "item": [
    {
      "name": "Voice",
      "item": [
        {
          "name": "Connect two numbers / connect to a call flow",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/x-www-form-urlencoded" }],
            "body": {
              "mode": "urlencoded",
              "urlencoded": [
                { "key": "From", "value": "", "description": "Number Exotel calls first (E.164)." },
                { "key": "To", "value": "", "description": "Number to connect to. Use this OR Url." },
                { "key": "CallerId", "value": "", "description": "Your ExoPhone / virtual number." },
                { "key": "Url", "value": "", "description": "Call-flow URL to connect to instead of To.", "disabled": true },
                { "key": "Record", "value": "true", "disabled": true },
                { "key": "TimeLimit", "value": "3600", "disabled": true },
                { "key": "StatusCallback", "value": "", "disabled": true }
              ]
            },
            "url": {
              "raw": "{{baseUrl}}/v1/Accounts/{{accountSid}}/Calls/connect.json",
              "host": ["{{baseUrl}}"],
              "path": ["v1", "Accounts", "{{accountSid}}", "Calls", "connect.json"]
            },
            "description": "POST /v1/Accounts/{sid}/Calls/connect - connect two numbers, or connect a number to an Exotel call flow via the Url parameter. Confirmed endpoint; parameters from documented form fields."
          }
        }
      ]
    },
    {
      "name": "Call Details",
      "item": [
        {
          "name": "Get call details",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/Accounts/{{accountSid}}/Calls/:CallSid.json",
              "host": ["{{baseUrl}}"],
              "path": ["v1", "Accounts", "{{accountSid}}", "Calls", ":CallSid.json"],
              "variable": [{ "key": "CallSid", "value": "" }]
            },
            "description": "GET /v1/Accounts/{sid}/Calls/{CallSid} - status, duration, price, recording URL. Confirmed endpoint."
          }
        },
        {
          "name": "List / bulk-query calls",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/Accounts/{{accountSid}}/Calls.json?DateCreated=&Status=",
              "host": ["{{baseUrl}}"],
              "path": ["v1", "Accounts", "{{accountSid}}", "Calls.json"],
              "query": [
                { "key": "DateCreated", "value": "" },
                { "key": "Status", "value": "" }
              ]
            },
            "description": "MODELED path - documented bulk call queries, path follows Exotel Twilio-style convention."
          }
        }
      ]
    },
    {
      "name": "SMS",
      "item": [
        {
          "name": "Send SMS",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/x-www-form-urlencoded" }],
            "body": {
              "mode": "urlencoded",
              "urlencoded": [
                { "key": "From", "value": "", "description": "ExoPhone or approved Sender ID." },
                { "key": "To", "value": "", "description": "Recipient (E.164)." },
                { "key": "Body", "value": "", "description": "Message text (max 2000 chars)." },
                { "key": "DltEntityId", "value": "", "description": "DLT entity ID (mandatory for India)." },
                { "key": "DltTemplateId", "value": "", "disabled": true },
                { "key": "SmsType", "value": "transactional", "disabled": true }
              ]
            },
            "url": {
              "raw": "{{baseUrl}}/v1/Accounts/{{accountSid}}/Sms/send.json",
              "host": ["{{baseUrl}}"],
              "path": ["v1", "Accounts", "{{accountSid}}", "Sms", "send.json"]
            },
            "description": "POST /v1/Accounts/{sid}/Sms/send - send a single SMS. Confirmed endpoint; parameters from documented fields."
          }
        },
        {
          "name": "Get SMS details",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/Accounts/{{accountSid}}/Sms/Messages/:SmsSid.json",
              "host": ["{{baseUrl}}"],
              "path": ["v1", "Accounts", "{{accountSid}}", "Sms", "Messages", ":SmsSid.json"],
              "variable": [{ "key": "SmsSid", "value": "" }]
            },
            "description": "MODELED path - documented SMS details lookup, path follows Exotel convention."
          }
        }
      ]
    },
    {
      "name": "Numbers",
      "item": [
        {
          "name": "Get number metadata",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/Accounts/{{accountSid}}/Numbers/:Number.json",
              "host": ["{{baseUrl}}"],
              "path": ["v1", "Accounts", "{{accountSid}}", "Numbers", ":Number.json"],
              "variable": [{ "key": "Number", "value": "" }]
            },
            "description": "GET /v1/Accounts/{sid}/Numbers/{Number} - operator/circle, type, DND status. Confirmed endpoint."
          }
        }
      ]
    },
    {
      "name": "Campaigns",
      "item": [
        {
          "name": "List campaigns",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/accounts/{{accountSid}}/campaigns",
              "host": ["{{baseUrl}}"],
              "path": ["v2", "accounts", "{{accountSid}}", "campaigns"]
            },
            "description": "GET /v2/accounts/{sid}/campaigns. Confirmed v2 resource."
          }
        },
        {
          "name": "Create campaign",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"name\": \"my-campaign\",\n  \"caller_id\": \"\",\n  \"lists\": [],\n  \"url\": \"\"\n}" },
            "url": {
              "raw": "{{baseUrl}}/v2/accounts/{{accountSid}}/campaigns",
              "host": ["{{baseUrl}}"],
              "path": ["v2", "accounts", "{{accountSid}}", "campaigns"]
            },
            "description": "POST /v2/accounts/{sid}/campaigns. Confirmed endpoint; body modeled."
          }
        },
        {
          "name": "Get campaign",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/accounts/{{accountSid}}/campaigns/:campaign_id",
              "host": ["{{baseUrl}}"],
              "path": ["v2", "accounts", "{{accountSid}}", "campaigns", ":campaign_id"],
              "variable": [{ "key": "campaign_id", "value": "" }]
            },
            "description": "GET /v2/accounts/{sid}/campaigns/{campaign_id}. Confirmed endpoint."
          }
        },
        {
          "name": "Update / pause / resume campaign",
          "request": {
            "method": "PUT",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{}" },
            "url": {
              "raw": "{{baseUrl}}/v2/accounts/{{accountSid}}/campaigns/:campaign_id",
              "host": ["{{baseUrl}}"],
              "path": ["v2", "accounts", "{{accountSid}}", "campaigns", ":campaign_id"],
              "variable": [{ "key": "campaign_id", "value": "" }]
            },
            "description": "PUT /v2/accounts/{sid}/campaigns/{campaign_id}. Confirmed endpoint."
          }
        },
        {
          "name": "Delete campaign",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/accounts/{{accountSid}}/campaigns/:campaign_id",
              "host": ["{{baseUrl}}"],
              "path": ["v2", "accounts", "{{accountSid}}", "campaigns", ":campaign_id"],
              "variable": [{ "key": "campaign_id", "value": "" }]
            },
            "description": "DELETE /v2/accounts/{sid}/campaigns/{campaign_id}. Confirmed endpoint."
          }
        },
        {
          "name": "Get campaign call details",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/accounts/{{accountSid}}/campaigns/:campaign_id/call-details",
              "host": ["{{baseUrl}}"],
              "path": ["v2", "accounts", "{{accountSid}}", "campaigns", ":campaign_id", "call-details"],
              "variable": [{ "key": "campaign_id", "value": "" }]
            },
            "description": "GET /v2/accounts/{sid}/campaigns/{campaign_id}/call-details. Confirmed endpoint."
          }
        }
      ]
    }
  ]
}
