OpenVPN API reference and data availability
Use the PublicVPNList API to read OpenVPN endpoint metadata without scraping the HTML catalog. The current compact snapshot contains 2611 records for this protocol.
Use the PublicVPNList API to read OpenVPN endpoint metadata without scraping the HTML catalog. The current compact snapshot contains 2611 records 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 2,603 of 2,611 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 follow the OpenVPN API location fields.
On small screens, scroll the table sideways to see all speed columns.
| Country | Records | Speed measured | Median speed | Highest speed |
|---|---|---|---|---|
| Japan (JP) | 1,272 | 1,266 / 1,272 | 2.24 Mbps | 4.19 Mbps |
| South Korea (KR) | 1,109 | 1,108 / 1,109 | 2.54 Mbps | 4.92 Mbps |
| USA (US) | 105 | 105 / 105 | 1.10 Mbps | 4.74 Mbps |
| Russia (RU) | 32 | 32 / 32 | 4.66 Mbps | 9.46 Mbps |
| Australia (AU) | 8 | 8 / 8 | 0.78 Mbps | 2.21 Mbps |
| France (FR) | 8 | 8 / 8 | 6.50 Mbps | 7.00 Mbps |
| UK (GB) | 8 | 8 / 8 | 1.28 Mbps | 6.61 Mbps |
| Canada (CA) | 7 | 7 / 7 | 3.51 Mbps | 3.88 Mbps |
| Ukraine (UA) | 6 | 6 / 6 | 4.64 Mbps | 7.40 Mbps |
| Vietnam (VN) | 6 | 6 / 6 | 2.43 Mbps | 3.26 Mbps |
| Netherlands (NL) | 5 | 5 / 5 | 5.66 Mbps | 7.44 Mbps |
| Spain (ES) | 4 | 4 / 4 | 5.86 Mbps | 6.61 Mbps |
| Belarus (BY) | 2 | 2 / 2 | 6.25 Mbps | 11.01 Mbps |
| Bulgaria (BG) | 2 | 2 / 2 | 4.35 Mbps | 6.81 Mbps |
| Finland (FI) | 2 | 2 / 2 | 0.56 Mbps | 0.76 Mbps |
| Hong Kong (HK) | 2 | 2 / 2 | 0.92 Mbps | 1.20 Mbps |
| Hungary (HU) | 2 | 2 / 2 | 6.72 Mbps | 7.76 Mbps |
| Lithuania (LT) | 2 | 2 / 2 | 7.02 Mbps | 8.07 Mbps |
| Mexico (MX) | 2 | 2 / 2 | 3.58 Mbps | 3.63 Mbps |
| Peru (PE) | 2 | 2 / 2 | 0.54 Mbps | 0.74 Mbps |
| Azerbaijan (AZ) | 1 | 1 / 1 | 5.54 Mbps | 5.54 Mbps |
| Bangladesh (BD) | 1 | 1 / 1 | 0.61 Mbps | 0.61 Mbps |
| Brazil (BR) | 1 | 1 / 1 | 0.57 Mbps | 0.57 Mbps |
| Chile (CL) | 1 | 1 / 1 | 2.60 Mbps | 2.60 Mbps |
| Costa Rica (CR) | 1 | 1 / 1 | 3.12 Mbps | 3.12 Mbps |
| Czech Republic (CZ) | 1 | 1 / 1 | 7.03 Mbps | 7.03 Mbps |
| Ecuador (EC) | 1 | 1 / 1 | 3.74 Mbps | 3.74 Mbps |
| Georgia (GE) | 1 | 1 / 1 | 2.64 Mbps | 2.64 Mbps |
| Germany (DE) | 1 | 1 / 1 | 1.85 Mbps | 1.85 Mbps |
| Grenada (GD) | 1 | 1 / 1 | 0.06 Mbps | 0.06 Mbps |
| India (IN) | 1 | 1 / 1 | 2.87 Mbps | 2.87 Mbps |
| Indonesia (ID) | 1 | 1 / 1 | 3.50 Mbps | 3.50 Mbps |
| Italy (IT) | 1 | 1 / 1 | 7.83 Mbps | 7.83 Mbps |
| Latvia (LV) | 1 | 1 / 1 | 10.16 Mbps | 10.16 Mbps |
| Malaysia (MY) | 1 | 1 / 1 | 1.60 Mbps | 1.60 Mbps |
| New Zealand (NZ) | 1 | 1 / 1 | 2.58 Mbps | 2.58 Mbps |
| Northern Mariana Islands (MP) | 1 | 1 / 1 | 1.65 Mbps | 1.65 Mbps |
| Paraguay (PY) | 1 | 1 / 1 | 2.47 Mbps | 2.47 Mbps |
| Philippines (PH) | 1 | 1 / 1 | 1.96 Mbps | 1.96 Mbps |
| Portugal (PT) | 1 | 1 / 1 | 5.80 Mbps | 5.80 Mbps |
| Romania (RO) | 1 | 1 / 1 | 12.64 Mbps | 12.64 Mbps |
| Singapore (SG) | 1 | 1 / 1 | 3.64 Mbps | 3.64 Mbps |
| South Africa (ZA) | 1 | 0 / 1 | Not measured | Not measured |
| Thailand (TH) | 1 | 1 / 1 | 3.40 Mbps | 3.40 Mbps |
| Yemen (YE) | 1 | 1 / 1 | 0.95 Mbps | 0.95 Mbps |
Snapshot updated: .
curl -H 'Authorization: Bearer YOUR_24_HOUR_KEY' -H 'Accept: application/json' \
'https://publicvpnlist.com/api/v1/servers?protocol=openvpn&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.
OpenVPN uses TCP or UDP VPN profiles. A usable public configuration requires portable .ovpn profiles and mature clients. 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=openvpn 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.
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.
OpenVPN follows the existing catalog eligibility and measurement policy. Unknown third-party endpoints can still log or alter traffic; use end-to-end encryption and avoid sensitive accounts.
Snapshot version: 20261024T010138Z-594f12b59a52. API JSON routes are excluded from search indexing; this documentation page is the canonical explanation; search indexing depends on the publication gate above.