{"openapi":"3.1.0","info":{"title":"Exotel (BYOK) API","version":"0.1.0","description":"Exotel (BYOK) lets an AI assistant read your own Exotel data through the Exotel API with a key you supply (API key). Read-only: 6 tools (get_balance, list_exophones, get_exophone, list_calls, get_call, get_sms). The BYOK key travels with each request, is used for that one call only and is never stored, logged or cached; it is only ever sent to api.exotel.com. Unofficial connector by Unify...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-exotel.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-exotel/docs"},"termsOfService":"https://connectorbay.com/byok-exotel/terms"},"servers":[{"url":"https://byok-exotel.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-exotel/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/get_balance":{"post":{"operationId":"get_balance","summary":"Get the wallet balance of the Exotel account with currency, pricing plan and last update time. Use for \"How much Exotel ","description":"Get the wallet balance of the Exotel account with currency, pricing plan and last update time. Use for \"How much Exotel credit do I have left\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account_sid":{"description":"Your Exotel account SID (shown in the dashboard under API settings).","maxLength":200,"title":"Account Sid","type":"string"}},"required":["account_sid"],"title":"get_balanceArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_exophones":{"post":{"operationId":"list_exophones","summary":"List the ExoPhone virtual numbers of the account with number, friendly name, voice and SMS capability, country and regio","description":"List the ExoPhone virtual numbers of the account with number, friendly name, voice and SMS capability, country and region. Use for \"Which ExoPhone numbers does my Exotel account have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account_sid":{"description":"Your Exotel account SID (shown in the dashboard under API settings).","maxLength":200,"title":"Account Sid","type":"string"}},"required":["account_sid"],"title":"list_exophonesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_exophone":{"post":{"operationId":"get_exophone","summary":"Get one ExoPhone by its SID with number, capabilities, country, region and the flow URL that handles its calls. Use for ","description":"Get one ExoPhone by its SID with number, capabilities, country, region and the flow URL that handles its calls. Use for \"Show Exotel ExoPhone 011XXXXXXX1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account_sid":{"description":"Your Exotel account SID (shown in the dashboard under API settings).","maxLength":200,"title":"Account Sid","type":"string"},"exophone_sid":{"description":"ExoPhone SID from list_exophones.","maxLength":200,"title":"Exophone Sid","type":"string"}},"required":["account_sid","exophone_sid"],"title":"get_exophoneArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_calls":{"post":{"operationId":"list_calls","summary":"List call records with status, direction, duration, price and times, newest first. Phone numbers and recording links are","description":"List call records with status, direction, duration, price and times, newest first. Phone numbers and recording links are not returned. Up to 6 months back and a one-month range per request; page with the cursor in NextPageUri. Use for \"Which Exotel calls failed yesterday\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account_sid":{"description":"Your Exotel account SID (shown in the dashboard under API settings).","maxLength":200,"title":"Account Sid","type":"string"},"date_created":{"anyOf":[{"maxLength":80,"type":"string"},{"type":"null"}],"default":null,"description":"Created-time range written as gte:YYYY-MM-DD HH:MM:SS;lte:YYYY-MM-DD HH:MM:SS (at most one month wide).","title":"Date Created"},"status":{"anyOf":[{"enum":["completed","failed","busy","no-answer"],"type":"string"},{"type":"null"}],"default":null,"description":"Only calls with this status.","title":"Status"},"direction":{"anyOf":[{"enum":["inbound","outbound-dial","outbound-api"],"type":"string"},{"type":"null"}],"default":null,"description":"Only this direction.","title":"Direction"},"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Calls per page (default 50, maximum 100).","title":"Page Size"},"sort_by":{"anyOf":[{"enum":["DateCreated:asc","DateCreated:desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort order of DateCreated: DateCreated:asc or DateCreated:desc (default).","title":"Sort By"},"after":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor taken from NextPageUri of the previous page, for the next page.","title":"After"},"before":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor taken from PrevPageUri of the previous page, for the previous page.","title":"Before"}},"required":["account_sid"],"title":"list_callsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_call":{"post":{"operationId":"get_call","summary":"Get one call record by its SID with status, direction, duration, price, times and optionally leg-level durations. Phone ","description":"Get one call record by its SID with status, direction, duration, price, times and optionally leg-level durations. Phone numbers and the recording link are not returned. Use for \"Show Exotel call b6cfaf5f5cef3ca0fc937749ef96d245\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account_sid":{"description":"Your Exotel account SID (shown in the dashboard under API settings).","maxLength":200,"title":"Account Sid","type":"string"},"call_sid":{"description":"Call SID from list_calls.","maxLength":200,"title":"Call Sid","type":"string"},"details":{"anyOf":[{"enum":["true","false"],"type":"string"},{"type":"null"}],"default":null,"description":"Set to true to include leg-level information.","title":"Details"}},"required":["account_sid","call_sid"],"title":"get_callArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_sms":{"post":{"operationId":"get_sms","summary":"Get the delivery status of one SMS by its SID: status, detailed status code and text, times and price. The recipient and","description":"Get the delivery status of one SMS by its SID: status, detailed status code and text, times and price. The recipient and message text are not returned. Use for \"Was Exotel SMS sms_sid_value delivered\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account_sid":{"description":"Your Exotel account SID (shown in the dashboard under API settings).","maxLength":200,"title":"Account Sid","type":"string"},"sms_sid":{"description":"SMS SID returned when the message was sent.","maxLength":200,"title":"Sms Sid","type":"string"}},"required":["account_sid","sms_sid"],"title":"get_smsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}