---
title: StreamKit Cloud SIP trunking Setup
slug: dynamic-sip-trunking/streamkit-cloud-sip-trunking-setup
docTags: 
createdAt: 2026-01-24T09:56:59.742Z
---

# StreamKit Cloud Setup (for Voice AI)

StreamKit enables you to connect your Contact Center to Voice AI bots. The setup is similar to PSTN, but uses mode: flow when mapping phone numbers.

****

![](https://api.archbee.com/api/optimize/SK2urIgCC2ml99YyqWOSl/K2sc4YfAy2tfPxKU4zVca_screenshot-2026-01-24-at-33347apm.png)

****

**Setup Flow:**

:::BlockQuote
Create Trunk → 2. Map Phone Number (mode: flow) → 3. Map ACL to Trunk
:::

## StreamKit: Create Trunk

1\. Create Trunk

Creates a new SIP trunk. This is the first step for all SIP Trunking use cases.

A SIP Trunk acts as a virtual connection between your communication system (PBX/Contact Center) and Exotel's telephony network.

### HTTP Request

:::BlockQuote
POST https\://\<your\_api\_key>:\<your\_api\_token>@\<subdomain>/v2/accounts/\<your\_sid>/trunks
:::

### Request Headers

| Header       | Value            |
| ------------ | ---------------- |
| Content-Type | application/json |

### Request Parameters

The following parameters are sent as JSON in the body of the request:

| Parameter Name | Mandatory/Optional | Value                                                                                                                                                |
| -------------- | ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| trunk\_name    | Mandatory          | String; Unique identifier for the trunk. Must be alphanumeric with underscores only, maximum 16 characters. Example: outbound\_trunk, my\_pbx\_trunk |
| nso\_code      | Mandatory          | String; Network Service Operator code. Use ANY-ANYfor standard configuration.                                                                        |
| domain\_name   | Mandatory          | String; SIP domain for the trunk. Format: \<your\_sid>.pstn.exotel.com. Example: ameyo5m.pstn.exotel.com                                             |

### Example Request

:::BlockQuote
curl -X POST "https\://\<your\_api\_key>:\<your\_api\_token>@\<subdomain>/v2/accounts/\<your\_sid>/trunks" \\
&#x20; -H "Content-Type: application/json" \\
&#x20; -d '\{
&#x20;   "trunk\_name": "outbound\_trunk",
&#x20;   "nso\_code": "ANY-ANY",
&#x20;   "domain\_name": "\<your\_sid>.pstn.exotel.com"
&#x20; }'
:::

### HTTP Response

On success, the HTTP response status code will be 200 OK.

The trunk\_sidis the unique identifier of the trunk - **save this value** as it will be required for all subsequent API calls.

### Example Response

:::BlockQuote
\{
&#x20; "request\_id": "10a67da360d446378d5c2b66407b7f18",
&#x20; "method": "POST",
&#x20; "http\_code": 200,
&#x20; "response": \{
&#x20;   "code": 200,
&#x20;   "error\_data": null,
&#x20;   "status": "success",
&#x20;   "data": \{
&#x20;     "trunk\_name": "outbound\_trunk",
&#x20;     "date\_created": "2026-01-23T09:24:59Z",
&#x20;     "date\_updated": "2026-01-23T09:24:59Z",
&#x20;     "trunk\_sid": "trmum1f708622631150902801a1n",
&#x20;     "status": "active",
&#x20;     "domain\_name": "ameyo5m.pstn.exotel.com",
&#x20;     "auth\_type": "IP-WHITELIST",
&#x20;     "registration\_enabled": "disabled",
&#x20;     "edge\_preference": "auto",
&#x20;     "nso\_code": "ANY-ANY",
&#x20;     "secure\_trunking": "disabled",
&#x20;     "destination\_uris": "/v2/accounts/ameyo5m/trunks/trmum1f708622631150902801a1n/destination-uris",
&#x20;     "whitelisted\_ips": "/v2/accounts/ameyo5m/trunks/trmum1f708622631150902801a1n/whitelisted-ips",
&#x20;     "credentials": "/v2/accounts/ameyo5m/trunks/trmum1f708622631150902801a1n/credentials",
&#x20;     "phone\_numbers": "/v2/accounts/ameyo5m/trunks/trmum1f708622631150902801a1n/phone-numbers"
&#x20;   }
&#x20; }
}
:::

### Response Parameters

| Parameter Name        | Type & Value                                                                                                                       |
| --------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| request\_id           | String; Unique identifier for this API request                                                                                     |
| method                | String; HTTP method used (POST)                                                                                                    |
| http\_code            | Integer; HTTP status code (200 for success)                                                                                        |
| trunk\_sid            | String; **Important** - Unique identifier for the trunk. Save this for subsequent API calls. Example: trmum1f708622631150902801a1n |
| trunk\_name           | String; Name of the trunk as provided in request                                                                                   |
| domain\_name          | String; SIP domain for the trunk                                                                                                   |
| status                | String; Current trunk status: active- Trunk is ready for use, inactive- Trunk is disabled                                          |
| auth\_type            | String; Authentication type. Currently only IP-WHITELISTis supported                                                               |
| registration\_enabled | String; SIP registration status: enabledor disabled                                                                                |
| edge\_preference      | String; Edge server preference. Default: auto                                                                                      |
| nso\_code             | String; Network Service Operator code                                                                                              |
| secure\_trunking      | String; TLS status: enabledor disabled                                                                                             |
| destination\_uris     | String; API path to manage destination URIs for this trunk                                                                         |
| whitelisted\_ips      | String; API path to manage ACLs (whitelisted IPs) for this trunk                                                                   |
| credentials           | String; API path to credentials for this trunk                                                                                     |
| phone\_numbers        | String; API path to manage phone numbers for this trunk                                                                            |
| date\_created         | String; ISO 8601 timestamp when trunk was created                                                                                  |
| date\_updated         | String; ISO 8601 timestamp when trunk was last updated                                                                             |

## StreamKit: Map Phone Number (Flow Mode)

Same endpoint as PSTN, but with mode: flowto route calls to Voice AI bot.

### Example Request

:::BlockQuote
curl -X POST "https\://\<your\_api\_key>:\<your\_api\_token>@\<subdomain>/v2/accounts/\<your\_sid>/trunks/\<trunk\_sid>/phone-numbers" \\
&#x20; -H "Content-Type: application/json" \\
&#x20; -d '\{
&#x20;   "phone\_number": "+919876543210",
&#x20;   "mode": "flow"
&#x20; }'
:::

### Example Response

:::BlockQuote
\{
&#x20; "request\_id": "9351dabddc21476e8351d662f1ce31e1",
&#x20; "method": "POST",
&#x20; "http\_code": 200,
&#x20; "response": \{
&#x20;   "code": 200,
&#x20;   "error\_data": null,
&#x20;   "status": "success",
&#x20;   "data": \{
&#x20;     "id": "41523",
&#x20;     "phone\_number": "+919876543210",
&#x20;     "trunk\_sid": "trmum1f708622631150902801a1n",
&#x20;     "date\_created": "2026-01-23T13:28:11Z",
&#x20;     "date\_updated": "2026-01-23T13:28:11Z",
&#x20;     "mode": "flow"
&#x20;   }
&#x20; }
}
:::

## StreamKit: Map ACL to Trunk

Registers your server's public IP address for authentication. This is required for **Outbound/Termination** calls - allowing your system to send calls through the trunk.

ACL (Access Control List) ensures only authorized IP addresses can use your trunk for outbound calling.

### HTTP Request

:::BlockQuote
POST https\://\<your\_api\_key>:\<your\_api\_token>@\<subdomain>/v2/accounts/\<your\_sid>/trunks/\<trunk\_sid>/whitelisted-ips
:::

### Request Headers

| Header       | Value            |
| ------------ | ---------------- |
| Content-Type | application/json |

### Request Parameters

| Parameter Name | Mandatory/Optional | Value                                                                                                                  |
| -------------- | ------------------ | ---------------------------------------------------------------------------------------------------------------------- |
| ip             | Mandatory          | String; Your server's public IP address. Must be a valid IPv4 address. Example: 44.248.146.11, 203.0.113.50            |
| mask           | Optional           | Integer; Subnet mask in CIDR notation. Default: 32(single IP). Use 24for /24 subnet, 16for /16 subnet. Example: 32, 24 |

### Example Request

:::BlockQuote
curl -X POST "https\://\<your\_api\_key>:\<your\_api\_token>@\<subdomain>/v2/accounts/\<your\_sid>/trunks/\<trunk\_sid>/whitelisted-ips" \\
&#x20; -H "Content-Type: application/json" \\
&#x20; -d '\{
&#x20;   "ip": "44.248.146.11",
&#x20;   "mask": 32
&#x20; }'
:::

### HTTP Response

On success, the HTTP response status code will be 200 OK.

### Example Response

:::BlockQuote
\{
&#x20; "request\_id": "3daaed4cd05d443f854e07e60dd4c008",
&#x20; "method": "POST",
&#x20; "http\_code": 200,
&#x20; "response": \{
&#x20;   "code": 200,
&#x20;   "error\_data": null,
&#x20;   "status": "success",
&#x20;   "data": \{
&#x20;     "id": "1153",
&#x20;     "mask": 32,
&#x20;     "trunk\_sid": "trmum1f708622631150902801a1n",
&#x20;     "ip": "44.248.146.11",
&#x20;     "friendly\_name": null,
&#x20;     "date\_created": "2026-01-23T11:37:36Z",
&#x20;     "date\_updated": "2026-01-23T11:37:36Z"
&#x20;   }
&#x20; }
}
:::

### Response Parameters

| Parameter Name | Type & Value                                                |
| -------------- | ----------------------------------------------------------- |
| id             | String; Unique identifier for this ACL entry. Example: 1153 |
| ip             | String; The whitelisted IP address                          |
| mask           | Integer; Subnet mask in CIDR notation                       |
| trunk\_sid     | String; The trunk this ACL is associated with               |
| friendly\_name | String or null; Optional friendly name for the IP           |
| date\_created  | String; ISO 8601 timestamp when ACL was created             |
| date\_updated  | String; ISO 8601 timestamp when ACL was last updated        |

5. Build Flow and Map VoIP Exophone follow for all steps [StreamKit Cloud](docId\:ZQQIHN5JddQdVyw0eAr88)&#x20;

b. Create flow in AppBazaar with Voicebot applet and passthru applet: *https\://my.in.exotel.com/apps*

c. Procure VoIP exophone or contact support

d. Map DID to flow through Exophone: *https\://my.in.exotel.com/numbers*

**

[Github Repo](https://github.com/exotel/exotel-vsip-trunk-Configuration-API/tree/main)

[Postman Collection](https://www.postman.com/grey-star-272776/exotel-sip-trunking-apis/collection/14803574-a0c66128-0e2c-4e6d-a06a-03173b9d43cd)
