Free Proxy List API

Free Proxy List
GET/api/v1.0/free/proxies

Returns filtered free proxy addresses from the current ProxyTitan free-proxy pool.

Authentication is performed only with the apiKey query parameter. JWT cookies and X-API-Key headers are not used by this endpoint.

Rate
Maximum 10 requests per 60 seconds.
Note
Get your API key by creating a ProxyTitan account at   proxytitan.com/auth/sign-up .
Required parameters
apiKey
Endpoint details
Optional query parameters
output
Optional. Use 'plain' or 'json'. The default is 'plain'.
protocol
Optional. Use HTTP, HTTPS, SOCKS4, or SOCKS5. Values are case-insensitive. Omit it to include every protocol.
timeout
Optional integer from 1 through 10000 milliseconds. A proxy is included when its stored latency is less than or equal to this value.
countries
Optional comma-separated ISO-2 country codes such as 'us,de,fr'. Codes are normalized to lowercase and duplicate codes are ignored.
ssl
Optional. Use exactly 'true' or 'false' to filter by the proxy's HTTPS-support field.
anonymity
Optional. Use elite, anonymous, or transparent. Values are case-insensitive.
Response behavior
JSON success response
Returns success, proxy_amount, and proxies. Each proxies entry is an ip:port string; proxy metadata is not included.
Plain-text success response
Returns one ip:port address per line with Content-Type text/plain and the X-Proxy-Amount response header.
No matches
Returns HTTP 200 with a JSON object containing success=false, proxy_amount=0, a message, and an empty proxies array - even when output=plain was requested.
Caching
Successful responses use Cache-Control: no-store.
Possible error responses
400 Bad Request
Missing apiKey or an invalid output, protocol, timeout, country code, SSL value, or anonymity value. FastAPI returns the message in the detail field.
401 Unauthorized
Invalid API key or an account whose status is not ACTIVE.
404 Not Found
The backend free-proxy JSON file could not be found.
429 Too Many Requests
The 10 requests per 60 seconds limit was exceeded. The response includes a Retry-After header.
500 Internal Server Error
The proxy file is invalid or unreadable, the database lookup failed, or an unexpected backend error occurred.
Python • requests • Filtered free proxy list
import json
import requests

url = "https://proxytitan.com/api/v1.0/free/proxies"
params = {
    "apiKey": "xxx",
    "output": "json",
    "protocol": "socks5",
    "timeout": 3000
}

response = requests.get(url, params=params, timeout=30)
response.raise_for_status()

content_type = response.headers.get("content-type", "")
if "application/json" in content_type:
    print(json.dumps(response.json(), indent=2))
else:
    print(response.text)
Replace xxx with your API key. output=json is included because the displayed response is JSON.
Response (JSON example)
Show JSON response
Click to reveal a valid JSON success response.
This example uses output=json. The actual amount and addresses depend on the current pool and selected filters.
Advanced Usage Example
GET/api/v1.0/free/proxies

Combine any supported optional filters in one request.

The backend applies every supplied filter, so a proxy must satisfy all of them to be returned.

Rate
Maximum 10 requests per 60 seconds.
Note
When no proxy satisfies every supplied filter, the endpoint returns HTTP 200 with a JSON no-match response.
Required parameters
apiKey
Endpoint details
Request breakdown
output=json
Returns a JSON object instead of the default plain-text body.
protocol=socks5
Keeps only entries whose stored protocol is SOCKS5.
timeout=3000
Keeps entries whose stored latency is at most 3000 milliseconds.
ssl=true
Keeps entries whose HTTPS-support field resolves to true.
anonymity=elite
Keeps entries whose anonymity value is Elite.
countries=us,de
Keeps entries whose ISO-2 code is us or de.
Example request
https://proxytitan.com/api/v1.0/free/proxies?apiKey=your_api_key&output=json&protocol=socks5&timeout=3000&ssl=true&anonymity=elite&countries=us%2Cde
Replace your_api_key with your API key.
Format
GET/api/v1.0/free/proxies

Use output=plain for one ip:port address per line or output=json for a structured response.

The default is plain when the output parameter is omitted. The older 'format' parameter is not accepted by this endpoint.

Rate
Maximum 10 requests per 60 seconds.
Note
Use output=json when your application needs a count and array. Use output=plain when it only needs proxy lines.
Required parameters
apiKey
Endpoint details
Optional query parameters
output=plain
Default. Returns text/plain, one address per line, and X-Proxy-Amount when proxies are found.
output=json
Returns success, proxy_amount, and proxies as a JSON object.
Response behavior
JSON example
The code examples below explicitly request output=json.
Plain example
198.8.94.170:4145 · 24.249.199.12:4145 · 98.178.72.21:10919
No matches
The no-match response is JSON for both output modes: success=false, proxy_amount=0, message, and proxies=[].
Possible error responses
400 Bad Request
Invalid 'output'. Use 'plain' or 'json'.
Python • requests • JSON output
import json
import requests

url = "https://proxytitan.com/api/v1.0/free/proxies"
params = {
    "apiKey": "xxx",
    "output": "json"
}

response = requests.get(url, params=params, timeout=30)
response.raise_for_status()

content_type = response.headers.get("content-type", "")
if "application/json" in content_type:
    print(json.dumps(response.json(), indent=2))
else:
    print(response.text)
Replace xxx with your API key.
Response (JSON example)
Show JSON response
Click to reveal the JSON output structure.
The shown code requests output=json. Omit output or set output=plain to receive plain text.
Protocol
GET/api/v1.0/free/proxies

Filters entries by the exact stored proxy protocol.

Supported values are HTTP, HTTPS, SOCKS4, and SOCKS5. Input is case-insensitive; omit the parameter to include all protocols.

Rate
Maximum 10 requests per 60 seconds.
Note
This filter is separate from ssl. protocol=https and ssl=true test different stored fields.
Required parameters
apiKey
Endpoint details
Optional query parameters
protocol
HTTP | HTTPS | SOCKS4 | SOCKS5. No protocol filter is applied when omitted.
Possible error responses
400 Bad Request
Invalid protocol. Choose from HTTP, HTTPS, SOCKS4, SOCKS5.
Python • requests • SOCKS5 filter
import json
import requests

url = "https://proxytitan.com/api/v1.0/free/proxies"
params = {
    "apiKey": "xxx",
    "output": "json",
    "protocol": "socks5"
}

response = requests.get(url, params=params, timeout=30)
response.raise_for_status()

content_type = response.headers.get("content-type", "")
if "application/json" in content_type:
    print(json.dumps(response.json(), indent=2))
else:
    print(response.text)
Replace xxx with your API key.
Response (JSON example)
Show JSON response
Click to reveal a filtered success response.
The example filters for SOCKS5 and requests JSON output.
Timeout (Latency)
GET/api/v1.0/free/proxies

Filters by the latency value stored for each proxy.

The value must be an integer from 1 through 10000 milliseconds. Proxies with latency less than or equal to the requested value are retained.

Rate
Maximum 10 requests per 60 seconds.
Note
An entry with a missing or invalid latency does not pass a supplied timeout filter.
Required parameters
apiKey
Endpoint details
Optional query parameters
timeout
Inclusive integer range: 1–10000 milliseconds. Omit it to disable latency filtering.
Possible error responses
400 Bad Request
Timeout must be a number between 1 and 10000.
Python • requests • Latency filter
import json
import requests

url = "https://proxytitan.com/api/v1.0/free/proxies"
params = {
    "apiKey": "xxx",
    "output": "json",
    "timeout": 2000
}

response = requests.get(url, params=params, timeout=30)
response.raise_for_status()

content_type = response.headers.get("content-type", "")
if "application/json" in content_type:
    print(json.dumps(response.json(), indent=2))
else:
    print(response.text)
Replace xxx with your API key.
Response (JSON example)
Show JSON response
Click to reveal a filtered success response.
The example keeps proxies with latency at most 2000ms.
Countries
GET/api/v1.0/free/proxies

Filters by the two-letter country code stored on each proxy entry.

Supply one or more comma-separated ISO-2 codes. Input is normalized to lowercase and duplicate codes are ignored.

Rate
Maximum 10 requests per 60 seconds.
Note
The endpoint validates the ISO-2 shape but does not check the code against a separate official-country registry.
Required parameters
apiKey
Endpoint details
Optional query parameters
countries
Examples: 'de', 'us,de', or 'us,de,fr'. Empty segments are ignored.
Possible error responses
400 Bad Request
Every non-empty value must contain exactly two letters, such as 'us', 'de', or 'fr'.
Python • requests • Country filter
import json
import requests

url = "https://proxytitan.com/api/v1.0/free/proxies"
params = {
    "apiKey": "xxx",
    "output": "json",
    "countries": "us,de,fr"
}

response = requests.get(url, params=params, timeout=30)
response.raise_for_status()

content_type = response.headers.get("content-type", "")
if "application/json" in content_type:
    print(json.dumps(response.json(), indent=2))
else:
    print(response.text)
Replace xxx with your API key.
Response (JSON example)
Show JSON response
Click to reveal a filtered success response.
The example filters for US, Germany, and France.
SSL / HTTPS Support
GET/api/v1.0/free/proxies

Filters by the proxy entry's stored https field.

Only the strings 'true' and 'false' are accepted. Omit ssl to include both values.

Rate
Maximum 10 requests per 60 seconds.
Note
Entries whose HTTPS-support value cannot be interpreted as a boolean do not pass an ssl filter.
Required parameters
apiKey
Endpoint details
Optional query parameters
ssl=true
Keeps proxies whose stored HTTPS-support value resolves to true.
ssl=false
Keeps proxies whose stored HTTPS-support value resolves to false.
Possible error responses
400 Bad Request
SSL must be 'true' or 'false'.
Python • requests • HTTPS-support filter
import json
import requests

url = "https://proxytitan.com/api/v1.0/free/proxies"
params = {
    "apiKey": "xxx",
    "output": "json",
    "ssl": True
}

response = requests.get(url, params=params, timeout=30)
response.raise_for_status()

content_type = response.headers.get("content-type", "")
if "application/json" in content_type:
    print(json.dumps(response.json(), indent=2))
else:
    print(response.text)
Replace xxx with your API key.
Response (JSON example)
Show JSON response
Click to reveal a filtered success response.
The example requests only entries with HTTPS support.
Anonymity
GET/api/v1.0/free/proxies

Filters by the anonymity value stored for each proxy.

Supported values are elite, anonymous, and transparent. Input is case-insensitive; omit it to include every anonymity level.

Rate
Maximum 10 requests per 60 seconds.
Note
The comparison is exact after both request and stored value are normalized to lowercase.
Required parameters
apiKey
Endpoint details
Optional query parameters
anonymity
elite | anonymous | transparent
Possible error responses
400 Bad Request
Invalid anonymity. Choose from Elite, Anonymous, Transparent.
Python • requests • Anonymity filter
import json
import requests

url = "https://proxytitan.com/api/v1.0/free/proxies"
params = {
    "apiKey": "xxx",
    "output": "json",
    "anonymity": "elite"
}

response = requests.get(url, params=params, timeout=30)
response.raise_for_status()

content_type = response.headers.get("content-type", "")
if "application/json" in content_type:
    print(json.dumps(response.json(), indent=2))
else:
    print(response.text)
Replace xxx with your API key.
Response (JSON example)
Show JSON response
Click to reveal a filtered success response.
The example requests elite-anonymity proxies.
No Matching Proxies
GET/api/v1.0/free/proxies

An empty filtered result is not treated as an HTTP error.

The endpoint returns HTTP 200 and a JSON body even when output=plain was requested.

Rate
Maximum 10 requests per 60 seconds.
Note
Client code should check both the HTTP status and the success field when it requests JSON or may receive an empty result.
Required parameters
apiKey
Endpoint details
Response behavior
success
false
proxy_amount
0
message
No proxies matched your filters.
proxies
An empty array.
Python • requests • No-match handling
import json
import requests

url = "https://proxytitan.com/api/v1.0/free/proxies"
params = {
    "apiKey": "xxx",
    "output": "plain",
    "protocol": "socks5",
    "countries": "zz"
}

response = requests.get(url, params=params, timeout=30)
response.raise_for_status()

content_type = response.headers.get("content-type", "")
if "application/json" in content_type:
    print(json.dumps(response.json(), indent=2))
else:
    print(response.text)
Replace xxx with your API key. Country code zz is structurally valid but may have no entries.
Response (JSON no-match example)
Show no-match response
Click to reveal the exact response shape.
The body remains JSON because the backend returns this structure before its plain-text output branch.