# Before You Open Claude or Codex: Check Your Egress IP Risk

> Source: <https://dev.to/ip99/before-you-open-claude-or-codex-check-your-egress-ip-risk-3002>
> Published: 2026-10-15 13:14:25+00:00

If you use [Claude](https://claude.ai) or [Codex](https://openai.com/codex) — or any AI product whose abuse systems lean hard on network signals — the path you use to log in matters. Shared residential proxies, recycled VPN exits, and dial-up pools show up constantly in fraud and abuse telemetry. Platforms do not publish their exact rules, and this post is **not** a bypass guide. What you *can* do is basic **egress hygiene**: know what your current public IP looks like *before* you authenticate.

[IP99](https://ip99.com/?utm_source=devto&utm_medium=article&utm_campaign=ip99&utm_content=claude-codex-check) (by ThreatHunter) is a free, no-key IP risk and geolocation lookup. It will not guarantee that Claude or Codex keep your account. What it *can* do is tell you whether the address you are about to present already carries fresh proxy-class evidence — and whether that evidence is still active or already aged out.

A lot of advice online collapses into slogans: “use a clean IP,” “residential is safer,” “datacenter gets banned.” Reality is messier.

`usage_type` of residential (`DYN`) alone is not a green light.` hosting` locks out whole clouds.
So the useful habit is smaller: before a sensitive login, look up *this* egress *now*, read the evidence state, then decide whether to switch networks — the same way you would avoid a café Wi‑Fi for banking without pretending you cracked the bank’s risk model.

Open [what-is-my-ip](https://ip99.com/en/what-is-my-ip?utm_source=devto&utm_medium=article&utm_campaign=ip99&utm_content=claude-codex-check) or call the free API with no address path — IP99 answers about the client that reached it:

```
curl https://ip99.com/v1/ip
```

Anonymous tier: **500 lookups/day** per client IP, no signup. Signed-in accounts get a higher daily quota via a self-serve key. Same fields either way.

A live call on **15 Oct 2026** from a cloud egress returned (values move as evidence ages; shape is stable):

```
{
  "ip": "140.248.50.27",
  "computed_at": "2026-10-15T13:09:35Z",
  "evidence_state": "none",
  "risk": {
    "score": 0,
    "level": "none",
    "signals": ["hosting"]
  },
  "network": {
    "asn": 54113,
    "usage_type": "IDC"
  },
  "geo": {
    "continent": "NA",
    "country": "US",
    "region": "Virginia",
    "city": "Ashburn",
    "tz": "America/New_York"
  }
}
```

Here `hosting` is a **network property** (IDC / CDN-class space), not a proxy verdict. `evidence_state: none` with score 0 means IP99 holds **no current verifiable risk evidence** for this address — a coverage gap or a quiet address, **not** a certificate of safety.

```
curl https://ip99.com/v1/ip/8.8.8.8
```

Same day, Google Public DNS:

```
{
  "ip": "8.8.8.8",
  "evidence_state": "none",
  "risk": { "score": 0, "level": "none", "signals": ["hosting"] },
  "network": { "asn": 15169, "usage_type": "IDC" },
  "geo": { "country": "US", "city": "Mountain View" }
}
```

Again: datacenter property, no active proxy-class hit in this feed. Useful as a sanity check that your client and parser work — not as “8.8.8.8 is safe for logins.”

`evidence_state`` active` (fresh evidence still scoring), `stale` (seen before, aged past the window, score 0 — weak feature only), `none` (never seen / no current evidence).`risk.score` / `risk.level`` risk.signals``proxy`, `vpn`, `dialup_pool`, `hijacked_proxy`, `cloud_phone`, `cloud_service` as proxy-class cues. Treat `mobile` as network context. Do not hard-block on the latter alone.`network.usage_type` + `network.asn`
`hijacked_proxy` deserves a special note: the holder is often a victim whose device was borrowed by malware. For personal pre-checks, treat it as “this egress is contaminated *right now*” and move — not as a reason to accuse a household.

| Say this | Do not say this | 
|---|---|
| Risk hygiene before login | “Guaranteed no ban / 100% unban” | 
| Shared exits are higher-risk *inputs* to abuse systems | “Claude/OpenAI use IP99” (unverified) | 
| Evidence expires; re-check when you change networks | “Any VPN is fine if the score is 0” | 
| Free tier: 500 lookups/day anonymous | Tor detection (IP99 has **no** Tor signal) | 

Fine-grained co-tenancy (`share_tier` T0–T3) is a **Pulse** professional field for operators who choose whether to block an IP. For personal pre-checks, the practical cue is simpler: proxy-class signals plus a non-`none` evidence state usually means “pick another egress.”

Risk data on IP99 updates on the order of **seconds** (the product states a 10-second refresh cadence), while many static blocklists refresh on days. The score is designed to **decay** as evidence ages. An address that was a proxy exit last week may be a quiet NAT today — which is exactly why a screenshot from last month is a bad decision input, and a two-minute lookup before you open Claude or Codex is a better one.

If you are wiring tools into Claude Code, Cursor, or another MCP client, the same lookup is exposed as `ip_risk_lookup` on `https://ip99.com/mcp` (anonymous Streamable HTTP; OAuth account URL if you want the signed-in quota). Humans can stick to the website or `curl`.

```
# your current egress
curl https://ip99.com/v1/ip

# any IPv4 / IPv6 you care about
curl https://ip99.com/v1/ip/8.8.8.8
```

Docs: [ip99.com/api](https://ip99.com/api?utm_source=devto&utm_medium=article&utm_campaign=ip99&utm_content=claude-codex-check). Quotas and overseas self-serve plans: [ip99.com/en/pricing](https://ip99.com/en/pricing?utm_source=devto&utm_medium=article&utm_campaign=ip99&utm_content=claude-codex-check). IP99 is built by ThreatHunter.

Know the exit you present. Re-check when the path changes. Treat 0 as “no current evidence,” not as a free pass — and you will make fewer avoidable login mistakes without pretending any API can promise an unban.
