{"openapi":"3.1.0","info":{"title":"Sinch SIP Trunking (BYOK) API","version":"0.1.0","description":"Sinch SIP Trunking (BYOK) lets an AI assistant read your own Sinch SIP Trunking data through the Sinch SIP Trunking API with a key you supply (access key ID). Read-only: 8 tools (list_calls, list_trunks, get_trunk, list_trunk_endpoints, list_phone_numbers, list_country_permissions, list_access_control_lists, list_call_blocking_rules). The BYOK key travels with each request, is used for that one...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-sinch-sip-trunking.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-sinch-sip-trunking/docs"},"termsOfService":"https://connectorbay.com/byok-sinch-sip-trunking/terms"},"servers":[{"url":"https://byok-sinch-sip-trunking.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-sinch-sip-trunking/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/list_calls":{"post":{"operationId":"list_calls","summary":"Find SIP trunk call records (default last 24 hours) with numbers, direction, result (completed, no answer, busy, failed ","description":"Find SIP trunk call records (default last 24 hours) with numbers, direction, result (completed, no answer, busy, failed ...), duration, billed seconds and price. Filter by numbers (prefix), trunk, result or direction. Use for \"Which SIP calls failed on my Sinch trunk today\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"description":"Sinch project id from the Sinch dashboard.","maxLength":200,"title":"Project Id","type":"string"},"from_number":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Only calls from numbers starting with this value.","title":"From Number"},"to":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Only calls to numbers or addresses starting with this value.","title":"To"},"trunk_id":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Only calls made from this trunk.","title":"Trunk Id"},"create_time":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Time filter, for example now-24h or 2026-10-01.","title":"Create Time"},"call_result":{"anyOf":[{"enum":["COMPLETED","NO_ANSWER","CANCEL","BUSY","FAILED"],"type":"string"},{"type":"null"}],"default":null,"description":"Result filter.","title":"Call Result"},"direction":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Direction filter, INBOUND or OUTBOUND (comma-separated for both).","title":"Direction"},"page":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Page token from a previous answer; omit for the first page.","title":"Page"},"size":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"Items per page (1 to 1000).","title":"Size"}},"required":["project_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/list_trunks":{"post":{"operationId":"list_trunks","summary":"List SIP trunks with name, host name, domain, calls-per-second limit and caller-name and call-forward flags. Use for \"Wh","description":"List SIP trunks with name, host name, domain, calls-per-second limit and caller-name and call-forward flags. Use for \"Which SIP trunks do I have on Sinch\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"description":"Sinch project id from the Sinch dashboard.","maxLength":200,"title":"Project Id","type":"string"},"domain":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only trunks of this domain.","title":"Domain"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"size":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"Items per page (1 to 500).","title":"Size"}},"required":["project_id"],"title":"list_trunksArguments","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_trunk":{"post":{"operationId":"get_trunk","summary":"Get one SIP trunk by id. Use for \"What is the calls-per-second limit of Sinch trunk T1\".","description":"Get one SIP trunk by id. Use for \"What is the calls-per-second limit of Sinch trunk T1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"description":"Sinch project id from the Sinch dashboard.","maxLength":200,"title":"Project Id","type":"string"},"trunk_id":{"description":"Id of the SIP trunk, from list_trunks.","maxLength":200,"title":"Trunk Id","type":"string"}},"required":["project_id","trunk_id"],"title":"get_trunkArguments","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_trunk_endpoints":{"post":{"operationId":"list_trunk_endpoints","summary":"List the SIP endpoints of one trunk with name, transport (TCP, UDP, TLS), priority and enabled flag. Use for \"Which endp","description":"List the SIP endpoints of one trunk with name, transport (TCP, UDP, TLS), priority and enabled flag. Use for \"Which endpoints does Sinch trunk T1 route to\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"description":"Sinch project id from the Sinch dashboard.","maxLength":200,"title":"Project Id","type":"string"},"trunk_id":{"description":"Id of the SIP trunk, from list_trunks.","maxLength":200,"title":"Trunk Id","type":"string"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"size":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"Items per page (1 to 500).","title":"Size"}},"required":["project_id","trunk_id"],"title":"list_trunk_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_phone_numbers":{"post":{"operationId":"list_phone_numbers","summary":"List phone numbers assigned to SIP trunks with trunk id and country code. Use for \"Which numbers are assigned to my Sinc","description":"List phone numbers assigned to SIP trunks with trunk id and country code. Use for \"Which numbers are assigned to my Sinch SIP trunks\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"description":"Sinch project id from the Sinch dashboard.","maxLength":200,"title":"Project Id","type":"string"},"sip_trunk_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Only numbers of this trunk id.","title":"Sip Trunk Id"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"size":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"Items per page (1 to 500).","title":"Size"}},"required":["project_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_country_permissions":{"post":{"operationId":"list_country_permissions","summary":"List countries with whether calling to them is enabled for the project. Use for \"Which countries can my Sinch SIP trunks","description":"List countries with whether calling to them is enabled for the project. Use for \"Which countries can my Sinch SIP trunks call\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"description":"Sinch project id from the Sinch dashboard.","maxLength":200,"title":"Project Id","type":"string"}},"required":["project_id"],"title":"list_country_permissionsArguments","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_access_control_lists":{"post":{"operationId":"list_access_control_lists","summary":"List access control lists with name, enabled flag, IP ranges and the trunks they apply to. Use for \"Which IP ranges may ","description":"List access control lists with name, enabled flag, IP ranges and the trunks they apply to. Use for \"Which IP ranges may use my Sinch trunks\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"description":"Sinch project id from the Sinch dashboard.","maxLength":200,"title":"Project Id","type":"string"}},"required":["project_id"],"title":"list_access_control_listsArguments","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_call_blocking_rules":{"post":{"operationId":"list_call_blocking_rules","summary":"List call blocking rules with direction and the caller and callee country or number patterns. Use for \"What call blockin","description":"List call blocking rules with direction and the caller and callee country or number patterns. Use for \"What call blocking rules do I have on Sinch\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"description":"Sinch project id from the Sinch dashboard.","maxLength":200,"title":"Project Id","type":"string"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"size":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"Items per page (1 to 500).","title":"Size"}},"required":["project_id"],"title":"list_call_blocking_rulesArguments","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}}}}