> ## Documentation Index
> Fetch the complete documentation index at: https://plivo.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# IP Access Control Lists

> Manage IP whitelists for authenticating outbound SIP trunks

The IP Access Control Lists API lets you create and manage IP address whitelists for authenticating outbound SIP trunks.

## API Endpoint

```
https://api.plivo.com/v1/Account/{auth_id}/Zentrunk/IPAccessControlList/
```

***

## The IP Access Control List Object

An IP Access Control List (IP ACL) contains a set of whitelisted IP addresses that can send SIP traffic to your outbound trunk.

### Attributes

<ParamField body="ipacl_uuid" type="string">
  Unique identifier for the IP ACL.
</ParamField>

<ParamField body="name" type="string">
  Friendly name for the IP ACL.
</ParamField>

<ParamField body="ip_addresses" type="array">
  List of whitelisted IP addresses.
</ParamField>

### Example Object

```json theme={null}
{
  "ipacl_uuid": "f19c4773-4ae6-4b75-92ea-9cf3ea4227d6",
  "name": "production-servers",
  "ip_addresses": [
    "192.168.1.1",
    "192.168.1.2"
  ]
}
```

***

## List All IP Access Control Lists

Get all IP ACLs for your account.

### HTTP Request

`GET https://api.plivo.com/v1/Account/{auth_id}/Zentrunk/IPAccessControlList/`

### Query Parameters

| Parameter | Type    | Required | Default | Description             |
| --------- | ------- | -------- | ------- | ----------------------- |
| `limit`   | integer | No       | 20      | Results per page (1-20) |
| `offset`  | integer | No       | 0       | Pagination offset       |

### Response

<ResponseField name="api_id" type="string">
  Unique identifier for the API request.
</ResponseField>

<ResponseField name="meta" type="object">
  Pagination metadata: `limit` (results per page), `offset` (items skipped), `total_count` (total matching IP access control lists).
</ResponseField>

<ResponseField name="objects" type="array">
  Array of IP access control list objects — see [The IP Access Control List Object](#the-ip-access-control-list-object).
</ResponseField>

```json theme={null}
{
  "api_id": "a04ad809-3b78-4bbe-9baf-acfc7800b10f",
  "meta": {
    "limit": 20,
    "offset": 0,
    "total_count": 109,
    "previous": null,
    "next": "v1/Account/{auth_id}/Zentrunk/IPAccessControlList/?limit=20&offset=20"
  },
  "objects": [
    {
      "ipacl_uuid": "f19c4773-4ae6-4b75-92ea-9cf3ea4227d6",
      "name": "production-servers",
      "ip_addresses": ["192.168.1.1", "192.168.1.2"]
    },
    {
      "ipacl_uuid": "a19c4773-4ae6-4b75-92ea-9cf3ea4227d7",
      "name": "staging-servers",
      "ip_addresses": ["10.0.0.1", "10.0.0.2"]
    }
  ]
}
```

### Example

```bash cURL theme={null}
curl -i --user AUTH_ID:AUTH_TOKEN \
    https://api.plivo.com/v1/Account/{auth_id}/Zentrunk/IPAccessControlList/
```

***

## Retrieve an IP Access Control List

Get details of a specific IP ACL.

### HTTP Request

`GET https://api.plivo.com/v1/Account/{auth_id}/Zentrunk/IPAccessControlList/{ipacl_uuid}/`

### Response

<ResponseField name="ipacl_uuid" type="string">
  Unique identifier for the IP ACL.
</ResponseField>

<ResponseField name="name" type="string">
  Friendly name for the IP ACL.
</ResponseField>

<ResponseField name="ip_addresses" type="array">
  List of whitelisted IP addresses.
</ResponseField>

```json theme={null}
{
  "ipacl_uuid": "f19c4773-4ae6-4b75-92ea-9cf3ea4227d6",
  "name": "production-servers",
  "ip_addresses": [
    "192.168.1.1",
    "192.168.1.2"
  ]
}
```

### Example

```bash cURL theme={null}
curl -i --user AUTH_ID:AUTH_TOKEN \
    https://api.plivo.com/v1/Account/{auth_id}/Zentrunk/IPAccessControlList/f19c4773-4ae6-4b75-92ea-9cf3ea4227d6/
```

***

## Create an IP Access Control List

Create a new IP whitelist for SIP trunk authentication.

### HTTP Request

`POST https://api.plivo.com/v1/Account/{auth_id}/Zentrunk/IPAccessControlList/`

### Request Parameters

| Parameter      | Type   | Required | Default | Description                        |
| -------------- | ------ | -------- | ------- | ---------------------------------- |
| `name`         | string | No       | -       | Friendly name for the IP ACL       |
| `ip_addresses` | array  | Yes      | -       | Array of IP addresses to whitelist |

### Response

<ResponseField name="api_id" type="string">
  Unique identifier for the API request.
</ResponseField>

<ResponseField name="message" type="string">
  Status of the request. Returns `IP access control list created successfully.` on a successful creation.
</ResponseField>

<ResponseField name="ipacl_uuid" type="string">
  Unique identifier for the IP ACL.
</ResponseField>

```json theme={null}
{
  "api_id": "4e1f954c-baf3-11ec-bafe-0242ac110003",
  "message": "IP access control list created successfully.",
  "ipacl_uuid": "f19c4773-4ae6-4b75-92ea-9cf3ea4227d6"
}
```

### Error Codes

| Code | Description                                 |
| ---- | ------------------------------------------- |
| 400  | Invalid request parameters                  |
| 401  | Authentication failed                       |
| 422  | Missing required parameters (ip\_addresses) |

### Example

```bash cURL theme={null}
curl -i --user AUTH_ID:AUTH_TOKEN \
    -H "Content-Type: application/json" \
    -d '{
      "name": "production-servers",
      "ip_addresses": ["192.168.0.1", "192.168.0.2", "10.0.0.1"]
    }' \
    https://api.plivo.com/v1/Account/{auth_id}/Zentrunk/IPAccessControlList/
```

***

## Update an IP Access Control List

Modify an existing IP ACL's name or IP addresses.

### HTTP Request

`POST https://api.plivo.com/v1/Account/{auth_id}/Zentrunk/IPAccessControlList/{ipacl_uuid}/`

### Request Parameters

| Parameter      | Type   | Required | Default | Description                                  |
| -------------- | ------ | -------- | ------- | -------------------------------------------- |
| `name`         | string | No       | -       | New friendly name                            |
| `ip_addresses` | array  | No       | -       | New list of IP addresses (replaces existing) |

### Response

<ResponseField name="api_id" type="string">
  Unique identifier for the API request.
</ResponseField>

<ResponseField name="message" type="string">
  Status of the request. Returns `IP access control list updated successfully.` on a successful update.
</ResponseField>

<ResponseField name="ipacl_uuid" type="string">
  Unique identifier for the IP ACL.
</ResponseField>

```json theme={null}
{
  "api_id": "4e1f954c-baf3-11ec-bafe-0242ac110003",
  "message": "IP access control list updated successfully.",
  "ipacl_uuid": "f19c4773-4ae6-4b75-92ea-9cf3ea4227d6"
}
```

<Note>
  Updating `ip_addresses` replaces the entire list. Include all IP addresses you want whitelisted.
</Note>

### Example

```bash cURL theme={null}
curl -i --user AUTH_ID:AUTH_TOKEN \
    -H "Content-Type: application/json" \
    -d '{
      "name": "updated-servers",
      "ip_addresses": ["192.168.0.1", "192.168.0.2", "192.168.0.3"]
    }' \
    https://api.plivo.com/v1/Account/{auth_id}/Zentrunk/IPAccessControlList/f19c4773-4ae6-4b75-92ea-9cf3ea4227d6/
```

***

## Delete an IP Access Control List

Permanently delete an IP ACL.

### HTTP Request

`DELETE https://api.plivo.com/v1/Account/{auth_id}/Zentrunk/IPAccessControlList/{ipacl_uuid}/`

### Response

HTTP 204 No Content

<Warning>
  Deleting an IP ACL that is attached to an active trunk will break authentication for that trunk.
</Warning>

### Example

```bash cURL theme={null}
curl -X DELETE -i --user AUTH_ID:AUTH_TOKEN \
    https://api.plivo.com/v1/Account/{auth_id}/Zentrunk/IPAccessControlList/f19c4773-4ae6-4b75-92ea-9cf3ea4227d6/
```

***

## Usage with Trunks

After creating an IP ACL, attach it to an outbound trunk.

### Example

```bash cURL theme={null}
curl -i --user AUTH_ID:AUTH_TOKEN \
    -H "Content-Type: application/json" \
    -d '{
      "name": "outbound-trunk",
      "trunk_direction": "outbound",
      "ipacl_uuid": "f19c4773-4ae6-4b75-92ea-9cf3ea4227d6"
    }' \
    https://api.plivo.com/v1/Account/{auth_id}/Zentrunk/Trunk/
```

***

## IP ACL vs Credentials

| Method          | Use Case                                                                                       |
| --------------- | ---------------------------------------------------------------------------------------------- |
| **IP ACL**      | When your PBX has static IP addresses. Simpler setup, no password management.                  |
| **Credentials** | When your PBX has dynamic IPs or you need additional security. Uses SIP digest authentication. |

You can use either method (or both) for outbound trunk authentication.

***

## Related

* [Trunks](/docs/sip-trunking/api/trunks/) - Create and manage SIP trunks
* [Credentials](/docs/sip-trunking/api/credentials/) - Alternative authentication via username/password
