OpenAI ChatGPT integrations
risk.is_ai
- Method
- Ranges Published IP ranges
- Official file
- Format
- JSON range file
- Refresh
- Every hour. If a refresh fails, entries expire after 24 hours instead of being trusted forever.
Bot signals — AI crawler & agent
ChatGPT plugins, connectors, GPT Actions, agentic commerce and Private Safety Processing egress; not an authentication guarantee.
01 — Verification
Only from what OpenAI ChatGPT integrations publishes about itself. No third-party blocklists, no behavioural guesses. Live address counts change with every publication, so check the official file for the current list.
risk.is_ai
02 — In the response
A lookup of a OpenAI ChatGPT integrations address sets risk.is_ai. The flags come with geolocation and network data in the same response, for Pro API keys.
The response says which kind of bot an address belongs to, not which operator. Pair it with the user agent: a request that claims to be OpenAI ChatGPT integrations but doesn't match is unverified.
{
// … location and network fields …
"risk": {
"is_ai": true,
"is_crawler": false,
"is_scanner": false
}
}
03 — Configuration
# 1. Build a geo include from the official file (cron, e.g. hourly).
# Keep the old file if the download fails or comes back empty.
curl -fsS https://openai.com/chatgpt-connectors.json \
| jq -r '.prefixes[] | (.ipv4Prefix // .ipv6Prefix // empty) | "\(.) 1;"' \
> /etc/nginx/chatgpt-integrations-ranges.conf.new && [ -s /etc/nginx/chatgpt-integrations-ranges.conf.new ] && mv /etc/nginx/chatgpt-integrations-ranges.conf.new /etc/nginx/chatgpt-integrations-ranges.conf \
&& nginx -t -q && nginx -s reload
# 2. In the http block: 1 when the client IP is in the published ranges.
geo $chatgpt_integrations_ip {
default 0;
include /etc/nginx/chatgpt-integrations-ranges.conf;
}
prefixes array.04 — Questions
OpenAI ChatGPT integrations publishes its addresses at https://openai.com/chatgpt-connectors.json. IPAPI.GR reads that publication directly, not a third-party copy.
IPAPI.GR re-fetches it every hour. If a refresh fails, the previous entries expire after at most 24 hours instead of being trusted forever.
A matching address sets risk.is_ai in the lookup response. The risk flags are returned for Pro API keys.
Pro: 40,000,000 requests a day with is_ai, is_crawler and is_scanner in every lookup.