{"openapi":"3.1.0","info":{"title":"Plivo (BYOK) API","version":"0.1.0","description":"Plivo (BYOK) lets an AI assistant read your own Plivo data through the Plivo API with a key you supply (Auth ID). Read-only: 11 tools (get_account, list_phone_numbers, list_messages, get_message, list_calls, get_call, list_recordings, list_applications, list_endpoints, list_subaccounts, list_powerpacks). The BYOK key travels with each request, is used for that one call only and is never stored,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-plivo.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-plivo/docs"},"termsOfService":"https://connectorbay.com/byok-plivo/terms"},"servers":[{"url":"https://byok-plivo.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-plivo/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_account":{"post":{"operationId":"get_account","summary":"Show the Plivo account: name, account type, billing mode, remaining credit in USD, auto-recharge flag and time zone. Use","description":"Show the Plivo account: name, account type, billing mode, remaining credit in USD, auto-recharge flag and time zone. Use for \"How much Plivo credit do I have left\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"auth_id":{"description":"Your Plivo Auth ID (the same value used as the key), for example 'MAXXXXXXXXXXXXXXXXXX'. Subaccount IDs start with SA.","maxLength":200,"title":"Auth Id","type":"string"}},"required":["auth_id"],"title":"get_accountArguments","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_phone_numbers":{"post":{"operationId":"list_phone_numbers","summary":"List phone numbers rented on the account with type, region, capabilities (voice, SMS, MMS) and renewal date. Max 20 per ","description":"List phone numbers rented on the account with type, region, capabilities (voice, SMS, MMS) and renewal date. Max 20 per page. Use for \"Which phone numbers do I rent on Plivo and when do they renew\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"auth_id":{"description":"Your Plivo Auth ID (the same value used as the key), for example 'MAXXXXXXXXXXXXXXXXXX'. Subaccount IDs start with SA.","maxLength":200,"title":"Auth Id","type":"string"},"type":{"anyOf":[{"enum":["local","mobile","fixed","national","tollfree"],"type":"string"},{"type":"null"}],"default":null,"description":"Number type filter.","title":"Type"},"number_startswith":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only numbers starting with this prefix, for example '1415'.","title":"Number Startswith"},"services":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Capability filter: voice, sms, mms or a combination.","title":"Services"},"limit":{"anyOf":[{"maximum":20,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many records to return (1 to 20, default 20).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip, for paging (0 to start).","title":"Offset"}},"required":["auth_id"],"title":"list_phone_numbersArguments","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_messages":{"post":{"operationId":"list_messages","summary":"List message detail records (SMS, MMS, WhatsApp) with direction, state, type, numbers, units and cost, newest first. Max","description":"List message detail records (SMS, MMS, WhatsApp) with direction, state, type, numbers, units and cost, newest first. Max 20 per page. Use for \"Did my recent Plivo SMS messages get delivered\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"auth_id":{"description":"Your Plivo Auth ID (the same value used as the key), for example 'MAXXXXXXXXXXXXXXXXXX'. Subaccount IDs start with SA.","maxLength":200,"title":"Auth Id","type":"string"},"message_direction":{"anyOf":[{"enum":["inbound","outbound"],"type":"string"},{"type":"null"}],"default":null,"description":"Direction filter.","title":"Message Direction"},"message_state":{"anyOf":[{"enum":["queued","sent","delivered","undelivered","failed","received"],"type":"string"},{"type":"null"}],"default":null,"description":"State filter.","title":"Message State"},"message_type":{"anyOf":[{"enum":["sms","mms","whatsapp"],"type":"string"},{"type":"null"}],"default":null,"description":"Type filter.","title":"Message Type"},"message_time_gt":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only messages after this time, format 'yyyy-MM-dd HH:mm:ss'.","title":"Message Time Gt"},"message_time_lt":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only messages before this time, format 'yyyy-MM-dd HH:mm:ss'.","title":"Message Time Lt"},"limit":{"anyOf":[{"maximum":20,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many records to return (1 to 20, default 20).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip, for paging (0 to start).","title":"Offset"}},"required":["auth_id"],"title":"list_messagesArguments","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_message":{"post":{"operationId":"get_message","summary":"Get one message detail record by its UUID: state, direction, numbers, units, cost and error code. Use for \"What happened","description":"Get one message detail record by its UUID: state, direction, numbers, units, cost and error code. Use for \"What happened to Plivo message b48d95dc-e3ac-11eb-a9c2-0242ac110005\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"auth_id":{"description":"Your Plivo Auth ID (the same value used as the key), for example 'MAXXXXXXXXXXXXXXXXXX'. Subaccount IDs start with SA.","maxLength":200,"title":"Auth Id","type":"string"},"message_uuid":{"description":"UUID of the message.","maxLength":200,"title":"Message Uuid","type":"string"}},"required":["auth_id","message_uuid"],"title":"get_messageArguments","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 completed voice calls from the last 90 days (7 days unless an end_time filter is set, max 30-day range) with durati","description":"List completed voice calls from the last 90 days (7 days unless an end_time filter is set, max 30-day range) with duration, direction and cost. Max 20 per page. Use for \"Which calls did my Plivo account make yesterday and how long were they\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"auth_id":{"description":"Your Plivo Auth ID (the same value used as the key), for example 'MAXXXXXXXXXXXXXXXXXX'. Subaccount IDs start with SA.","maxLength":200,"title":"Auth Id","type":"string"},"call_direction":{"anyOf":[{"enum":["inbound","outbound"],"type":"string"},{"type":"null"}],"default":null,"description":"Direction filter.","title":"Call Direction"},"from_number":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only calls from this number.","title":"From Number"},"to_number":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only calls to this number.","title":"To Number"},"end_time_gte":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only calls ended at or after this time, format 'YYYY-MM-DD HH:MM:ss', UTC.","title":"End Time Gte"},"end_time_lte":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only calls ended at or before this time, format 'YYYY-MM-DD HH:MM:ss', UTC.","title":"End Time Lte"},"hangup_cause_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Only calls with this hangup cause code.","title":"Hangup Cause Code"},"limit":{"anyOf":[{"maximum":20,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many records to return (1 to 20, default 20).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip, for paging (0 to start).","title":"Offset"}},"required":["auth_id"],"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 completed call record by UUID: numbers, direction, duration, cost, hangup cause and STIR/SHAKEN verification. Us","description":"Get one completed call record by UUID: numbers, direction, duration, cost, hangup cause and STIR/SHAKEN verification. Use for \"Why did Plivo call 5607532d-5037-4066-befc-a8b40218dd4f end\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"auth_id":{"description":"Your Plivo Auth ID (the same value used as the key), for example 'MAXXXXXXXXXXXXXXXXXX'. Subaccount IDs start with SA.","maxLength":200,"title":"Auth Id","type":"string"},"call_uuid":{"description":"UUID of the call.","maxLength":200,"title":"Call Uuid","type":"string"}},"required":["auth_id","call_uuid"],"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/list_recordings":{"post":{"operationId":"list_recordings","summary":"List call and conference recording records (id, call UUID, format, type, duration, creation time) without audio links. 7","description":"List call and conference recording records (id, call UUID, format, type, duration, creation time) without audio links. 7-day default window, 30 days max. Max 20 per page. Use for \"Which Plivo call recordings were made this week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"auth_id":{"description":"Your Plivo Auth ID (the same value used as the key), for example 'MAXXXXXXXXXXXXXXXXXX'. Subaccount IDs start with SA.","maxLength":200,"title":"Auth Id","type":"string"},"call_uuid":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only recordings of this call.","title":"Call Uuid"},"add_time_gte":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only recordings created at or after this time, format 'YYYY-MM-DD HH:MM:ss', UTC.","title":"Add Time Gte"},"limit":{"anyOf":[{"maximum":20,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many records to return (1 to 20, default 20).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip, for paging (0 to start).","title":"Offset"}},"required":["auth_id"],"title":"list_recordingsArguments","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_applications":{"post":{"operationId":"list_applications","summary":"List voice and messaging applications (name, id, answer and message URLs, enabled flag). Max 20 per page. Use for \"What ","description":"List voice and messaging applications (name, id, answer and message URLs, enabled flag). Max 20 per page. Use for \"What Plivo applications are set up and where do they point\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"auth_id":{"description":"Your Plivo Auth ID (the same value used as the key), for example 'MAXXXXXXXXXXXXXXXXXX'. Subaccount IDs start with SA.","maxLength":200,"title":"Auth Id","type":"string"},"app_name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only applications whose name starts with this text.","title":"App Name"},"limit":{"anyOf":[{"maximum":20,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many records to return (1 to 20, default 20).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip, for paging (0 to start).","title":"Offset"}},"required":["auth_id"],"title":"list_applicationsArguments","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_endpoints":{"post":{"operationId":"list_endpoints","summary":"List SIP endpoints (alias, endpoint id, linked application, SIP URI, registration state) used by softphones and the brow","description":"List SIP endpoints (alias, endpoint id, linked application, SIP URI, registration state) used by softphones and the browser SDK. Use for \"Which SIP endpoints are registered on my Plivo account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"auth_id":{"description":"Your Plivo Auth ID (the same value used as the key), for example 'MAXXXXXXXXXXXXXXXXXX'. Subaccount IDs start with SA.","maxLength":200,"title":"Auth Id","type":"string"}},"required":["auth_id"],"title":"list_endpointsArguments","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_subaccounts":{"post":{"operationId":"list_subaccounts","summary":"List subaccounts with name, id, enabled flag and creation date (their tokens are not returned). Max 20 per page. Use for","description":"List subaccounts with name, id, enabled flag and creation date (their tokens are not returned). Max 20 per page. Use for \"How many Plivo subaccounts do I have and are they enabled\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"auth_id":{"description":"Your Plivo Auth ID (the same value used as the key), for example 'MAXXXXXXXXXXXXXXXXXX'. Subaccount IDs start with SA.","maxLength":200,"title":"Auth Id","type":"string"},"limit":{"anyOf":[{"maximum":20,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many records to return (1 to 20, default 20).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip, for paging (0 to start).","title":"Offset"}},"required":["auth_id"],"title":"list_subaccountsArguments","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_powerpacks":{"post":{"operationId":"list_powerpacks","summary":"List Powerpacks (number pools for messaging) with name, sticky-sender and local-connect flags and creation time. Max 20 ","description":"List Powerpacks (number pools for messaging) with name, sticky-sender and local-connect flags and creation time. Max 20 per page. Use for \"What Powerpacks do I have on Plivo\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"auth_id":{"description":"Your Plivo Auth ID (the same value used as the key), for example 'MAXXXXXXXXXXXXXXXXXX'. Subaccount IDs start with SA.","maxLength":200,"title":"Auth Id","type":"string"},"limit":{"anyOf":[{"maximum":20,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many records to return (1 to 20, default 20).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip, for paging (0 to start).","title":"Offset"}},"required":["auth_id"],"title":"list_powerpacksArguments","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}}}}