# ChatGPT-User

> Fetches a single page at the moment a user or a ChatGPT agent asks for it — a pasted link, a browsing step, an Operator task. One human intent, one request. OpenAI states these fetches are not used for training.

| field | value |
|---|---|
| operator | OpenAI |
| category | User-triggered fetchers |
| robots.txt token | `ChatGPT-User` |
| user-agent contains | `ChatGPT-User` |
| robots.txt | obeys robots.txt (documented) |
| verify by | published IP ranges |
| published IP ranges | https://openai.com/chatgpt-user.json |
| prefixes mirrored | 213 IPv4 / 0 IPv6 |
| operator docs | https://platform.openai.com/docs/bots |
| last reviewed | 2026-09-14 |

## What blocking it costs you

ChatGPT cannot open your pages when a user explicitly asks it to. The user sees a fetch failure. This is usually the last bot anyone means to block.

## Full user-agent string

```
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/W.X.Y.Z Safari/537.36; compatible; ChatGPT-User/1.0; +https://openai.com/bot
```

## Block it

```
User-agent: ChatGPT-User
Disallow: /
```

## Allow it

```
User-agent: ChatGPT-User
Allow: /
```

## Ask this page a question, with one GET

A question about this page, answered by a call you can make right now — no key, no account, no JSON-RPC, nothing to assemble. The query string is already filled in with this page's own subject.

- **How do I prove a request really is ChatGPT-User?**  
  `curl -s 'https://www.pathwren.workers.dev/tools/verification-methods?crawler=chatgpt-user&s=client-dossiers'`  
  The verification method its operator actually publishes — published IP ranges, reverse DNS, or nothing at all — and the mirror of it on this host.
- **Is 104.208.184.192 really ChatGPT-User?**  
  `curl -s 'https://www.pathwren.workers.dev/tools/verify-crawler?ip=104.208.184.192&ua=ChatGPT-User&s=client-dossiers'`  
  That address checked against every prefix this host mirrors. 104.208.184.192 is the first address of 104.208.184.192/28, one of the ranges listed on this page — so the link is a worked example that returns a match. Swap in an address from your own log.

Every parameter above is a value the endpoint reads, not an address it visits: nothing is fetched on your behalf. Called without any parameter, each endpoint returns its own specification instead of an error.

JSON: https://www.pathwren.workers.dev/crawler/chatgpt-user.json · index: https://www.pathwren.workers.dev/llms.txt
