Zendesk Public IPs

This API retrieves a list of Zendesk’s main public IP ingress and egress addresses. For additional configuration for specific products, see Configuring your firewall for use with Zendesk in Help Center.

JSON format

Public IPs are represented as JSON objects with the following properties:

NameTypeRead-onlyMandatoryDescription
egressobjecttruefalseThe list of IPs Zendesk will connect to your systems. See IP List Object
ingressobjecttruefalseThe list of IPs you use to connect to Zendesk. See IP List Object

IP List Object

NameTypeDescription
allarrayThe full list of IPs
specificarrayThe specific list of IPs

A temporary key (specific) is also available in case your firewall can't configure all the IPs. If you use it, make sure your script expects that specific might disappear and reads from all in that case. If your account is moved to another Pod, the specific list will change and your firewall will block the unknown IPs.

You can set up an alert or integration using this endpoint.

Example

{  "egress": {    "all": [      "102.16.12.041/32",      "102.16.90.041/32"    ],    "specific": [      "102.16.12.041/32",      "102.16.90.041/32"    ]  },  "ingress": {    "all": [      "102.16.41.041/32",      "102.16.54.041/32",      "102.16.28.041/32"    ],    "specific": [      "104.16.41.041/32",      "104.16.54.041/32",      "104.16.28.041/32",      "104.16.12.041/32",      "104.16.90.041/32"    ]  }}

List Zendesk Public IPs

  • GET /ips

Retrieves a list of Zendesk’s main public IP ingress and egress addresses.

As a best practice, set up a scheduled request (such as daily) to alert if the list changes, or to configure your firewall. This also helps Zendesk identify the customers that use this feature. Zendesk can reach out if it needs to execute emergency IP changes.

Allowed For

  • Anonymous

Code Samples

cURL
curl https://{subdomain}.zendesk.com/ips
Go
import (	"fmt"	"io"	"net/http")
func main() {	url := "https://support.zendesk.com/ips"	method := "GET"	req, err := http.NewRequest(method, url, nil)
	if err != nil {		fmt.Println(err)		return	}	req.Header.Add("Content-Type", "application/json")
	client := &http.Client {}	res, err := client.Do(req)	if err != nil {		fmt.Println(err)		return	}	defer res.Body.Close()
	body, err := io.ReadAll(res.Body)	if err != nil {		fmt.Println(err)		return	}	fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://support.zendesk.com/ips")		.newBuilder();
Request request = new Request.Builder()		.url(urlBuilder.build())		.method("GET", null)		.addHeader("Content-Type", "application/json")		.build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');
var config = {  method: 'GET',  url: 'https://support.zendesk.com/ips',  headers: {	'Content-Type': 'application/json',  },};
axios(config).then(function (response) {  console.log(JSON.stringify(response.data));}).catch(function (error) {  console.log(error);});
Python
import requests
url = "https://support.zendesk.com/ips"headers = {	"Content-Type": "application/json",}
response = requests.request(	"GET",	url,	headers=headers)
print(response.text)
Ruby
require "net/http"uri = URI("https://support.zendesk.com/ips")request = Net::HTTP::Get.new(uri, "Content-Type": "application/json")response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|	http.request(request)end

Example response(s)

200 OK
// Status 200 OK
{  "ips": {    "egress": {      "all": [        "102.16.12.041/32",        "102.16.90.041/32"      ],      "specific": [        "102.16.12.041/32",        "102.16.90.041/32"      ]    },    "ingress": {      "all": [        "102.16.41.041/32",        "102.16.54.041/32",        "102.16.28.041/32"      ],      "specific": [        "104.16.41.041/32",        "104.16.54.041/32",        "104.16.28.041/32",        "104.16.12.041/32",        "104.16.90.041/32"      ]    }  }}