Good Proxies

API documentation

Reference guide for the Good Proxies API: how to build requests against the single endpoint, fetch TXT/JSON output, and respect plan, demo and temporary-link limits.

How to read this documentation

Context and limits first, then URL construction, the parameter table, output modes and code examples — a complete reference page for the Good Proxies API.

Easy navigation: dense table of contents, inline warnings, limit details, parameter reference and live request examples.
The documentation covers all backend capabilities: get=txt|json|*.file, JSON options fields/split_ip/wrap/format/pretty, type_prefix, country_mode and service.
Only documented methods: this page covers exactly what /api/ actually supports, with no fictional endpoints.
01

General information

Reference

Good Proxies uses a single /api/ endpoint. All filters, output modes and JSON tuning options are controlled through GET parameters. Error responses are returned as a JSON envelope with code, message and timestamp.

  • Every request starts with key and can then be extended with filters for proxy type, anonymity, speed, ping, freshness, country, city, port and service compatibility.
  • The output mode is selected with get: txt by default, plus json, txt.file and json.file.
  • JSON output supports additional controls: fields, split_ip, format=array|object, wrap and pretty.
  • Response localisation is controlled by lang. With lang=en, the API returns city_en when an English city name is available.
Important. An API URL contains the secret access key. Do not publish it in client-side code, browser logs or third-party shared scripts.

Quick start

https://good-proxies.com/api/?key=YOUR_KEY&type=http&country=ru&count=10

Supported output modes

get=txt get=json get=txt.file get=json.file
02

HTTP response codes

Reference

On success the API returns a proxy list; on failure it returns JSON with status, code, message and timestamp, and sometimes extra context such as retry_after, daily_limit or used_subnets.

HTTP Parameter Description Example
200 OK Matching proxies were found and returned in the selected format. {"status":"ok", ...}
400 KEY_MISSING The key parameter was not provided. {"code":"KEY_MISSING"}
403 INVALID_KEY / TEMP_KEY_INVALID The access key is invalid, expired, or the temporary link is no longer active. {"code":"INVALID_KEY"}
404 PROXIES_NOT_FOUND No proxies match the selected filters. {"code":"PROXIES_NOT_FOUND"}
429 RATE / LIMIT / SUBNET A burst limit, demo limit, temporary-link limit, daily quota or subnet quota has been hit. {"code":"DAILY_LIMIT_REACHED"}
500/503 DB / CACHE failure Internal database or cache failure, output is temporarily unavailable. {"code":"DB_EXECUTE_FAILED"}
{ "status": "ok", "count": 2, "timestamp": "2026-04-23T12:00:00Z", "filters": { "type": "socks5", "country": "us", "service": "telegram" }, "data": [ { "ip": "198.51.100.10", "port": "1080", "type": "socks5", "country": "US", "city": "New York" }, { "ip": "198.51.100.11", "port": "1080", "type": "socks5", "country": "US", "city": "Chicago" } ] }
{ "status": "error", "code": "RATE_LIMIT_EXCEEDED", "message": "Too many requests. Please try again later.", "timestamp": "2026-04-23T12:00:05Z", "retry_after": 5 }
03

Limits

Reference

Limits depend not only on the plan itself but also on the key mode. The backend currently enforces the following windows and quotas.

  • Premium key: burst limit of up to 5 requests per 5 seconds per key. When exceeded, the API returns 429 RATE_LIMIT_EXCEEDED with retry_after.
  • The demo key: no more than 2 requests per minute per IP, capped at 50 proxies per response, and if works is omitted the backend defaults it to 90.
  • Temporary links temp_...: no more than 2 requests per hour per link and 2 requests per hour per IP, capped at 30 proxies per response.
  • Normal premium keys are also checked against the daily request budget and the daily unique-subnet quota allowed by the plan.
  • If count is omitted, the API falls back to the internal limit for your key; demo and temporary modes override that with their own hard caps.
Warning. Repeated failing requests with an invalid key or constantly exceeded limits do not help throughput: they only trigger 429/403 responses and wasted retries. Narrow the filter and respect retry_after.
Note. When using wide country filters, remember the subnet cap: a request can still fail with SUBNET_LIMIT_REACHED even if the plan itself is active.
04

Test and temporary access

Reference

Instead of a separate developer endpoint, the current implementation exposes two special modes inside the same /api/: the demo test key and temporary links prefixed with temp_.

How to use it. Demo responses are masked and exist for integration checks only. Temporary links are better suited for short-lived internal sharing, not for long-term automation.
  • The demo key is useful for the first request, JSON compatibility checks and quick client validation.
  • A temporary link is validated separately and expires on its own schedule; if it fails you get TEMP_KEY_INVALID.
  • Both modes use their own rate-limit windows and do not replace a full dashboard key.
https://good-proxies.com/api/?key=demo&type=http&anon=elite&count=10&get=json&wrap=1
05

How to build a request

Reference

Requests follow a simple pattern: start with the key, add filters, then choose the output mode. In practice, the easiest path is to configure the filters in the web UI and copy the URL, then append only the parameters that the UI does not expose.

  • Start with key and add filters such as type, anon, country, city, service, ping, speed, time, works and count.
  • If countries must be excluded, pass country_mode=except or the short alias cm=except.
  • For JSON, set get=json and optionally add fields, split_ip=1, format=object or wrap=1.
  • For TXT with protocol prefixes, use type_prefix=1. For file download instead of inline output, switch to txt.file or json.file.
Do not mix these up. Do not confuse get with the JSON option format: the first picks the response type, the second changes only the internal JSON shape (array or object).
https://good-proxies.com/api/?key=YOUR_KEY&type=socks4,socks5&anon=elite&country=us,gb&city=new york,london&service=telegram&ping=120&time=300&count=100&get=json&fields=ip,port,type,country,city&split_ip=1&wrap=1&lang=en
06

Parameter reference

Reference
Parameter Req. Description Example
key Yes Access key. Supports regular premium keys, the demo key and temporary keys prefixed with temp_.... demo
type No Comma-separated proxy types: http, https, socks4, socks5. http,socks5
anon No Comma-separated anonymity levels: transparent, anonymous, elite. elite
speed No Minimum speed in bytes per second. 150000
ping No Maximum allowed ping in milliseconds. 120
time No Maximum age of the last check in seconds. Default is 600. 300
works No Minimum workability percentage. 90
country No Lowercase ISO 3166-1 alpha-2 country codes, comma separated. ru,us,de
country_mode / cm No Country filter mode: include by default or except to exclude the listed countries. except
city No Comma-separated city names. With lang=en the backend filters by city_en when available. moscow,new york
port No Exact port number. 8080
service No Service compatibility filter: smtp, telegram, avito, google, mail. telegram
count No Number of proxies to return. Bounded by the key mode and plan. 100
get No Output mode: txt (default), json, txt.file, json.file. json.file
fields No JSON only. Whitelist output fields: ip, port, ip_out, type, anon, speed, ping, timecheck, country, city, works, smtp, telegram, avito, google, mail. ip,port,type,country,city
split_ip No JSON only. If 1, the ip:port string is split into separate ip and port fields. 1
format No JSON only. Internal data shape: array or object, where the object key becomes the proxy address. object
wrap No JSON only. If 1, wrap the result in an envelope with status, timestamp, filters and data. 1
pretty No JSON only. 1 for pretty-print, 0 for compact JSON. 0
type_prefix No TXT only. If 1, each line is prefixed with type://. 1
lang No Response localisation: ru or en. en
07

Output formats

Reference

Good Proxies supports TXT and JSON output. File-download modes return the same content with different response headers.

Note. CSV is not supported by the current backend, which is why it does not appear in the mode table or examples.

TXT inline

Default mode. Returns a plain list in ip:port form; with type_prefix=1 it becomes type://ip:port.

https://good-proxies.com/api/?key=YOUR_KEY&type=http&count=10&type_prefix=1

JSON API

Structured output with support for fields, split_ip, wrap, format=object and pretty=0.

https://good-proxies.com/api/?key=YOUR_KEY&get=json&fields=ip,port,type,country,city&split_ip=1&wrap=1&lang=en

File download

txt.file and json.file use the same payload but force the browser to download it as a file.

https://good-proxies.com/api/?key=YOUR_KEY&get=json.file&type=socks5&country=us&count=25
198.51.100.10:8080 https://198.51.100.11:443 socks5://198.51.100.12:1080
{ "status": "ok", "count": 2, "timestamp": "2026-04-23T12:00:00Z", "filters": { "type": "socks5", "country": "us", "service": "telegram" }, "data": [ { "ip": "198.51.100.10", "port": "1080", "type": "socks5", "country": "US", "city": "New York" }, { "ip": "198.51.100.11", "port": "1080", "type": "socks5", "country": "US", "city": "Chicago" } ] }
08

Request examples

Reference
cURL

Fetch 10 HTTP proxies from Russia in TXT

curl "https://good-proxies.com/api/?key=YOUR_KEY&type=http&country=ru&count=10"
PHP

Fetch a JSON envelope filtered by Telegram compatibility

$url = 'https://good-proxies.com/api/?key=YOUR_KEY&get=json&service=telegram&count=20&wrap=1&fields=ip,port,type,country,city'; $data = json_decode(file_get_contents($url), true); print_r($data['data']);
Python

Fetch elite proxies with ping under 100 ms

import requests response = requests.get('https://good-proxies.com/api/', params={ 'key': 'YOUR_KEY', 'anon': 'elite', 'ping': 100, 'count': 50, 'get': 'json', 'pretty': 0, }) print(response.json())
JavaScript

Fetch US SOCKS5 proxies with English city names

const url = 'https://good-proxies.com/api/?key=YOUR_KEY&type=socks5&country=us&get=json&lang=en&split_ip=1&fields=ip,port,country,city'; fetch(url).then(r => r.json()).then(console.log);
09

Current API version notes

Reference
  • The lang=en path localises city names through city_en when available.
  • Country filtering supports exclusion mode via country_mode=except or cm=except.
  • JSON mode supports field whitelisting via fields, split IP/port output, object format and response envelopes through wrap=1.
  • The API can filter service compatibility for smtp, telegram, avito, google and mail.
  • TXT output supports type_prefix=1, while demo and temporary keys enforce separate request-rate and response-size caps.