APIVoid logo

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

POSThttps://api.apivoid.com/v2/vpn-test
10 credits per successful requestPOST · JSON

Request example

Query the endpoint via an HTTPS POST request (replace YOUR_API_KEY_HERE with your API key):

curl
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:

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

urlstringRequired

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:

json · 200
{
    "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.