403 from the API after switching to the proxy
Check Is the proxy's IP on the API's allowlist or access policy?
Fix Add the IP shown in My assets; remove the old server IP once runs succeed.
Give every scheduled job one fixed IP that APIs can allowlist — and that doesn't share its rate limit with anything else.
APIs increasingly tie access to the caller's IP. Stripe lets you restrict a key to specific IPv4 addresses — the approach it suggests when 'your servers have fixed IP addresses' — and its advanced policies can block residential proxies, public proxies, VPNs and Tor. A job on a laptop, a serverless function or a rotating proxy has no fixed address to allowlist.
CI is no help here: GitHub advises against using the GitHub-hosted runner IP ranges as allowlists because there are so many of them, and recommends larger runners with static IP ranges or self-hosted runners instead.
Rate limits are often counted per IP too. GitHub's REST API allows 60 unauthenticated requests per hour per originating IP and tells you when to retry with retry-after or x-ratelimit-reset. Jobs behind one office or NAT address share that budget; a static datacenter IP per job keeps limits and allowlist entries separate.
Scroll horizontally with the arrow keys to read all content.
| Criterion | Choose | Why |
|---|---|---|
| Product | Static datacenter proxy | One fixed IP for the whole term, priced per IP — easy to allowlist |
| How many IPs | One per job or per API account | Separate rate limits and separate allowlist entries |
| Country | Close to the API, or where it expects callers: US, CA, GB, DE, NL, JP, KR or SG | Some APIs filter by country as well as by IP |
| Protocol | HTTP | Works with httpx, requests, curl and most HTTP clients |
| IP changes | Never during the term — renew before it ends | An allowlist breaks when the IP changes |
| Residential proxies | Not for API calls | Some APIs let account owners block residential proxy traffic |
The button below opens Static Datacenter Proxies with the AI and automation use case. Choose Region, Term, Protocol and Quantity (up to 100 IPs at a time) before you pay.
Scroll horizontally with the arrow keys to read all content.
| Criterion | Static ISP | Rotating residential | Datacenter |
|---|---|---|---|
| What you get | A dedicated home-broadband IP that stays yours for the whole term | Real household IPs: rotating exits, or a sticky session in a chosen country or city | Fast fixed server IPs, HTTP and SOCKS5 |
| Price | Per IP and term — live price at checkout | Budget US$1.50/GB (US$1.35/GB at 100 GB); Premium US$5.00/GB | Per IP and term — the cheapest per IP |
| Best for API sync | Partner portals that expect a home-broadband IP | Collecting from public sites that block servers | Allowlisted APIs, cron jobs, CI and webhooks |
Prices in US dollars. Top up your wallet once and pay any line from it. Nothing renews automatically — renew in My assets to keep an IP.
The button below opens Static Datacenter Proxies (Per IP and term) with the AI and automation use case. Pick the Region, choose a Term and set Protocol to HTTP. Set Quantity to the number of IPs you need (one for each job or API account, up to 100 at a time). Click Review cost and generate.
In My assets, note each IP and add it to the API's allowlist or access policy. Keep the old server IP until the first run succeeds.
In My assets, Copy gives host:port:user:password. Store PROXY_URL = http://USER:PASS@HOST:PORT and the API token as secrets in your scheduler or CI.
Use the code below from cron, Task Scheduler or CI. It pages through the API, honours Retry-After on 429 and stops on the first empty page.
Expected result A line such as 'synced N rows from M pages', and the API sees the proxy's IP.
Auto-renew isn't available yet, so renew the IP in My assets before it expires to keep the same address on the allowlist.
Scroll horizontally with the arrow keys to read all content.
# pip install httpx then schedule it, e.g. cron: */30 * * * * python sync.py
import os
import time
import httpx
API = "https://api.example.com/v1/orders"
proxy = os.environ["PROXY_URL"] # static datacenter IP: http://USER:PASS@HOST:PORT (allowlist this IP)
headers = {"Authorization": f"Bearer {os.environ['API_TOKEN']}"}
rows, page, waits = [], 1, 0
with httpx.Client(proxy=proxy, headers=headers, timeout=30) as client:
while True:
r = client.get(API, params={"page": page, "per_page": 100})
if r.status_code == 429 and waits < 5: # after 5 waits in a row, fail the run instead of looping
waits += 1
retry_after = r.headers.get("Retry-After", "")
time.sleep(int(retry_after) if retry_after.isdigit() else 60)
continue # ask for the same page again
r.raise_for_status()
waits = 0
batch = r.json()
if not batch:
break
rows.extend(batch)
page += 1
print(f"synced {len(rows)} rows from {page - 1} pages")Checked on 2026-10-18 (httpx 0.28.1) against a local paginated API that answered 429 with Retry-After once: the job waited, re-requested the same page and synced all 5 rows from 3 pages; against an endpoint that kept answering 429 it gave up after five waits and exited with an error.
Check Is the proxy's IP on the API's allowlist or access policy?
Fix Add the IP shown in My assets; remove the old server IP once runs succeed.
Check Do you honour Retry-After or x-ratelimit-reset? Are several jobs on one IP?
Fix Wait as the API asks, and give heavy jobs their own IP.
Check Did the IP's term end?
Fix Renew in My assets before expiry; auto-renew isn't available yet.
Check Are PROXY_URL and the token available as CI secrets? Is outbound traffic to the proxy port allowed?
Fix Add the secrets to the pipeline and allow outbound connections to the proxy host and port.
To give scheduled jobs a fixed source IP that APIs can allowlist, and to keep each job's rate limit separate from your office and other jobs.
Yes. A static datacenter IP stays the same for the whole term; renew before it ends to keep it.
Datacenter. Rotating residential IPs change, and some APIs, Stripe among them, let account owners block residential proxy traffic.
If an API allowlists IPs, yes: GitHub advises against allowlisting its hosted-runner ranges and suggests static-IP larger runners or self-hosted runners. Routing the job through a static datacenter IP is another way to get one fixed address.
Static datacenter IPs are listed for the US, Canada, the UK, Germany, the Netherlands, Japan, South Korea and Singapore, and stock varies by country.
Official documentation · Checked:
Official documentation · Checked:
Official documentation · Checked:
Product observation · Checked:
Rotating residential per-GB prices as published on the pricing page and used by the console (Budget US$1.50/GB, US$1.35/GB in the 100 GB package; Premium US$5.00/GB; 1 PTC = US$1). Static ISP and datacenter IPs are quoted live per IP and term.
Product observation · Checked:
Option names, billing modes and limits as shown in the live console on 2026-10-18: Line (Premium/Budget), Exit mode, Region, State, City, Protocol (HTTP/SOCKS5), Quantity (1–500), Term, Auto-renew IP (not yet available), My assets → Copy / Rotate / Renew / Copy for AI. Rotating residential connects through proxy.proxy302.com:2222 (HTTP) and :3333 (SOCKS5). Static datacenter IPs were sold in 8 countries on 2026-10-18 (read-only check of the production catalogue): US, CA, GB, DE, NL, JP, KR, SG.
Local example · Checked:
The code block was executed on 2026-10-18 against a local password-protected HTTP proxy that answers 407 without valid credentials; httpx 0.28.1 against a local paginated API that requires a bearer token and answers page 2 once with 429 and Retry-After: 1: the job waited, re-requested the same page and synced all 5 rows from 3 pages, sending the token on every request. Against an endpoint that kept answering 429 with Retry-After: 0, the job retried five times and then exited with an HTTP error.
A local check proves the configuration syntax and authentication path, not access to any specific website, country or platform.
Create an account, top up once and pick rotating residential, static ISP or datacenter. Rotating residential exits cover 195+ countries and regions.