Shadowsocks API reference and data availability
Use the PublicVPNList API to read Shadowsocks endpoint metadata without scraping the HTML catalog. The current compact snapshot contains 624 records from 17 independent sources for this protocol.
Use the PublicVPNList API to read Shadowsocks endpoint metadata without scraping the HTML catalog. The current compact snapshot contains 624 records from 17 independent sources for this protocol.
Get access here before using the API or downloading a dataset. Your key and download links expire after 24 hours. Return to this page and press the button to get new access; it does not renew automatically.
Checking access…
Protected by Google reCAPTCHA. Google’s Privacy Policy and Terms of Service apply.
For permanent access, tell us your name, email and intended use. Requests are reviewed individually.
Send Authorization: Bearer YOUR_24_HOUR_KEY with API requests and downloads. HTTP 401 means access is missing or expired.
Continue to your requested download
Already saved files are not revoked. A configuration may stop working earlier if its third-party server changes. Individual OpenVPN checks still use their existing single-use download token.
Current server records available in the API and metadata exports. Counts refer to endpoint records; a host can have multiple configurations.
Speed measured for 565 of 624 records. Only checker-measured throughput is included; missing measurements are excluded, not treated as zero. Results depend on the checker location and are not guaranteed client speeds.
Countries below are the geolocated countries of verified exit IPs, which can differ from server locations. Geography uses the local DB-IP Lite database; unknown locations stay separate. The API country filter uses the published country_code field; exit-IP grouping is shown here.
On small screens, scroll the table sideways to see all speed columns.
| Country | Records | Speed measured | Median speed | Highest speed |
|---|---|---|---|---|
| United States (US) | 191 | 181 / 191 | 3.73 Mbps | 5.39 Mbps |
| Netherlands (NL) | 115 | 114 / 115 | 7.41 Mbps | 9.35 Mbps |
| Italy (IT) | 93 | 93 / 93 | 8.42 Mbps | 9.42 Mbps |
| Canada (CA) | 61 | 43 / 61 | 1.93 Mbps | 4.38 Mbps |
| Japan (JP) | 32 | 27 / 32 | 2.15 Mbps | 2.82 Mbps |
| Germany (DE) | 20 | 20 / 20 | 8.15 Mbps | 10.28 Mbps |
| Russia (RU) | 19 | 17 / 19 | 6.57 Mbps | 11.75 Mbps |
| United Kingdom (GB) | 19 | 19 / 19 | 6.23 Mbps | 8.80 Mbps |
| South Korea (KR) | 15 | 4 / 15 | 2.21 Mbps | 2.28 Mbps |
| Thailand (TH) | 13 | 12 / 13 | 1.58 Mbps | 2.84 Mbps |
| Czechia (CZ) | 12 | 12 / 12 | 5.13 Mbps | 7.33 Mbps |
| Austria (AT) | 6 | 6 / 6 | 8.24 Mbps | 8.88 Mbps |
| India (IN) | 6 | 3 / 6 | 3.10 Mbps | 3.62 Mbps |
| Romania (RO) | 6 | 0 / 6 | Not measured | Not measured |
| France (FR) | 5 | 5 / 5 | 2.11 Mbps | 2.73 Mbps |
| Albania (AL) | 3 | 1 / 3 | 3.39 Mbps | 3.39 Mbps |
| Denmark (DK) | 2 | 2 / 2 | 7.62 Mbps | 8.43 Mbps |
| Poland (PL) | 2 | 2 / 2 | 5.20 Mbps | 7.83 Mbps |
| Mexico (MX) | 1 | 1 / 1 | 3.54 Mbps | 3.54 Mbps |
| Singapore (SG) | 1 | 1 / 1 | 3.42 Mbps | 3.42 Mbps |
| South Africa (ZA) | 1 | 1 / 1 | 2.36 Mbps | 2.36 Mbps |
| Switzerland (CH) | 1 | 1 / 1 | 7.38 Mbps | 7.38 Mbps |
Snapshot updated: .
curl -H 'Authorization: Bearer YOUR_24_HOUR_KEY' -H 'Accept: application/json' \
'https://publicvpnlist.com/api/v1/servers?protocol=shadowsocks&status=online&sort=last_checked&order=desc&per_page=50'
The response is paginated. Keep the returned id for details at /api/v1/servers/{id}, cache the ETag, and treat last_checked_at as technical evidence rather than a privacy guarantee.
Shadowsocks uses encrypted TCP/UDP proxy endpoints. A usable public configuration requires a supported AEAD cipher and password. PublicVPNList does not publish rows inferred from an open port or incomplete relay metadata.
| Field | Meaning |
|---|---|
hostname, ip, port | Public connection endpoint metadata. |
transport, transport_security | Transport settings required by the client. |
exit_ip | Public IP observed only after the checker routed traffic through the tunnel. |
handshake_ms, https_first_byte_ms | Checker-region measurements; they are not a speed guarantee for every user. |
config_download_url | A downloadable configuration for a verified row. A source can remove it later (HTTP 410). OpenVPN uses its existing protected download flow: use server_page_url when this field is null. |
speed_mbps, checker_measured_throughput_mbps | Measured tunnel throughput in Mbps; null when not measured. |
latency_ms, checker_measured_tunnel_rtt_ms | Measured tunnel round-trip time. For URI protocols this is an HTTPS round trip, separate from handshake and first-byte time. |
uptime_percent_7d, sessions, technical_quality_score | May be null when this protocol has no matching measurement or scoring model. An absent value is not zero. |
Use protocol=shadowsocks consistently. Omitting it selects OpenVPN for backward compatibility.
data, meta.total, meta.page and links.next.Filter by country=US, transport=tcp, port=443, status=online, fresh_within=3600, min_speed=1, max_latency=500 or min_uptime=90. Metric filters exclude rows where that measurement is unknown.
Use page=1&per_page=50 (maximum 200), fields=id,protocol,country_code,server_page_url, and sort=speed|latency|uptime|last_checked|score|first_seen with order=asc|desc. Follow links.next until null. Compare the returned version if the dataset updates during pagination.
These complete metadata exports include all records in this protocol snapshot, without pagination. They contain links to configurations, not embedded passwords or client keys.
Add &country=US to restrict an export to one country. The TXT format is UTF-8 TSV. Export responses include ETag, Last-Modified, X-Dataset-Version and X-Checksum-SHA256. See all export formats.
A successful empty response is HTTP 200 with data: [], meta.total: 0 and links.next: null. It means no checked records are currently published for this protocol, not a broken API. TUIC, WireGuard and IKEv2 require usable configurations and successful full checks before rows can appear.
API errors: 401 missing or expired access key, 400 invalid or repeated parameter, 404 missing record, 405 unsupported method, 429 rate limit, 503 unavailable protocol snapshot. The JSON API permits 60 requests per minute; respect Retry-After. GET/HEAD support conditional caching (304), and OPTIONS provides CORS preflight; data requests require a Bearer key or the 24-hour browser access cookie. Unknown values remain null. Common examples and complete field reference.
Only checks no older than 72 hours can enter the protocol snapshot. Every row requires a real client tunnel, a successful HTTPS request and a public exit IP different from the checker’s direct address. Unknown third-party endpoints can still log or alter traffic; use end-to-end encryption and avoid sensitive accounts.
Snapshot version: 20261023T230459Z-003dc0153845. API JSON routes are excluded from search indexing; this documentation page is the canonical explanation; search indexing depends on the publication gate above.