REST API for programmatic proxy validation. Bring your own list, get back fully classified results: alive/dead, latency, country, ASN, datacenter vs residential, anonymity level, and more.
All paid endpoints require a Bearer token. Get one from /pricing.
Authorization: Bearer pck_yourkeyhere
Free-tier callers can hit /api/check without a key but are capped at 25 proxies per call and rate-limited.
| Tier | Per call | Per day | Concurrency |
|---|---|---|---|
| Free | 25 | ~50 calls (rate limited) | 20 |
| Pro | 5,000 | 5,000 calls | 50 |
| Business | 10,000 | 50,000 calls | 75 |
Validate a list of proxies. Returns alive/dead status, latency, anonymity classification, and RDAP enrichment for live proxies.
{
"proxies": [
"1.2.3.4:8080",
"user:pass@5.6.7.8:1080",
"socks5://9.10.11.12:1080"
],
"timeout": 10000,
"format": "json"
}
| Field | Type | Notes |
|---|---|---|
proxies | string[] | Up to your tier cap. Auto-detects HTTP/SOCKS4/SOCKS5 from prefix or port. |
timeout | int (ms) | 3000-30000. Default 10000. |
format | string | json (default) or csv (Pro/Business only). |
{
"summary": {
"total": 3,
"alive": 2,
"dead": 1,
"datacenter": 2,
"residential": 0,
"mobile": 0,
"suspected_fake_residential": 0,
"avg_latency_ms": 187
},
"tier": "pro",
"results": [
{
"input": "1.2.3.4:8080",
"status": "alive",
"protocol": "http",
"type": "datacenter",
"latency": 142,
"country": "US",
"city": "Ashburn",
"isp": "AS14618 Amazon.com, Inc.",
"asn": 14618,
"anonymity": "transparent",
"suspected_fake_residential": false,
"rdap": { "abuse_email": "abuse@amazon.com", ... }
},
...
]
}
input,status,protocol,type,latency,country,city,isp,asn,suspected_fake_residential,reason
1.2.3.4:8080,alive,http,datacenter,142,US,Ashburn,AS14618 Amazon...,14618,false,
5.6.7.8:1080,dead,socks5,,,,,,,,timeout
curl -X POST https://proxychecker.dev/api/check \\
-H "Authorization: Bearer pck_yourkey" \\
-H "Content-Type: application/json" \\
-d '{"proxies":["1.2.3.4:8080","5.6.7.8:1080"],"format":"csv"}' \\
-o results.csv
import httpx
with open("my_proxies.txt") as f:
proxies = [line.strip() for line in f if line.strip()]
# Chunk into batches of 5000 (Pro tier cap)
def chunks(xs, n):
for i in range(0, len(xs), n): yield xs[i:i+n]
results = []
with httpx.Client(timeout=60) as client:
for batch in chunks(proxies, 5000):
r = client.post(
"https://proxychecker.dev/api/check",
headers={"Authorization": "Bearer pck_yourkey"},
json={"proxies": batch, "timeout": 8000},
)
r.raise_for_status()
results.extend(r.json()["results"])
alive = [p for p in results if p["status"] == "alive"]
print(f"{len(alive)}/{len(results)} alive")
import { readFileSync, writeFileSync } from "fs";
const proxies = readFileSync("my_proxies.txt", "utf8")
.split("\\n").map(s => s.trim()).filter(Boolean);
const r = await fetch("https://proxychecker.dev/api/check", {
method: "POST",
headers: {
"Authorization": "Bearer pck_yourkey",
"Content-Type": "application/json",
},
body: JSON.stringify({ proxies, format: "csv" }),
});
writeFileSync("results.csv", await r.text());
| Code | When |
|---|---|
| 400 | Missing/empty proxies array, or all entries unparseable. |
| 401 | Invalid or revoked API key. |
| 413 | Tier cap exceeded (response includes your tier and the cap). |
| 429 | Daily quota exceeded (Pro/Business) OR rate limit hit (Free). |
Saved proxy lists with auto-monitoring, webhook alerts on dead proxies, geo-IP enrichment beyond country, and a /api/check-async endpoint that returns a job ID for batches over 10,000.
Want one of these prioritized? Email malone.jaylon@gmail.com with what you'd actually use.