openapi: 3.1.0 info: title: Elastic SIP Trunk API description: |- With the Elastic SIP Trunk API you can create and manage your SIP trunks and phone numbers programmatically. version: "1.0.1" license: name: MIT url: "https://www.sinch.com/toc" contact: email: support@sinch.com name: support at sinch security: - Basic: [] - OAuth2.0: [] servers: - url: https://elastic-trunking.api.sinch.com/v1/projects/{projectId} variables: projectId: default: "" description: "The `projectId` is a required parameter you must include when making any API calls. You can find your project ID on your [dashboard](https://dashboard.sinch.com)." tags: - name: SIP Trunks description: The SIP Trunks endpoint has operations that allow you to create, view, update, and remove SIP trunks. - name: SIP Endpoints description: A SIP endpoint is the resource that represents your SIP infrastructure, typically an SBC. Note the Elastic SIP Trunk API does not support user registration and presence. - name: Country Permissions description: |- Country permissions are used to control which countries can be dialed from a specific SIP trunk. You can view, update, and remove country permissions. For beta, only US, CA and wild card are supported. Please note that these permissions are not per trunk but rather they are per project/account. In the future Sinch may extend these permissions to other voice and messaging products. If you are using sub-projects you can use the same country permissions for all sub-projects. You can also specify different country permissions for each sub-project that will override the parent country permissions. - name: Phone Numbers description: The `/phoneNumbers` endpoint has operations that allow you to assign and remove phone numbers from SIP trunks. - name: Calls description: |- The `/calls` endpoint has operations that allow you to retrieve call history and details about calls made or received using EST. - name: Access Control List description: |- The Access Control List (ACL) endpoint has operations that allow you to create, view, update, and remove ACLs. You use ACLs to control which IP addresses can send traffic to your SIP trunk. You can create multiple ACLs and assign them to multiple SIP trunks. In order to make outbound calls you need to have at least one ACL set up. - name: Credential List description: |- The Credential List endpoint has operations that allow you to view credential lists. You use credential lists to easily configure which users are allowed to make calls on a trunk. - name: Error Messages description: |- The `type` will give you a general idea of why the operation failed, whereas the `errorCode` describes the issue in more detail. Below we list the Error codes for the API paths: /calls: get: summary: Find calls description: Find calls by query parameters. operationId: findCalls tags: - Calls parameters: - name: from in: query description: A phone number that you want to use to filter results. You can pass a partial number to get all calls sent to numbers that start with the number you passed. required: false schema: type: string format: phonenumber - name: to in: query description: Only include calls made to this number or address. You can pass a partial number to get all calls sent to numbers that start with the number you passed. required: false schema: type: string format: phonenumber - name: trunkId in: query description: Only include calls made from this trunk. required: false schema: type: string - name: createTime description: |- Filter calls based on `createTime`. You make the query more precise, fewer results will be returned. For example, 2021-02-01 will return all calls from the first of February 2021, and 2021-02-01T14:00:00+0600 will return all calls after 14:00 on the first of February. This field also supports <= and >= to search for calls in a range ?createTime>=2021-10-01&createTime<=2021-10-30 to get a list if calls for october 2021 It is also possible to submit partial dates for example createTime=2021-02 will return all calls for February ***Defaults to 24 hours*** ***Internal notes*** If a customer submits = and not <> we should add min and max for the date range psueodo sql ``` createTime = 2021-02-01 select * from calls where createTime >= 2021-02-01 and createTime <= 2021-02-01T23:59:59Z createTime = 2021-02-01T08 select * from calls where createTime >= 2021-02-01T08:00:00 and createTime <= 2021-02-01T08:59:59+0600 ``` but if they submit < or > we should just use the value they submitted and parse it a complete date required: false in: query schema: type: string example: "2021-02-01T23:59:59+0600" default: now-24h - name: createTimeStart in: query description: Filters calls based on the time that the call was created. required: false schema: type: string example: "2021-02-01T23:59:59+0600" - name: createTimeEnd in: query description: Filters calls based on the time that the call ended. required: false schema: type: string example: "2021-02-01T23:59:59+0600" - name: callResult in: query description: only include calls by on the callResult(s), example callResult=COMPLETED will return all calls which have completed normally. required: false schema: $ref: "#/components/schemas/CallResult" - name: fromCountryCode in: query description: Filters calls based on the country in which the call originated. required: false schema: type: string example: US - name: toCountryCode in: query description: Filters calls based on the country of the call destination. required: false schema: type: string example: US - name: emergencyOnly in: query description: Filters calls based on whether the call was an emergency call or not. required: false schema: type: string enum: ["true", "false", "null"] example: false x-enumDescriptions: "true": Only returns calls that are emergency calls. "false": Only returns calls that are not emergency calls. "null": Returns all call types. - name: direction in: query description: only include calls by on the direction(s), example direction=INBOUND,OUTBOUND will return all calls that are inbound or outbound. required: false schema: type: string description: Filter results based on the call direction. enum: - INBOUND - OUTBOUND x-ga-description: |- Describes whether the call was `INBOUND` *to* your Sinch number or was `OUTBOUND` and made *from* your Sinch number. An `INBOUND` call can also come from a SIP infrastructure or an application built using the Sinch SDK. An `OUTBOUND` call can be placed to a SIP infrastructure or an application built using the Sinch SDK. x-enumDescriptions: INBOUND: Somebody called your Sinch number. OUTBOUND: You called somebody from your SIP device. - name: page in: query description: The page you want to fetch schema: type: string - name: pageSize in: query description: The maximum number of items to return per request. The default is 100 and the maximum is 500. If you need to export larger amounts and pagination is not suitable for you can use the Export function in the dashboard. schema: type: integer maximum: 500 minimum: 1 responses: "200": description: Call result response content: application/json: schema: allOf: - type: object properties: calls: type: array description: "The list of calls that matches the query parameters." items: $ref: "#/components/schemas/Call" - $ref: "#/components/schemas/Pagination" /trunks/{sipTrunkId}/endpoints: get: parameters: - $ref: "#/components/parameters/SipTrunkId" - $ref: "#/components/parameters/Page" - $ref: "#/components/parameters/PageSize" tags: - SIP Endpoints summary: Return SIP endpoints description: Returns a list of all SIP endpoints with paging. operationId: getSipEndpoint responses: '200': description: A successful response. content: application/json: schema: allOf: - $ref: "#/components/schemas/Pagination" - type: object properties: endpoints: type: array items: $ref: "#/components/schemas/SipEndpoint" post: parameters: - $ref: "#/components/parameters/SipTrunkId" tags: - SIP Endpoints summary: Create SIP endpoint description: Create a new SIP endpoint. operationId: createSipEndpoint requestBody: content: application/json: schema: $ref: "#/components/schemas/SipEndpoint" /trunks/{sipTrunkId}/endpoints/{sipEndpointId}: parameters: - $ref: "#/components/parameters/SipTrunkId" - $ref: "#/components/parameters/SipEndpointId" get: tags: - SIP Endpoints summary: Get SIP endpoint by ID description: Get a SIP endpoint by specifying its ID. operationId: getSipEndpointById responses: '200': description: A successful response. content: application/json: schema: $ref: "#/components/schemas/SipEndpoint" put: tags: - SIP Endpoints summary: Update existing SIP endpoint description: Updated an existing SIP endpoint by specifying its ID. operationId: updateSipEndpoint requestBody: content: application/json: schema: $ref: "#/components/schemas/SipEndpoint" responses: '200': description: A successful response. content: application/json: schema: $ref: "#/components/schemas/SipEndpoint" delete: tags: - SIP Endpoints summary: Delete SIP endpoint description: Delete a SIP endpoint by specifying its ID. operationId: deleteSipEndpoint responses: '204': description: SIP endpoint deleted successfully. /trunks: post: tags: - SIP Trunks summary: Create SIP trunk description: Creates a new SIP trunk. operationId: createSipTrunk requestBody: content: application/json: schema: $ref: "#/components/schemas/SipTrunk" required: true responses: "201": description: SIP trunk created successfully content: application/json: schema: $ref: "#/components/schemas/SipTrunk" get: summary: List SIP trunks tags: - SIP Trunks description: Returns a list of all SIP trunks. If you specify pagination settings, the list of SIP trunks can be returned separated and sorted into pages. operationId: getSipTrunks parameters: - $ref: "#/components/parameters/Page" - $ref: "#/components/parameters/PageSize" - name: domain in: query description: Filter by domain required: false schema: type: string responses: "200": description: Request completed successfully content: application/json: schema: allOf: - $ref: "#/components/schemas/Pagination" - type: object properties: trunks: type: array description: "The list of SIP trunks that matches the query parameters." items: $ref: "#/components/schemas/SipTrunk" /trunks/{sipTrunkId}: get: summary: Get SIP Trunk description: Search for a SIP trunk by ID. operationId: getSipTrunkById tags: - SIP Trunks parameters: - $ref: "#/components/parameters/SipTrunkId" responses: "200": description: SIP trunk found successfully content: application/json: schema: $ref: "#/components/schemas/SipTrunk" put: summary: Update SIP trunk description: Update an existing SIP Trunk by ID. The whole object must be sent. Any missing fields will be set to null. operationId: updateSipTrunk tags: - SIP Trunks parameters: - $ref: "#/components/parameters/SipTrunkId" requestBody: content: application/json: schema: $ref: "#/components/schemas/SipTrunk" required: true responses: "200": description: SIP trunk updated successfully content: application/json: schema: $ref: "#/components/schemas/SipTrunk" delete: summary: Delete SIP trunk description: Delete a SIP trunk by its ID. operationId: deleteSipTrunk tags: - SIP Trunks parameters: - $ref: "#/components/parameters/SipTrunkId" responses: "204": description: The SIP trunk deleted successfully /phoneNumbers: parameters: - $ref: "#/components/parameters/Filter" - $ref: "#/components/parameters/SipTrunkIdQuery" - $ref: "#/components/parameters/Page" - $ref: "#/components/parameters/PageSize" - $ref: "#/components/parameters/Sort" get: summary: "Get all phone numbers" description: "Get all phone numbers. You can filter and sort the phone numbers returned with paging." operationId: GetPhoneNumbers tags: - Phone Numbers responses: '200': description: A successful response is an array containing phone numbers. content: application/json: schema: allOf: - $ref: "#/components/schemas/Pagination" - type: object properties: phoneNumbers: type: array items: $ref: "#/components/schemas/Number" /phoneNumbers/{phoneNumber}: parameters: - $ref: "#/components/parameters/PhoneNumber" get: summary: Find a specific phone number description: Search for an Elastic SIP Trunk-enabled phone number by the e.164 number. operationId: GetPhoneNumberByNumber tags: - Phone Numbers responses: '200': description: A successful response. content: application/json: schema: $ref: "#/components/schemas/Number" /countryPermissions: get: tags: - Country Permissions summary: Fetch all country permissions description: Fetches the list of country permissions. operationId: getCountryPermissions responses: "200": description: The list of countries available content: application/json: schema: type: object properties: countryPermissions: type: array items: $ref: "#/components/schemas/CountryPermission" put: tags: - Country Permissions summary: Bulk update country permissions description: Provides the ability to enable and disable multiple country permissions at once. operationId: bulkUpdateCountryPermissions requestBody: description: Include the countries you want to be enabled. Anything not included will be disabled. content: application/json: schema: type: object properties: countryPermissions: type: array items: $ref: "#/components/schemas/CountryPermission" responses: "200": description: The list of countries enabled content: application/json: schema: type: object properties: countryPermissions: type: array items: $ref: "#/components/schemas/CountryPermission" /countryPermissions/{isoCode}: parameters: - name: isoCode in: path description: "The ISO code of the country." required: true schema: type: string get: tags: - Country Permissions summary: Fetch country permission description: Fetches the requested country permission. operationId: getCountryPermission responses: "200": description: The returned country permission content: application/json: schema: $ref: "#/components/schemas/CountryPermission" put: tags: - Country Permissions summary: Update country permission description: Update the requested country permission. operationId: updateCountryPermission requestBody: content: application/json: schema: $ref: "#/components/schemas/CountryPermission" responses: "200": description: The updated country permission content: application/json: schema: $ref: "#/components/schemas/CountryPermission" /accessControlLists: get: tags: - Access Control List summary: List ACLs description: Fetches the list of Access Control List entries. operationId: getAccessControlList responses: "200": description: The list of ACL entries content: application/json: schema: allOf: - type: object properties: accessControlLists: type: array items: $ref: "#/components/schemas/AccessControlList" - $ref: "#/components/schemas/Pagination" examples: listAcls: $ref: "#/components/examples/aclListResponse" post: tags: - Access Control List summary: Create an ACL description: |- Create an access control list entry with at least one IP address or IP range. operationId: createAccessControlList requestBody: content: application/json: schema: $ref: "#/components/schemas/AccessControlList" examples: createNewAcl: $ref: "#/components/examples/createAclReq" responses: "200": description: The list of access control list entries content: application/json: schema: $ref: "#/components/schemas/AccessControlList" examples: createNewAcl: $ref: "#/components/examples/createAclRes" /accessControlLists/{id}: parameters: - name: id in: path description: "The ID of the access control list entry." required: true schema: type: string put: tags: - Access Control List summary: Update ACL description: Create an access control list entry with at least one IP address or IP range. operationId: updateAccessControlList requestBody: content: application/json: schema: type: object required: - name properties: name: type: string description: Your name for the access control list entry. example: LA Office enabled: type: boolean description: Whether the access control list entry is enabled. You can use this to disable a list temporarily without deleting it. default: true examples: updateAcl: $ref: "#/components/examples/updateAclReq" responses: "200": description: The list of access control list entries content: application/json: schema: $ref: "#/components/schemas/AccessControlList" examples: updateAcl: $ref: "#/components/examples/updateAclRes" delete: description: Delete an access control list entry. summary: Delete ACL operationId: deleteAccessControlList tags: - Access Control List responses: "204": description: List deleted\ /accessControlLists/{id}/trunks: parameters: - name: id in: path description: "The ID of the access control list entry." required: true schema: type: string get: summary: Get trunks for ACL description: Returns a list of all trunks which use the specified access control list. operationId: trunksByACL tags: - Access Control List responses: "200": description: The list of trunks which use the access control list. content: application/json: schema: allOf: - type: object properties: trunks: type: array items: $ref: "#/components/schemas/SipTrunk" - $ref: "#/components/schemas/Pagination" /accessControlLists/{accessControlListId}/ipRanges: parameters: - name: accessControlListId in: path description: "The ID of the access control list entry. that you want to work with" required: true schema: type: string post: operationId: addIpRangeToAccessControlList description: Add an IP range to an access control list entry. summary: Add IP range to ACL tags: - Access Control List requestBody: content: application/json: schema: $ref: "#/components/schemas/IpRange" examples: addIpRange: $ref: "#/components/examples/addIpRangeReq" responses: "200": description: The list of IP ranges content: application/json: schema: $ref: "#/components/schemas/IpRange" examples: addIpRange: $ref: "#/components/examples/addIpRangeRes" get: operationId: getIpRangesForAccessControlList summary: List all IP ranges for ACL description: Get all IP ranges for an access control list entry. tags: - Access Control List responses: "200": description: The list of IP ranges content: application/json: schema: allOf: - type: object properties: ipRanges: type: array description: The list of IP ranges items: $ref: "#/components/schemas/IpRange" - $ref: "#/components/schemas/Pagination" /accessControlLists/{accessControlListId}/ipRanges/{ipRangeId}: parameters: - name: accessControlListId in: path description: "The ID of the access control list entry that you want to update." required: true schema: type: string - name: ipRangeId in: path description: "The ID of the IP range that you want to update." required: true schema: type: string delete: operationId: deleteIpRangeFromAccessControlList summary: Delete IP range from ACL tags: - Access Control List description: Remove an IP range to an access control list entry. responses: "204": description: IP range deleted put: description: Update an IP range to an access control list entry. operationId: updateIpRangeFromAccessControlList summary: Update IP range tags: - Access Control List requestBody: content: application/json: schema: $ref: "#/components/schemas/IpRange" examples: updateIpRange: $ref: "#/components/examples/updateIpRangeReq" responses: "200": description: The updated IP range. content: application/json: schema: $ref: "#/components/schemas/IpRange" examples: updateIpRange: $ref: "#/components/examples/updateAclRes" /credentialLists/{id}/trunks: parameters: - name: id in: path description: "The ID of the credential list entry." required: true schema: type: string get: description: Returns a list of all the trunks which use the specified credential list. summary: Get trunks for credential list operationId: trunksByCredentialList tags: - Credential List responses: "200": description: The list of trunks which use the credential list. content: application/json: schema: allOf: - type: object properties: trunks: type: array items: $ref: "#/components/schemas/SipTrunk" - $ref: "#/components/schemas/Pagination" /trunks/{trunkId}/accessControlLists: parameters: - name: trunkId in: path description: "The ID of the trunk that you want to work with" required: true schema: type: string post: operationId: addAccessControlListToTrunk description: Add an access control list entry to a trunk. summary: Add ACL to a trunk tags: - Access Control List - SIP Trunks requestBody: content: application/json: schema: type: object properties: accessControlListIds: type: array description: Array of AccessControlList ids items: type: string description: The ID of the access control list entry. examples: addAcl: $ref: "#/components/examples/addTrunkAclReq" responses: "200": description: The list of access control list entries content: application/json: schema: allOf: - type: object properties: accessControlListIds: type: array description: Array of AccessControlList ids items: type: string description: The ID of the access control list entry on assigned to trunk after update. examples: addAcl: $ref: "#/components/examples/addTrunkAclRes" get: description: Get all access control list entries for a trunk. summary: List all ACLs for a trunk operationId: getAccessControlListsForTrunk tags: - Access Control List - SIP Trunks responses: "200": description: The list of access control list entries content: application/json: schema: allOf: - type: object properties: accessControlListIds: type: array description: Array of AccessControlList ids items: type: string description: The ID of the access control list entry. - $ref: "#/components/schemas/Pagination" examples: listTrunkAcls: $ref: "#/components/examples/listTrunkAcls" put: description: Update the list of access control list entries for a trunk. summary: Bulk update ACLs for a trunk operationId: bulkUpdateACLsForTrunk tags: - Access Control List - SIP Trunks requestBody: content: application/json: schema: type: array description: Array of AccessControlList ids items: type: string description: The ID of the access control list entry. example: - "01GNZ9MXEZ4K6S8GB7RW063VAN" - "01GNZ9MXEZ4K6S8GB7RW063VAN" responses: "200": description: The list of access control list entries content: application/json: schema: type: object properties: accessControlListIds: type: array description: Array of AccessControlList IDs items: type: string description: The ID of the access control list entry. example: accessControlListIds: - "01GNZ9MXEZ4K6S8GB7RW063VAN" - "01GNZ9MXEZ4K6S8GB7RW063VAN" /trunks/{trunkId}/credentialLists: parameters: - name: trunkId in: path description: "The ID of the trunk that you want to work with" required: true schema: type: string put: description: Update the list of credential list entries for a trunk. summary: Bulk update credential lists for a trunk operationId: bulkUpdateCredentialListsForTrunk tags: - Credential List - SIP Trunks requestBody: content: application/json: schema: type: array description: Array of credential list IDs items: type: string description: The ID of the credential list entry. example: - "01GNZ9MXEZ4K6S8GB7RW063VAN" - "01GNZ9MXEZ4K6S8GB7RW063VAN" responses: "200": description: The list of credential list entries content: application/json: schema: type: object properties: credentialListIds: type: array description: Array of credential list IDs items: type: string description: The ID of the credential list entry. example: credentialListIds: - "01GNZ9MXEZ4K6S8GB7RW063VAN" - "01GNZ9MXEZ4K6S8GB7RW063VAN" /trunks/{trunkId}/accessControlLists/{accessControlListId}: parameters: - name: trunkId in: path description: "The ID of the trunk that you want to work with" required: true schema: type: string - name: accessControlListId in: path description: "The ID of the access control list entry. that you want to remove from trunk" required: true schema: type: string delete: tags: - Access Control List - SIP Trunks operationId: deleteAccessControlListFromTrunk summary: Delete ACL from trunk description: Remove an access control list entry from a trunk. responses: "204": description: Access control list entry deleted components: parameters: Filter: name: filter in: query description: A query string to filter the results by. schema: type: string Page: in: query name: page description: The page you want to fetch, can set to 1 for first page, or omitted for first page schema: type: integer default: 1 PageSize: in: query name: pageSize description: The size of each page to fetch schema: type: integer default: 500 minimum: 1 maximum: 500 Sort: name: sort in: query description: An array setting the sorting criteria in the format of `property,(ascending/descending)` schema: type: array SipEndpointIdQuery: name: sipEndpointId in: query description: The ID of the SIP endpoint to search for. required: false schema: minimum: 0 type: integer format: int64 SipTrunkIdQuery: name: sipTrunkId in: query description: The ID of the SIP trunk to search for. required: false schema: minimum: 0 type: integer format: int64 SipEndpointId: name: sipEndpointId in: path description: "The ID of the SIP endpoint." required: true schema: minimum: 0 type: integer format: int64 SipTrunkId: name: sipTrunkId in: path description: "The ID of the SIP trunk." required: true schema: type: string PhoneNumber: name: phoneNumber in: path description: The phone number you want to search for. Must be in E.164 format. required: true schema: type: string example: "+12225559999" PhoneNumberId: name: phoneNumberId in: path description: The ID of the phone number. schema: type: string Domain: name: domain in: path description: The fully qualified domain name you you want to search for. schema: type: string examples: aclListResponse: summary: List ACLs description: List all access control lists for the project. value: accessControlLists: - name: "My Access Control List" projectId: "3acb7ae1-cf3d-4112-ba5e-3a9d8c71cd47" enabled: true id: "01HA2E80QCBX185VVP21PJG9CT" createTime: "2023-09-11T15:37:30" updateTime: "2023-09-11T15:38:14" ipRanges: - description: "Location 1" ipAddress: "54.172.60.0" range: 30 projectId: "3acb7ae1-cf3d-4112-ba5e-3a9d8c71cd47" accessControlListId: "01HA2E80QCBX185VVP21PJG9CT" id: "01HA2E80QMJS5G7MD576GJQD2X" createTime: "2023-09-11T15:37:30" updateTime: "" - description: "Location 2" ipAddress: "54.244.51.0" range: 30 projectId: "3acb7ae1-cf3d-4112-ba5e-3a9d8c71cd47" accessControlListId: "01HA2E80QCBX185VVP21PJG9CT" id: "01HA2E98KCZ1CNN0JP22F4JF3T" createTime: "2023-09-11T15:38:11" updateTime: "" - name: "My ACL 2" projectId: "3acb7ae1-cf3d-4112-ba5e-3a9d8c71cd47" enabled: true id: "01H7ZSW728SHB9984CDGFV37RM" createTime: "2023-08-16T18:31:39" updateTime: "2023-08-25T07:51:40" ipRanges: - description: "Location 1" ipAddress: "137.192.80.69" range: 32 projectId: "3acb7ae1-cf3d-4112-ba5e-3a9d8c71cd47" accessControlListId: "01H8Y95DBJT31F104PWFVV9H8B" id: "01H8Y95DBSPQAN4MD4298TY05Y" createTime: "2023-08-28T14:36:02" updateTime: "2023-09-05T10:45:53" - description: "Location 2" ipAddress: "137.192.78.69" range: 32 projectId: "3acb7ae1-cf3d-4112-ba5e-3a9d8c71cd47" accessControlListId: "01H8Y95DBJT31F104PWFVV9H8B" id: "01H8YC0JTSXXVPBECC289QZG0J" createTime: "2023-08-28T15:25:50" updateTime: "2023-09-05T07:59:07" - description: "Location 3" ipAddress: "20.20.20.20" range: 24 projectId: "3acb7ae1-cf3d-4112-ba5e-3a9d8c71cd47" accessControlListId: "01H8Y95DBJT31F104PWFVV9H8B" id: "01HA1ZPH6E2BTSG0MFM38BRYF6" createTime: "2023-09-11T11:23:17" updateTime: "" pageNumber: "1" pageSize: 500 totalItems: 2 createAclReq: summary: Create ACL description: Create a new access control list. value: name: "My new ACL" enabled: true ipRanges: - description: "Location 1" ipAddress: 15.15.15.15 range: 20 createAclRes: summary: Create ACL description: The newly created access control list. value: name: "My new ACL" projectId: "3acb7ae1-cf3d-4112-ba5e-3a9d8c71cd47" enabled: true id: "01HA9BRJW4J3QE4WBKVC337V4E" createTime: "2023-09-14T08:08:48.264185988" updateTime: "null," ipRanges: - description: "Location 1" ipAddress: "15.15.15.15" range: 20 projectId: "3acb7ae1-cf3d-4112-ba5e-3a9d8c71cd47" accessControlListId: "01HA9BRJW4J3QE4WBKVC337V4E" id: "01HA9BRJYR9Q7ZBDYMXHVWT8S8" createTime: "2023-09-14T08:08:48.346874339" updateTime: "" updateAclReq: summary: Update ACL description: Update an access control list. value: name: "Test Prague 5" enabled: false updateAclRes: summary: Update ACL description: The updated access control list. value: name: "Test Prague 5" projectId: "3acb7ae1-cf3d-4112-ba5e-3a9d8c71cd47" enabled: false id: "01HA9BRJW4J3QE4WBKVC337V4E" createTime: "2023-09-14T08:08:48" updateTime: "2023-09-14T08:10:10.187513334" ipRanges: - description: "Hradcany" ipAddress: 15.15.15.15 range: 20 projectId: "3acb7ae1-cf3d-4112-ba5e-3a9d8c71cd47" accessControlListId: "01HA9BRJW4J3QE4WBKVC337V4E" id: "01HA9BRJYR9Q7ZBDYMXHVWT8S8" createTime: "2023-09-14T08:08:48" updateTime: "" addIpRangeReq: summary: Add IP range description: Request to add an IP range to an access control list. value: description: "IP range name" ipAddress: 11.12.13.14 range: 27 addIpRangeRes: summary: Add IP range description: The added IP range. value: description: "IP range name" ipAddress: 11.12.13.14 range: 27 projectId: "3acb7ae1-cf3d-4112-ba5e-3a9d8c71cd47" accessControlListId: "01H8Y95DBJT31F104PWFVV9H8B" id: "01HA9BYAH3J5TFDGK62991YYWC" createTime: "2023-09-14T08:11:56.324855024" updateTime: "" updateIpRangeReq: summary: Update IP range description: Request to update an IP range for an access control list. value: ipAddress: 11.12.13.14 range: 27 updateIpRangeRes: summary: Update IP range description: The updated IP range. value: description: "IP range name" ipAddress: 11.12.13.14 range: 27 projectId: "3acb7ae1-cf3d-4112-ba5e-3a9d8c71cd47" accessControlListId: "01H8Y95DBJT31F104PWFVV9H8B" id: "01HA9BYAH3J5TFDGK62991YYWC" createTime: "2023-09-14T08:11:56.324855024" updateTime: "" listTrunkAcls: summary: List ACLs assigned to a trunk description: All access control lists assigned to a trunk. value: accessControlListIds: - "01HA2E80QCBX185VVP21PJG9CT" pageNumber: 1 pageSize: 1000 totalItems: 1 addTrunkAclReq: summary: Add ACLs to trunk description: Request to add access control lists to a trunk. value: accessControlListIds: - "01HA2E80QCBX185VVP21PJG9CT" - "01H8Y95DBJT31F104PWFVV9H8B" addTrunkAclRes: summary: Add ACLs to trunk description: The access control lists added to a trunk. value: accessControlListIds: - "01HA2E80QCBX185VVP21PJG9CT" - "01H8Y95DBJT31F104PWFVV9H8B" requestBodies: AddPhoneNumberRequest: content: application/json: schema: type: object properties: sipTrunkId: type: string description: The SIP trunk ID to which you are adding the number. example: "01GNZ9MXEZ4K6S8GB7RW063VAN" phoneNumber: type: string description: The phone number you are adding to the SIP trunk. example: "+12225559999" examples: addNumber: summary: Add phone number description: Add a phone number to a SIP trunk. value: sipTrunkId: "01GNZ9MXEZ4K6S8GB7RW063VAN" phoneNumber: "+12225559999" removeNumber: summary: Remove phone number description: Remove a phone number from a SIP trunk. value: sipTrunkId: "" phoneNumber: "+12225559999" schemas: AccessControlList: type: object required: - name - ipRanges properties: id: type: string description: The ID of the access control list entry. readOnly: true name: type: string description: Your name for the access control list entry. example: LA Office enabled: type: boolean description: Whether the access control list entry is enabled. You can use this to disable an list temporarily without deleting it. default: true ipRanges: type: array minItems: 1 description: The associated IP ranges. When creating you need to submit at least one IP range. items: $ref: "#/components/schemas/IpRange" trunks: type: array readOnly: true description: The associated SIP trunks ID. items: type: string description: The ID of the SIP trunk. createTime: x-version: 1 readOnly: true x-PII: false x-v1: true type: string format: date-time description: The time the call was created. example: "2021-11-01T23:20:50Z" updateTime: readOnly: true x-version: 1 x-PII: false x-v1: true type: string format: date-time description: The time the call was created. example: "2021-11-01T23:20:50Z" projectId: x-version: 1 readOnly: true type: string description: The ID of the project. IpRange: type: object description: A single or range of IP addresses. properties: id: type: string description: The ID of the IP range. readOnly: true description: type: string description: A description of the IP range. example: West wing of office ipAddress: type: string description: The start of the IP range. example: 10.0.1.1 range: type: integer description: |- A range, also known as a CIDR, represents the number of leading bits that define the network portion of an IP address in CIDR notation. The range is specified after a slash (/) at the end of the IP address. The remaining bits define specific hosts within the network. - 10.0.0.0/8: Represents all IP addresses from 10.0.0.0 to 10.255.255.255, allowing for over 16 million unique host addresses. - 172.16.0.0/16: Includes all IP addresses from 172.16.0.0 to 172.16.255.255, providing up to 65,536 unique host addresses. - 192.168.1.0/24: Encompasses all IP addresses from 192.168.1.0 to 192.168.1.255, offering 256 unique host addresses. - 192.168.1.0/32: Encompasses one ip address default: 32 example: 32 createTime: x-version: 1 readOnly: true x-PII: false x-v1: true type: string format: date-time description: The time the call was created. example: "2021-11-01T23:20:50Z" updateTime: readOnly: true x-version: 1 x-PII: false x-v1: true type: string format: date-time description: The time the call was created. example: "2021-11-01T23:20:50Z" projectId: x-version: 1 readOnly: true type: string description: The ID of the project. accessControlListId: x-version: 1 readOnly: true type: string description: The ID of the access control list. Call: description: The call resource represents an inbound or outbound connection between Sinch and a supported device type: object properties: callId: type: string description: The unique identifier of the call. format: ULID to: x-version: 1 x-PII: true type: string description: |- For `INBOUND` calls, this is the Sinch number the phone dialed. For `OUTBOUND` calls, this is the phone number you want to make a call to. Formatted according e164 format. externalDocs: url: /docs/voice/api-reference/call-types description: More details from: x-version: 1 x-PII: true x-v1: breaking type: string x-mvp-description: |- The call's origination, formatted according to the call's `callType`. For calls to the telephone network, this is a phone number in [E.164](https://community.sinch.com/t5/Glossary/E-164/ta-p/7537) format, including the leading `+`. Note: If you do not include the `from` property, the call is made from the number or identifier configured as the default for your application or service. description: |- For `INBOUND` calls, this is the number of the person calling. When making an outbound call set this to the your Sinch number you want to show up as Caller Id. The call's origination, formatted according to the call's `callType`. For calls in the telephone network, this is a phone number in [E.164](/docs/voice/api-reference/call-types) format, including the leading `+`. More info see [Call types](/docs/voice/api-reference/call-types) externalDocs: url: /docs/voice/api-reference/call-types description: More details format: phoneNumber example: "+14155553434" ##call details direction: x-version: 1 type: string enum: - INBOUND - OUTBOUND readOnly: true x-PII: false x-v1: false description: |- Describes whether the call was `INBOUND` *to* your Sinch number or was `OUTBOUND` and made *from* your Sinch number. x-enumDescriptions: INBOUND: Someone called your Sinch number. OUTBOUND: Someone called from your SIP device. answerTime: x-version: 1 readOnly: true x-PII: false x-V1: breaking type: string format: date-time description: Time when call was answered example: "2021-11-01T23:26:50Z" endTime: x-version: 1 readOnly: true type: string format: date-time x-PII: false x-V1: breaking description: The time the call ended example: "2021-11-01T23:29:50Z" durationSeconds: x-version: 1 x-PII: false x-V1: breaking description: The duration of the call in seconds. For inbound calls, this is the time from when the call started until the call ended. For outbound calls, this is the time from when the call was answered until the call ended. readOnly: true type: integer example: 45 callResult: x-version: 1 example: COMPLETED $ref: "#/components/schemas/CallResult" pricePerMinute: x-version: 1 description: The price per minute for this call. $ref: "#/components/schemas/Money" readOnly: true billingDurationSeconds: x-version: 1 readOnly: true description: The duration of the call adjusted with the billing period. type: integer example: 60 price: x-version: 1 description: The total price for this call. This field is populated when the call ends. $ref: "#/components/schemas/Money" readOnly: true createTime: x-version: 1 readOnly: true x-PII: false x-v1: true type: string format: date-time description: The time the call was created. example: "2021-11-01T23:20:50Z" projectId: x-version: 1 type: string description: The ID of the project that the call belongs to. trunkId: x-version: 1 examples: - dFeDe67-09d5-49d5-b469-e1fc2cb163c7 type: string description: The ID of the trunk that the call was made through. SipTrunk: required: - name - hostName type: object properties: id: type: string readOnly: true description: The SIP trunk id. example: "" hostName: type: string description: The host of the domain you would like to have for you trunk. example: acme-domain-1 topLevelDomain: readOnly: true type: string description: The top level domain to which the SIP trunk belongs. example: .elastic-sip.sinch.com domain: readOnly: true type: string description: The fully qualified name of the domain, which is a combination of your 'hostName' and the 'topLevelDomain'. example: acme-domain-1.elastic-sip.sinch.com name: type: string description: The friendly name of your SIP trunk. example: Acme Trunk callsPerSecond: minimum: 1 readOnly: true type: integer description: Number of calls started per second, to increase this please contact your account manager. example: 100 default: 1 enableCallerName: type: boolean description: "Enable caller name lookup for incoming calls. US and canada only." example: true default: false enableCallForward: type: boolean description: |- When enabled, if an inbound call can not be delivered to a SIP endpoint, calls will be forwarded to the configured `callForwardNumber`. To forward all calls without trying SIP, simply disable (or delete) all SIP endpoints on this trunk. Logs (and billing) will be created for 2 calls (inbound and outbound). **Note:** Since there is no SIP connection, PCAPs will not be generated. callForwardNumber: type: string format: E.164 description: The phone number to which you want to forward calls, in E.164 format. If this field is empty, no calls will be forwarded. createTime: type: string readOnly: true description: The date and time that the SIP trunk was created. format: date-time example: "2022-01-01T00:00:00Z" updateTime: type: string description: The date and time that the SIP trunk was last modified. format: date-time readOnly: true example: "2022-01-01T00:00:00Z" projectId: type: string readOnly: true description: The ID of the account. example: 1bf62742-7b84-4666-9cbe-8e5734fd57d0 description: "A created SIP trunk." Money: description: "This is where we need description to be overridden by `$ref:` description" type: object readOnly: true properties: currencyCode: readOnly: true description: The 3-letter currency code defined in ISO 4217. type: string example: USD amount: readOnly: true description: "The amount with 4 decimals and decimal delimiter `.`." type: string example: "0.0040" CallResult: description: The result of the call. readOnly: true type: string example: COMPLETED enum: - COMPLETED - NO_ANSWER - CANCEL - BUSY - FAILED x-enumDescriptions: COMPLETED: The call was completed successfully. NO_ANSWER: The call timeout before the recipient answered. CANCEL: The call was canceled. BUSY: The recipient was busy. FAILED: The call failed. Number: type: object properties: id: type: string readOnly: true description: The ID of the phone number. example: 01ARZ3NDEKTSV4RRFFQ69G5FAV sipTrunkId: type: string readOnly: true example: 5RTRZ3NDEKTSV4RRFFQ69G5EWS description: The ID of the SIP trunk to which the phone number is assigned. phoneNumber: $ref: "#/components/schemas/PhoneNumber" description: A Sinch phone number on your account and configured for Elastic SIP Trunking. example: "+15552229999" countryCode: readOnly: true type: string description: The country code of the phone number in ISO 3166-1 alpha-2 format. example: "US" createTime: type: string description: The date and time that the number was assigned to the SIP trunk. format: date-time readOnly: true example: "2022-01-01T00:00:00Z" updateTime: type: string description: The date and time that the phone number was last modified. format: date-time readOnly: true example: "2022-01-01T00:00:00Z" description: "A Sinch phone number assigned to a SIP trunk. This must be a number you own and configured for Elastic SIP Trunking." StaticEndpoint: required: - address properties: address: type: string description: The address of the SIP endpoint can be an IP address or a domain name. EST uses IP authentication and will only accept calls from the specified address or domain. example: 127.0.0.1 port: maximum: 65535 minimum: 1 type: integer description: The port of the SIP endpoint. format: int32 example: 5060 default: 5060 RegisteredEndpoint: required: - isRegistered - credentialUserName properties: isRegistered: type: boolean description: This property determines whether the endpoint is static or registered. If registered, this must be set to `true`. example: true credentialUserName: type: string description: The username for the credential list you want to use to register the endpoint. example: MyCLUserName SipEndpoint: required: - name - priority type: object oneOf: - $ref: "#/components/schemas/StaticEndpoint" - $ref: "#/components/schemas/RegisteredEndpoint" properties: id: type: string description: The ID of the SIP endpoint. readOnly: true sipTrunkId: type: string description: The ID of the SIP trunk to which the endpoint is assigned. readOnly: true example: bbc55c4c-fe25-11ec-8482-d2e74e85a66f name: type: string description: The friendly name of the SIP endpoint. example: Acme Endpoint transport: type: string description: The transport protocol of the SIP endpoint. example: UDP x-enumDescriptions: TCP: "[Transmission Control Protocol](https://community.sinch.com/t5/Glossary/TCP/ta-p/7741)" UDP: "[User Datagram Protocol](https://community.sinch.com/t5/Glossary/UDP/ta-p/7778)" TLS: "[Transport Layer Security](https://community.sinch.com/t5/Glossary/TLS/ta-p/7757)" enum: - TCP - UDP - TLS default: UDP priority: minimum: 1 type: integer description: Inbound call routing priority. If two or more endpoints have the same priority, calls will be routed to them using a round-robin strategy. format: int32 example: 1 enabled: type: boolean description: Sets whether the SIP endpoint is enabled or not. default: true createTime: readOnly: true type: string description: The date and time that the SIP endpoint was created. format: date-time example: "2022-01-01T00:00:00Z" updateTime: readOnly: true type: string description: The date and time that the SIP endpoint was last modified. format: date-time example: "2022-01-01T00:00:00Z" description: |- A SIP endpoint which is the address of your SIP infrastructure. SIP endpoints can be one of two types: static endpoints or registered endpoints. | Endpoint | Description | | -------- | ----------- | | Static endpoints | Static endpoints are defined by a static value which can either be an IP address or a domain name. | | Registered endpoints | Registered endpoints use a credential list to determine the endpoint. | --- CountryPermission: description: With country permissions you can control which countries can be dialed from your account. For beta only, countries supported are US,CA and * if you would like to allow international dialing. type: object required: - enabled properties: isoCode: description: The [ISO code](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) of the country type: string readOnly: true maxLength: 2 example: US name: description: Country name in english type: string example: United States/Canada readOnly: true continent: description: Continent of the country type: string example: North America readOnly: true countryDialingCodes: description: The country calling codes as an array, most countries have only one but some have multiple like the San Marino, China, and a few others. type: array readOnly: true items: type: string description: The country calling code example: - "+1" enabled: readOnly: false type: boolean description: If the country is enabled or not. When this is enabled regular numbers can be dialed from the account. default: true example: true DomainExists: type: object description: Displays whether the specified domain exists as a SIP trunk, and if so, the SIP Trunk ID. properties: exists: type: boolean description: This value returns true if the domain exists as a SIP trunk, and false if it does not. example: true sipTrunkId: type: string description: If the domain exists as a SIP trunk, this is the ID. ### common data types PhoneNumber: type: string description: "A phone number in [E.164](https://community.sinch.com/t5/Glossary/E-164/ta-p/7537) format, including the leading '+'." example: "+15551239898" Error: description: "An error response. The `code` field is a unique identifier for the error. The `message` field is a human-readable description of the error." type: object properties: code: description: HTTP status code or error code readOnly: true type: integer format: int32 example: 400 status: description: Response status name. readOnly: true type: string example: INVALID_ARGUMENT message: type: string readOnly: true description: A developer-facing error message example: Bad request. details: readOnly: true description: Details of the errors type: array items: type: object $ref: "#/components/schemas/ErrorDetail" ErrorDetail: type: object anyOf: - $ref: "#/components/schemas/BadRequestDetail" - $ref: "#/components/schemas/RequestInfoDetail" - $ref: "#/components/schemas/QuotaFailureDetail" - $ref: "#/components/schemas/ErrorInfo" discriminator: propertyName: type mapping: BadRequest: "#/components/schemas/BadRequestDetail" RequestInfo: "#/components/schemas/RequestInfoDetail" QuotaFailure: "#/components/schemas/QuotaFailureDetail" ErrorInfo: "#/components/schemas/ErrorInfo" BadRequestDetail: type: object description: The request was malformed on one or more fields. x-internal: https://github.com/googleapis/googleapis/blob/f79d6e85a9a6b913a5e9cb0067e846e7f087dbc8/google/rpc/error_details.proto#L169 properties: type: type: string description: The request was malformed on one or more fields. readOnly: true example: BadRequest default: BadRequest fieldViolations: description: The field violation(s). type: array items: type: object readOnly: true $ref: "#/components/schemas/FieldViolation" FieldViolation: type: object properties: field: type: string readOnly: true description: Request field. example: to description: type: string readOnly: true description: Description of why the request field was considered invalid. example: Phone number was not in the expected format. RequestInfoDetail: description: Information on why a request failed. type: object x-internal: https://github.com/googleapis/googleapis/blob/f79d6e85a9a6b913a5e9cb0067e846e7f087dbc8/google/rpc/error_details.proto#L187 properties: type: type: string description: Information on why a request failed. readOnly: true example: RequestInfo default: RequestInfo requestId: type: string example: "879c4177-af8a-4534-8168-cc2f66a1f2c6" description: The ID of the request. data: type: object description: The data sent to to the API when the error occurred. QuotaFailureDetail: type: object description: Describes how a quota check failed. For example if the total number of `IN_PROGRESS` call was reached properties: type: type: string description: Describes how a quota check failed. For example if the total number of `IN_PROGRESS` call was reached readOnly: true example: QuotaFailure default: QuotaFailure violations: description: A list of quota violations type: array items: $ref: "#/components/schemas/QuotaFailure" QuotaFailure: type: object description: Description of quota failure, example not enough credit, maximum calls per minute properties: subject: type: string description: On what part the quota failed, example ip address, CPS. description: description: |- A description of how the quota check failed. You can can use this description to find more about the quota configuration in the service's public documentation ErrorInfo: description: |- Describes the cause of the error with structured details. Example of an error when trying to make a call to blocked destination: { "reason": "DESTINATION_BLOCKED" "domain": "VOICE" "metadata": { "country": "Bermuda", } } type: object properties: type: type: string description: |- Describes the cause of the error with structured details. Example of an error when trying to make a call to blocked destination: ``` { "reason": "DESTINATION_BLOCKED" "domain": "VOICE" "metadata": { "country": "Bermuda", } } ``` default: ErrorInfo example: ErrorInfo reason: type: string description: |- The reason of the error. This is a constant value that identifies the proximate cause of the error. Error reasons are unique. Max 63 characters and match /[A-Z0-9_]+/. maxLength: 63 domain: type: string description: Domain for error, for voice its always sinch.voice metaData: description: Additional structured details about this error. key value pair of strings type: object Pagination: type: object readOnly: true properties: totalItems: type: integer readOnly: true format: int32 description: Total size of the result. example: 10000 pageNumber: readOnly: true type: string description: The token to be used for listing the next page example: 1 pageSize: type: integer readOnly: true format: int32 description: The number of items per page. Default is 500. example: 500 securitySchemes: Basic: type: http description: |- To use basic authentication, use your Access Key ID as your username and your Access Key Secret as your password. To read about more basic authentication, see the [Basic Authentication](/docs/est/api-reference/#basic) section. scheme: basic OAuth2.0: type: oauth2 description: |- To use OAuth 2.0 authentication, use your Access Key ID and Access Key Secret to obtain your bearer token. For detailed instructions on how to do this, see the [OAuth Authentication](/docs/est/api-reference/#oauth) section. flows: clientCredentials: tokenUrl: https://auth.sinch.com/oauth2/token scopes: {}