Free proxy API
GET /api/free-proxy returns Litport's current public free-proxy observations. It requires no authentication.
Request#
curl --get 'https://litport.net/api/free-proxy' \
--data-urlencode 'country=de' \
--data-urlencode 'protocol=http' \
--data-urlencode 'uptimeRating=90' \
--data-urlencode 'sortBy=responseTimeMs_asc' \
--data-urlencode 'limit=50'
| Parameter | Type | Default | Current behavior |
|---|---|---|---|
country |
string | all | Case-insensitive ISO-2 code. The value is uppercased; no aliases are applied. |
limit |
integer | 50 | Accepted range 10–1000. Invalid or out-of-range values are ignored. |
page |
integer | 1 | Accepted range 1–1000. Invalid or out-of-range values are ignored. |
sortBy |
string | pingAt_desc | Field: pingAt, responseTimeMs, or createdAt. Direction: asc or desc. Invalid values are ignored. |
anonymity |
string | all | Exact filter: transparent, anonymous, elite, or unknown. Unknown values usually return an empty array. |
anonymityLevel |
string | all | Deprecated alias: high = anonymous or elite, low = transparent. Exact filter. Unknown values usually return an empty array. |
protocol |
string | all | Exact filter such as http, https, or socks5. Unknown values usually return an empty array. |
uptimeRating |
integer | none | Minimum 24-hour uptime percentage, 1–100. Invalid values are ignored. |
responseTimeMs |
integer | none | Maximum HTTP response time in milliseconds, 1–10000. Invalid values are ignored. |
format |
string | json | json, csv, txt, or txt-proto. Unknown values fall back to JSON. |
download |
flag | off | When present for a supported format, returns an attachment. |
country uses a case-insensitive ISO-2 code and is uppercased for lookup. It has no alias table: use country=gb; country=uk may return an empty array. PPG proxy usernames have different compatibility behavior.
Response behavior#
The default JSON response is a bare array with no data envelope, total, or hasMore value. Pagination is blind: page offset is (page - 1) * limit, and an empty array means no rows matched that page.
Responses send Cache-Control: public, max-age=60, so a response may be up to a minute behind the last check and polling faster than that returns the same rows. Invalid numeric parameters and invalid sortBy values are silently ignored in this version, leaving their defaults. Unknown exact filter values commonly produce an empty array rather than a 400 response.
[
{
"protocol": "http",
"host": "192.0.2.10",
"port": 8080,
"externalIp": "192.0.2.10",
"geoCountry": "US",
"https": true,
"anonymity": "elite",
"anonymityRating": 100,
"responseTimeMs": 420,
"uptimeRating": 97,
"pingAt": "2026-08-25T12:00:00.000Z"
}
]
Example addresses in this documentation are reserved for documentation and are not live proxies.
JSON fields#
| Field | Type | Meaning |
|---|---|---|
protocol |
string | Proxy protocol. |
host |
string | Proxy hostname or IP address. |
port |
integer | Proxy port. |
externalIp |
string | Observed exit IP. |
geoCountry |
string | ISO-2 exit country. |
geoCountryFlagEmoji |
string | Country flag for display. |
geoRegion |
string | Observed exit region. |
geoCity |
string | Observed exit city. |
geoTimezone |
string | Observed exit timezone. |
asn |
integer | Observed autonomous system number. |
asnOrgName |
string | Observed network organization. |
https |
boolean | true when an HTTPS request tunnels through the proxy with a valid certificate; null when not yet measured. |
anonymity |
string | Measured anonymity classification: transparent, anonymous, elite, or unknown. |
anonymityRating |
integer | Normalized anonymity score. |
anonymityLevel |
string | Deprecated alias: high = anonymous or elite, low = transparent. |
anonymityLevelRating |
integer | Deprecated alias, equal to anonymityRating. |
responseTimeMs |
integer | Measured HTTP response time in milliseconds. |
responseTimeRating |
integer | Normalized response-time score. |
uptimeRating |
integer | Rounded 24-hour uptime percentage. |
createdAt |
date-time | When Litport first observed this proxy. |
pingAt |
date-time | When Litport last checked this proxy. |
createdAt records when Litport first observed the proxy. pingAt records the last check and is the relevant freshness signal. https reports whether an HTTPS request through the proxy completed with a valid, trusted certificate; it is null until measured. anonymity reports how much the proxy exposes about itself and the caller (transparent, anonymous, elite, or unknown); anonymityLevel is a deprecated two-value alias kept for compatibility.
CSV and text formats#
# CSV
curl 'https://litport.net/api/free-proxy?format=csv&limit=25'
# host:port, one proxy per line
curl 'https://litport.net/api/free-proxy?format=txt&limit=25'
# protocol://host:port, one proxy per line
curl 'https://litport.net/api/free-proxy?format=txt-proto&limit=25'
Use download=1 with a supported format to request an attachment. CSV is returned as text/csv; text variants use text/plain; JSON uses application/json.
JavaScript example#
const url = new URL('https://litport.net/api/free-proxy')
url.searchParams.set('country', 'us')
url.searchParams.set('limit', '25')
const response = await fetch(url)
if (!response.ok) throw new Error(`HTTP ${response.status}`)
const proxies = await response.json()
Python example#
import json
import urllib.parse
import urllib.request
query = urllib.parse.urlencode({"country": "us", "limit": 25})
with urllib.request.urlopen(f"https://litport.net/api/free-proxy?{query}") as response:
proxies = json.load(response)