VPN Test API Reference
Check if a website is accessible from a VPN connection: the URL is requested through a VPN IP address and the API returns the HTTP status code, response headers and page details as seen from the VPN. Useful to verify whether a site blocks or challenges VPN visitors.
Service details and pricing: VPN Test API
Request example
Query the endpoint via an HTTPS POST request (replace YOUR_API_KEY_HERE with your API key):
curl -X POST "https://api.apivoid.com/v2/vpn-test" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY_HERE" \
-d '{"url": "https://www.patreon.com/"}'The same request in PHP:
$url = 'https://www.patreon.com/';
$apiKey = 'YOUR_API_KEY_HERE';
$curl = curl_init('https://api.apivoid.com/v2/vpn-test');
curl_setopt($curl, CURLOPT_HTTPHEADER, ['Content-Type: application/json', 'X-API-Key: ' . $apiKey]);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode(['url' => $url]));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($curl);
$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ($httpCode === 200) {
$responseData = json_decode($response, true);
print_r($responseData);
} else {
print_r('An error occurred: '.$response);
}Request parameters
Required
URL to submit, e.g. https://www.patreon.com/.
⚠ Government and educational domains are blocked.
Response example
A successful request returns HTTP 200 with a JSON body:
{
"url": "https://www.patreon.com/",
"accessible": false,
"status_code": 403,
"debug_message": "",
"response_headers": {
"accept-ch": "Sec-CH-UA-Bitness, Sec-CH-UA-Arch, Sec-CH-UA-Full-Version, Sec-CH-UA-Mobile, Sec-CH-UA-Model, Sec-CH-UA-Platform-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Platform, Sec-CH-UA, UA-Bitness, UA-Arch, UA-Full-Version, UA-Mobile, UA-Model, UA-Platform-Version, UA-Platform, UA",
"cache-control": "private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0",
"cf-chl-out": "oCfcenr8aisw9BCZVlO6UgCVIhba0yavoWofUshfKsoxS0qPqaCDPROZv8sI03NIyTxkrqaQIJVWCsIokIan/hOb+XiEqx8ZW4jgkQL0MlWbbx/sagh1oKQHLg613cykA20IPDKlkluL4BK+pb+s1Q==$IHuTY7AGaBAQPSt5CN7cvQ==",
"cf-mitigated": "challenge",
"cf-ray": "927ae4a10dff7291-EWR",
"content-type": "text/html; charset=UTF-8",
"critical-ch": "Sec-CH-UA-Bitness, Sec-CH-UA-Arch, Sec-CH-UA-Full-Version, Sec-CH-UA-Mobile, Sec-CH-UA-Model, Sec-CH-UA-Platform-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Platform, Sec-CH-UA, UA-Bitness, UA-Arch, UA-Full-Version, UA-Mobile, UA-Model, UA-Platform-Version, UA-Platform, UA",
"cross-origin-embedder-policy": "require-corp",
"cross-origin-opener-policy": "same-origin",
"cross-origin-resource-policy": "same-origin",
"date": "Fri, 28 Mar 2025 23:26:33 GMT",
"expires": "Thu, 01 Jan 1970 00:00:01 GMT",
"nel": "{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}",
"origin-agent-cluster": "?1",
"permissions-policy": "accelerometer=(),autoplay=(),browsing-topics=(),camera=(),clipboard-read=(),clipboard-write=(),geolocation=(),gyroscope=(),hid=(),interest-cohort=(),magnetometer=(),microphone=(),payment=(),publickey-credentials-get=(),screen-wake-lock=(),serial=(),sync-xhr=(),usb=()",
"referrer-policy": "same-origin",
"report-to": "{\"endpoints\":[{\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=DnAvbTN8ie3uDz84OovG1CRA4bp7jaiWwZ5%2FH9ZB2zORWklOm2KEPX7EZQnNt7N8fKcEtSGDvZOC7BgTMkoifnTAc1gWSHDDhiC%2FCOKTAvHUUavXyBwikf%2BGaWGEws7z3w%3D%3D\"}],\"group\":\"cf-nel\",\"max_age\":604800}",
"server": "cloudflare",
"server-timing": "chlray;desc=\"927ae4a10dff7291\"",
"set-cookie": "__cf_bm=lCAZXpgkI5.hX9ghhJXZEPbjBpR64uTbpuNr_mlVlB8-1743204393-1.0.1.1-JFpzaxmPUAykjwdevJPx1vsBSuZ4Vf80VDrCM_jF3VtoRVIUWUsUOh8KKfQ4Y137KQa2JiGy3lXyfoibhq32vXuFQUOvtgzPGG1oFb6k7kKxWKoQ6rzYS0offJr7_.ZU; path=/; expires=Fri, 28-Mar-25 23:56:33 GMT; domain=.patreon.com; HttpOnly; Secure; SameSite=None",
"strict-transport-security": "max-age=2592000",
"vary": "Accept-Encoding",
"x-content-options": "nosniff",
"x-content-type-options": "nosniff",
"x-frame-options": "SAMEORIGIN"
},
"html_info": {
"title": "Just a moment...",
"description": ""
},
"elapsed_ms": 29
}Response fields
The fields returned in the JSON response:
urlstring
URL submitted for the VPN accessibility test.
accessibleboolean
Returns true if the URL is accessible from a VPN connection.
status_codeinteger
HTTP status code returned by the server.
debug_messagestring
Debug or error details about the request, if any. Empty string if none.
response_headersobject
HTTP response headers returned by the server to the VPN connection, keyed by lowercase header name.
html_info → titlestring
Title of the page returned to the VPN connection.
html_info → descriptionstring
Meta description of the page returned to the VPN connection.
elapsed_msinteger
Time taken to process the request, in milliseconds.