';
$htmlBase64 = base64_encode($html);
$apiKey = 'YOUR_API_KEY_HERE';
$curl = curl_init('https://api.apivoid.com/v2/html-to-pdf');
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(['html_base64' => $htmlBase64]));
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);
// Save the "base64_file" data as PDF file
if (isset($responseData['rendered_file']['base64_file'])) {
$saveAs = __DIR__ . '/document.pdf';
file_put_contents($saveAs, base64_decode($responseData['rendered_file']['base64_file']));
if (file_exists($saveAs)) {
echo '
File document.pdf saved successfully!
';
} else {
echo '
Failed to create document.pdf file.
';
}
}
} else {
print_r('An error occurred: '.$response);
}
```
## Request parameters
### Required
- `html_base64` (string; Required): HTML data encoded in base64.
### Optional
- `pdf_papersize_width` (integer; Default: 0): Change PDF paper width in pixels (max 5000).
- `pdf_papersize_height` (integer; Default: 0): Change PDF paper height in pixels (max 10000).
- `pdf_format` (string; Default: A4): Change PDF format, can be Letter, Legal, Tabloid, Ledger, A0, A1, A2, A3, A4, A5, A6.
- `pdf_margin` (integer; Default: 0): Change PDF margin.
- `pdf_show_background` (boolean; Default: true): Show the background of the web page.
- `pdf_landscape` (boolean; Default: false): Change the PDF orientation to landscape.
- `pdf_page_ranges` (string): Select page ranges, can be 1 or 1-3 (for example).
- `pdf_scale` (float): Scale the PDF, must be between 0.1 and 2.
- `pdf_one_page` (boolean; Default: false): Try to fit the web page into a single PDF page.
## Response example
A successful request returns HTTP `200` with a JSON body:
```json
{
"rendered_file": {
"format": "PDF",
"date_time_utc": "2024-11-29 19:05:01",
"base64_file": "JVBERi0xLjcKJeLjz9MKMSAwIG9iago8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFI+PgplbmRvYmoKMiAwIG9iago8PC9U...",
"file_size_readable": "14.73 KB",
"file_size_bytes": 15080
},
"elapsed_ms": 5485
}
```
## Response fields
The fields returned in the JSON response:
- `rendered_file → format` (string): Format of the rendered file, e.g. PDF.
- `rendered_file → date_time_utc` (string): Date and time (UTC) of when the file was rendered.
- `rendered_file → base64_file` (string): The rendered PDF file encoded in base64.
- `rendered_file → file_size_readable` (string): File size in human-readable format, e.g. 14.73 KB.
- `rendered_file → file_size_bytes` (integer): File size in bytes.
- `elapsed_ms` (integer): Time taken to process the request, in milliseconds.
---
Source:
# HTML to PNG API Reference
Convert custom HTML code into a PNG image rendered by a real browser.
Service details and pricing: [HTML to PNG API](https://www.apivoid.com/api/html-to-png/)
Endpoint: `POST https://api.apivoid.com/v2/html-to-png`
Credit cost: 20 credits per successful request.
## Request example
Query the endpoint via an HTTPS POST request (replace `YOUR_API_KEY_HERE` with your [API key](https://docs.apivoid.com/authentication/)):
```bash
curl -X POST "https://api.apivoid.com/v2/html-to-png" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY_HERE" \
-d '{"html_base64": "PGh0bWw+PGJvZHk+PGgxPlRlc3RpbmcgSFRNTCB0byBQTkcgQVBJPC9oMT48L2JvZHk+PC9odG1sPg=="}'
```
The same request in PHP:
```php
$html = '
Testing
Example text...
';
$htmlBase64 = base64_encode($html);
$apiKey = 'YOUR_API_KEY_HERE';
$curl = curl_init('https://api.apivoid.com/v2/html-to-png');
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(['html_base64' => $htmlBase64]));
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);
// Save the "base64_file" data as PNG file
if (isset($responseData['rendered_file']['base64_file'])) {
$saveAs = __DIR__ . '/screenshot.png';
file_put_contents($saveAs, base64_decode($responseData['rendered_file']['base64_file']));
if (file_exists($saveAs)) {
echo '
';
} else {
echo '
Failed to create screenshot.png file.
';
}
}
} else {
print_r('An error occurred: '.$response);
}
```
## Request parameters
### Required
- `html_base64` (string; Required): HTML data encoded in base64.
## Response example
A successful request returns HTTP `200` with a JSON body:
```json
{
"rendered_file": {
"format": "PNG",
"date_time_utc": "2024-11-29 19:05:01",
"base64_file": "iVBORw0KGgoAAAANSUhEUgAAB4AAAAQ4CAIAAABnsVYUAAAAAXNSR0IArs4c6QAAIABJREFUeJzs3WmYVOWd8OFqa...",
"image_width": 1920,
"image_height": 1080,
"file_size_readable": "14.73 KB",
"file_size_bytes": 15080
},
"elapsed_ms": 5485
}
```
## Response fields
The fields returned in the JSON response:
- `rendered_file → format` (string): Format of the rendered file, e.g. PNG.
- `rendered_file → date_time_utc` (string): Date and time (UTC) of when the file was rendered.
- `rendered_file → base64_file` (string): The rendered PNG image encoded in base64.
- `rendered_file → image_width` (integer): Width of the rendered image in pixels.
- `rendered_file → image_height` (integer): Height of the rendered image in pixels.
- `rendered_file → file_size_readable` (string): File size in human-readable format, e.g. 14.73 KB.
- `rendered_file → file_size_bytes` (integer): File size in bytes.
- `elapsed_ms` (integer): Time taken to process the request, in milliseconds.
---
Source:
# HTTP Tracker API Reference
Track all HTTP requests made by a URL when loaded in a real browser: requests to third-party domains, IP addresses contacted, and response details.
Service details and pricing: [HTTP Tracker API](https://www.apivoid.com/api/http-tracker/)
Endpoint: `POST https://api.apivoid.com/v2/http-tracker`
Credit cost: 20 credits per successful request.
## Request example
Query the endpoint via an HTTPS POST request (replace `YOUR_API_KEY_HERE` with your [API key](https://docs.apivoid.com/authentication/)):
```bash
curl -X POST "https://api.apivoid.com/v2/http-tracker" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY_HERE" \
-d '{"url": "https://www.apivoid.com/"}'
```
The same request in PHP:
```php
$url = 'https://www.apivoid.com/';
$apiKey = 'YOUR_API_KEY_HERE';
$curl = curl_init('https://api.apivoid.com/v2/http-tracker');
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` (string; Required): URL to submit, e.g. `https://www.apivoid.com/`. Note: ⚠ Government and educational domains are blocked.
### Optional
- `user_agent` (string; Default: desktop): Can be `desktop` (default, a random desktop user agent) or `mobile`.
- `accept_language` (string; Default: en-US): Change the Accept-Language HTTP header, format like `en-US`.
## Response example
A successful request returns HTTP `200` with a JSON body:
```json
{
"url": "https://www.apivoid.com/",
"http_requests": [
{
"url": "https://www.apivoid.com/",
"status_code": 200,
"content_type": "text/html",
"content_length": 30266,
"elapsed_ms": 199,
"ip_address": "159.69.124.48"
},
{
"url": "https://www.apivoid.com/styles/main.css",
"status_code": 200,
"content_type": "text/css",
"content_length": 192605,
"elapsed_ms": 87,
"ip_address": "159.69.124.48"
},
{
"url": "https://www.apivoid.com/images/email-support.png",
"status_code": 200,
"content_type": "image/png",
"content_length": 867,
"elapsed_ms": 100,
"ip_address": "159.69.124.48"
},
{
"url": "https://www.apivoid.com/scripts/jquery-3.1.1.min.js",
"status_code": 200,
"content_type": "application/javascript",
"content_length": 86709,
"elapsed_ms": 107,
"ip_address": "159.69.124.48"
},
{
"url": "https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/3.5.0/css/flag-icon.min.css",
"status_code": 200,
"content_type": "text/css",
"content_length": 1482,
"elapsed_ms": 157,
"ip_address": "104.17.25.14"
},
{
"url": "https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css",
"status_code": 200,
"content_type": "text/css",
"content_length": 31000,
"elapsed_ms": 172,
"ip_address": "104.18.11.207"
},
...
],
"hosts_list": [
"cdn.usefathom.com",
"cdnjs.cloudflare.com",
"fonts.googleapis.com",
"maxcdn.bootstrapcdn.com",
"www.apivoid.com",
"www.google.com",
"www.gstatic.com"
],
"ips_list": [
"104.17.25.14",
"104.18.11.207",
"142.250.185.227",
"142.250.185.74",
"142.250.186.164",
"159.69.124.48",
"169.150.247.37"
],
"stats": {
"total_requests": 27,
"unsecure_requests": 0,
"same_origin_requests": 16,
"cross_origin_requests": 11,
"unique_hosts": 7,
"external_hosts": 6,
"unique_ips": 7,
"2xx_status_codes": 27,
"3xx_status_codes": 0,
"4xx_status_codes": 0,
"5xx_status_codes": 0,
"transferred_bytes": 926446,
"html_files": 1,
"html_files_bytes": 30266,
"image_files": 8,
"image_files_bytes": 63463,
"javascript_files": 11,
"javascript_files_bytes": 525055,
"css_files": 5,
"css_files_bytes": 230459,
"font_files": 1,
"font_files_bytes": 77160
},
"elapsed_ms": 1828
}
```
## Response fields
The fields returned in the JSON response:
- `url` (string): URL submitted for HTTP requests tracking.
- `http_requests` (array): List of HTTP requests made while loading the page.
- `http_requests[n] → url` (string): URL of the requested resource.
- `http_requests[n] → status_code` (integer): HTTP status code returned for the request.
- `http_requests[n] → content_type` (string): Content type of the requested resource, e.g. text/html.
- `http_requests[n] → content_length` (integer): Size of the requested resource in bytes.
- `http_requests[n] → elapsed_ms` (integer): Time taken by the request in milliseconds.
- `http_requests[n] → ip_address` (string): IP address of the server that served the resource.
- `hosts_list` (array): List of unique hosts contacted while loading the page.
- `ips_list` (array): List of unique IP addresses contacted while loading the page.
- `stats → total_requests` (integer): Total number of HTTP requests made.
- `stats → unsecure_requests` (integer): Number of requests made over unsecure HTTP.
- `stats → same_origin_requests` (integer): Number of requests made to the same origin.
- `stats → cross_origin_requests` (integer): Number of requests made to a different origin.
- `stats → unique_hosts` (integer): Number of unique hosts contacted.
- `stats → external_hosts` (integer): Number of external hosts contacted.
- `stats → unique_ips` (integer): Number of unique IP addresses contacted.
- `stats → 2xx_status_codes` (integer): Number of requests that returned a 2xx status code.
- `stats → 3xx_status_codes` (integer): Number of requests that returned a 3xx status code.
- `stats → 4xx_status_codes` (integer): Number of requests that returned a 4xx status code.
- `stats → 5xx_status_codes` (integer): Number of requests that returned a 5xx status code.
- `stats → transferred_bytes` (integer): Total bytes transferred while loading the page.
- `stats → html_files` (integer): Number of HTML files loaded.
- `stats → html_files_bytes` (integer): Total bytes of HTML files loaded.
- `stats → image_files` (integer): Number of image files loaded.
- `stats → image_files_bytes` (integer): Total bytes of image files loaded.
- `stats → javascript_files` (integer): Number of JavaScript files loaded.
- `stats → javascript_files_bytes` (integer): Total bytes of JavaScript files loaded.
- `stats → css_files` (integer): Number of CSS files loaded.
- `stats → css_files_bytes` (integer): Total bytes of CSS files loaded.
- `stats → font_files` (integer): Number of font files loaded.
- `stats → font_files_bytes` (integer): Total bytes of font files loaded.
- `elapsed_ms` (integer): Time taken to process the request, in milliseconds.
---
Source:
# HTTP3 Status API Reference
Check if a website supports the HTTP/3 protocol, with details about the negotiated protocol and Alt-Svc header.
Service details and pricing: [HTTP3 Status API](https://www.apivoid.com/api/http3-status/)
Endpoint: `POST https://api.apivoid.com/v2/http3-status`
Credit cost: 1 credit per successful request.
## Request example
Query the endpoint via an HTTPS POST request (replace `YOUR_API_KEY_HERE` with your [API key](https://docs.apivoid.com/authentication/)):
```bash
curl -X POST "https://api.apivoid.com/v2/http3-status" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY_HERE" \
-d '{"url": "https://www.google.com/"}'
```
The same request in PHP:
```php
$url = 'https://www.google.com/';
$apiKey = 'YOUR_API_KEY_HERE';
$curl = curl_init('https://api.apivoid.com/v2/http3-status');
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` (string; Required): URL to submit, e.g. `https://www.google.com/`.
## Response example
A successful request returns HTTP `200` with a JSON body:
```json
{
"url": "https://www.google.com/",
"status_code": 200,
"status_message": "OK",
"http3_supported": true,
"protocol": "HTTP/3.0",
"response_headers": {
"accept-ch": [
"Sec-CH-Prefers-Color-Scheme"
],
"alt-svc": [
"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"
],
"cache-control": [
"private, max-age=0"
],
"content-security-policy-report-only": [
"object-src 'none';base-uri 'self';script-src 'nonce-B0aSTNNTysfKPA7d8BAOdA' 'strict-dynamic' 'report-sample' 'unsafe-eval' 'unsafe-inline' https: http:;report-uri https://csp.withgoogle.com/csp/gws/other-hp"
],
"content-type": [
"text/html; charset=UTF-8"
],
"cross-origin-opener-policy": [
"same-origin-allow-popups; report-to=\"gws\""
],
"date": [
"Fri, 03 Oct 2025 15:35:55 GMT"
],
"expires": [
"-1"
],
"p3p": [
"CP=\"This is not a P3P policy! See g.co/p3phelp for more info.\""
],
"report-to": [
"{\"group\":\"gws\",\"max_age\":2592000,\"endpoints\":[{\"url\":\"https://csp.withgoogle.com/csp/report-to/gws/other\"}]}"
],
"server": [
"gws"
],
"set-cookie": [
"AEC=AaJma5uUxjd8HNsGvWJdYQa7DYFnfSWk9yZxU6KnTGd6CMJfoADGMaryeWo; expires=Wed, 01-Apr-2026 15:35:55 GMT; path=/; domain=.google.com; Secure; HttpOnly; SameSite=lax",
"NID=525=gXVZloTgRJJTjXftI0Red_LcofkT_At9KtmE4YgmpyUjYPNvkhzIxbkNyH4BYU6u1VSt_z9O6yKXn3XPpctAdAW0mW7tICtkgub0tKrB8WtBhYxt2zAmbnzlkP7EHCms07uFEcSoO1on0i8C9K-cMqd0QvjuBC39u6sp9LCa-i4Eg2EHZmNGeARlKf5vfhqpliVCP6MFi_j7Bn8ND3AkEUg; expires=Sat, 04-Apr-2026 15:35:55 GMT; path=/; domain=.google.com; Secure; HttpOnly; SameSite=none"
],
"x-frame-options": [
"SAMEORIGIN"
],
"x-xss-protection": [
"0"
]
},
"alpn_identifiers": [
"h3",
"h3-29"
],
"elapsed_ms": 90
}
```
## Response fields
The fields returned in the JSON response:
- `url` (string): URL submitted for the HTTP/3 check.
- `status_code` (integer): HTTP status code returned by the server.
- `status_message` (string): HTTP status message returned by the server, e.g. OK.
- `http3_supported` (boolean): Returns true if the server supports HTTP/3.
- `protocol` (string): HTTP protocol version used for the response, e.g. HTTP/3.0.
- `response_headers` (object): HTTP response headers returned by the server, keyed by lowercase header name.
- `alpn_identifiers` (array): ALPN identifiers advertised by the server, e.g. h3, h3-29.
- `elapsed_ms` (integer): Time taken to process the request, in milliseconds.
---
Source:
# IP Reputation API Reference
Check the reputation of an IPv4 or IPv6 address using multiple IP blacklist services, with detection details, risk score and IP information.
Service details and pricing: [IP Reputation API](https://www.apivoid.com/api/ip-reputation/)
Endpoint: `POST https://api.apivoid.com/v2/ip-reputation`
Credit cost: 1 credit per successful request.
## Request example
Query the endpoint via an HTTPS POST request (replace `YOUR_API_KEY_HERE` with your [API key](https://docs.apivoid.com/authentication/)):
```bash
curl -X POST "https://api.apivoid.com/v2/ip-reputation" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY_HERE" \
-d '{"ip": "80.82.77.139"}'
```
The same request in PHP:
```php
$ip = '80.82.77.139';
$apiKey = 'YOUR_API_KEY_HERE';
$curl = curl_init('https://api.apivoid.com/v2/ip-reputation');
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(['ip' => $ip]));
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
- `ip` (string; Required): Public IPv4 or IPv6 address to scan. Note: ⚠ Private or internal IP addresses (e.g. 127.0.0.1) are not allowed.
### Optional
- `exclude_engines` (string): List of comma-separated engines to exclude, e.g. BlockedServersRBL,NordSpam.
- `spamhaus_key` (string): Your [Spamhaus DBL DQS key](https://www.spamhaus.com/product/data-query-service/), this will enable the Spamhaus engine.
- `disable_reverse_dns` (boolean; Default: false): Disable reverse DNS lookup to reduce the response time.
## Bonus Tip: How to reduce response time
If you require a response in less than 500ms you can use these parameters:
```json
{"ip":"1.2.3.4","disable_reverse_dns":true,"exclude_engines":"0spam,RealtimeBLACKLIST,IBM_Cobion,JustSpam_org,S5hbl,BlockedServersRBL,EFnet_RBL"}
```
This disables the reverse DNS lookup and excludes the engines that are occasionally slow to respond.
This way the response time should always be less than 500ms.
## Response example
A successful request returns HTTP `200` with a JSON body:
```json
{
"ip": "80.82.77.139",
"version": "IPv4",
"blacklists": {
"engines": {
"0": {
"name": "0spam",
"detected": false,
"reference": "https://0spam.org/",
"elapsed_ms": 0
},
"1": {
"name": "Anti-Attacks BL",
"detected": false,
"reference": "https://www.anti-attacks.com/",
"elapsed_ms": 0
},
"2": {
"name": "AntiSpam_by_CleanTalk",
"detected": false,
"reference": "https://cleantalk.org/",
"elapsed_ms": 0
},
"3": {
"name": "APEWS-L2",
"detected": false,
"reference": "http://www.apews.org/",
"elapsed_ms": 0
},
"4": {
"name": "AZORult Tracker",
"detected": false,
"reference": "https://azorult-tracker.net/",
"elapsed_ms": 0
},
"5": {
"name": "Backscatterer",
"detected": true,
"reference": "https://www.backscatterer.org/",
"elapsed_ms": 0
},
"6": {
"name": "Barracuda_Reputation_BL",
"detected": false,
"reference": "https://barracudacentral.org/lookups",
"elapsed_ms": 0
},
"7": {
"name": "BitNinja",
"detected": true,
"reference": "https://bitninja.com/",
"elapsed_ms": 0
},
"8": {
"name": "BlockedServersRBL",
"detected": true,
"reference": "https://www.blockedservers.com/",
"elapsed_ms": 0
},
...
},
"detections": 27,
"engines_count": 80,
"detection_rate": "33%",
"scan_time_ms": 5
},
"information": {
"reverse_dns": "dojo.census.shodan.io",
"is_eu": true,
"continent_code": "EU",
"continent_name": "Europe",
"country_code": "NL",
"country_name": "Netherlands (Kingdom of the)",
"currency": "EUR",
"currency_name": "Euro",
"currency_name_plural": "euros",
"currency_symbol": "€",
"currency_symbol_native": "€",
"calling_code": "31",
"emoji_flag": "🇳🇱",
"emoji_flag_unicode": "U+1F1F3 U+1F1F1",
"region_name": "Noord-Holland",
"city_name": "Amsterdam",
"latitude": 52.378502,
"longitude": 4.89998,
"isp": "FiberXpress BV",
"asn": "AS202425",
"is_bogon": false,
"is_spamhaus_drop": false,
"is_fake_bot": false,
"is_google_bot": false,
"is_search_engine_bot": false,
"related_service_name": "",
"related_service_domain": "",
"related_service_type": "",
"is_major_provider_spf_ip": false,
"is_public_dns": false,
"cloud_provider": "",
"cloud_provider_domain": "",
"aws_service": "",
"is_google_service": false,
"edge_service": "",
"edge_service_domain": "",
"is_satellite": false
},
"asn": {
"asn": "AS202425",
"asname": "INT-NETWORK",
"route": "80.82.77.0/24",
"status": "active",
"org": "IP Volume inc",
"country_code": "SC",
"created": "2018-05-17",
"days_since_created": 2773,
"updated": "2024-01-25",
"days_since_updated": 694,
"address": "Seychelles",
"abuse_email": "abuse@ipvolume.net",
"domain": "ipvolume.net",
"total_ipv4_prefixes": 55,
"total_ipv4_ips": 14848,
"total_ipv6_prefixes": 1,
"type": "hosting",
"rir": "RIPE"
},
"anonymity": {
"is_proxy": false,
"is_webproxy": false,
"is_residential_proxy": false,
"is_vpn": false,
"is_hosting": true,
"is_relay": false,
"is_tor": false
},
"risk_score": {
"result": 100
},
"elapsed_ms": 98
}
```
## Response fields
The fields returned in the JSON response:
- `ip` (string): IP address submitted for scanning.
- `version` (string): IP version of the submitted address: IPv4 or IPv6.
- `blacklists → engines` (object): List of scanning engines with detection status and reference link.
- `blacklists → engines → [index] → name` (string): Name of the scanning engine.
- `blacklists → engines → [index] → detected` (boolean): Returns true if this engine flagged the submitted IP address.
- `blacklists → engines → [index] → reference` (string): Link to the engine's website or listing details.
- `blacklists → engines → [index] → elapsed_ms` (integer): Time taken by this engine to complete its check, in milliseconds.
- `blacklists → detections` (integer): Number of scanning engines that detected the submitted IP.
- `blacklists → engines_count` (integer): Number of scanning engines used to scan the IP.
- `blacklists → detection_rate` (string): Percentage of engines that detected the IP address, e.g. 33%.
- `blacklists → scan_time_ms` (integer): Time taken to scan the IP address across all engines, in milliseconds.
- `information → reverse_dns` (string): Hostname (reverse DNS) assigned to the IP address.
- `information → is_eu` (boolean): Returns true if the IP address is located in the EU (Europe).
- `information → continent_code` (string): Continent code (e.g. AS) of where the IP address is located.
- `information → continent_name` (string): Continent name (e.g. Asia) of where the IP address is located.
- `information → country_code` (string): Country code (e.g. CN) of where the IP address is located.
- `information → country_name` (string): Country name of where the IP address is located.
- `information → currency` (string): The local currency code (ISO 4217), e.g. EUR.
- `information → currency_name` (string): Name of the currency used in the country, e.g. Euro.
- `information → currency_name_plural` (string): Plural name of the currency, e.g. euros.
- `information → currency_symbol` (string): The symbol of the local currency, e.g. € for Euro.
- `information → currency_symbol_native` (string): Native symbol of the currency, e.g. €.
- `information → calling_code` (string): The international calling code of the country, e.g. 1 for US.
- `information → emoji_flag` (string): The country flag emoji.
- `information → emoji_flag_unicode` (string): The Unicode code points of the country flag emoji.
- `information → region_name` (string): The region or state associated with the IP.
- `information → city_name` (string): The city associated with the IP.
- `information → latitude` (float): The estimated latitude of the city.
- `information → longitude` (float): The estimated longitude of the city.
- `information → isp` (string): Internet Service Provider (ISP) of the IP address.
- `information → asn` (string): IP Autonomous System Number (ASN), such as AS16509.
- `information → is_bogon` (boolean): Returns true if the IP is a bogon address.
- `information → is_spamhaus_drop` (boolean): Returns true if the IP is listed in the Spamhaus DROP list.
- `information → is_fake_bot` (boolean): Returns true if the IP claims to be a search engine bot but is not verified.
- `information → is_google_bot` (boolean): Returns true if the IP belongs to a verified Google bot.
- `information → is_search_engine_bot` (boolean): Returns true if the IP belongs to a known and verified search engine bot.
- `information → related_service_name` (string): The name of the service associated with the IP, e.g. AhrefBot.
- `information → related_service_domain` (string): The domain name associated with the related service, e.g. ahrefs.com.
- `information → related_service_type` (string): The service category, can be Crawler, Search Engine Bot, SaaS, Payments, Monitoring, Identity or Marketing.
- `information → is_major_provider_spf_ip` (boolean): Returns true if the IP belongs to a major email provider SPF range.
- `information → is_public_dns` (boolean): Returns true if the IP is a public DNS resolver (e.g. 8.8.8.8).
- `information → cloud_provider` (string): The name of the major cloud service provider, e.g. Amazon AWS.
- `information → cloud_provider_domain` (string): The primary domain name of the cloud service provider, e.g. amazonaws.com.
- `information → aws_service` (string): The AWS service associated with the IP (e.g. EC2, S3, CloudFront, Route53, API Gateway).
- `information → is_google_service` (boolean): Returns true if the IP belongs to a Google service.
- `information → edge_service` (string): The edge or CDN service associated with the IP, e.g. Fastly.
- `information → edge_service_domain` (string): The domain name associated with the edge or CDN service, e.g. fastly.com.
- `information → is_satellite` (boolean): Returns true if the IP is associated with satellite connectivity.
- `asn → asn` (string): The AS number, e.g. AS202425.
- `asn → asname` (string): The AS name, e.g. INT-NETWORK.
- `asn → route` (string): The IP prefix announced by the AS (CIDR notation), e.g. 80.82.77.0/24.
- `asn → status` (string): The current registration status of the AS (e.g. active).
- `asn → org` (string): The organization that owns or operates the AS, e.g. IP Volume inc.
- `asn → country_code` (string): The country code of the AS (ISO 3166-1 alpha-2).
- `asn → created` (string): The date in format Y-m-d (e.g. 2018-05-17) the AS was registered.
- `asn → days_since_created` (integer): The number of days since the AS was created.
- `asn → updated` (string): The date in format Y-m-d (e.g. 2024-01-25) the AS information was last updated.
- `asn → days_since_updated` (integer): The number of days since the AS information was last updated.
- `asn → address` (string): The registered address or location associated with the AS.
- `asn → abuse_email` (string): The abuse contact email address for the AS.
- `asn → domain` (string): The primary domain name associated with the AS.
- `asn → total_ipv4_prefixes` (integer): The total number of IPv4 prefixes announced by the AS.
- `asn → total_ipv4_ips` (integer): The total number of IPv4 addresses announced by the AS.
- `asn → total_ipv6_prefixes` (integer): The total number of IPv6 prefixes announced by the AS.
- `asn → type` (string): The AS classification, can be hosting, isp, business (default), education, government or banking.
- `asn → rir` (string): The Regional Internet Registry responsible for the AS, can be RIPE, APNIC, ARIN, JPNIC, LACNIC or AFRINIC.
- `anonymity → is_proxy` (boolean): Returns true if IP is an open proxy (HTTP/SOCKS).
- `anonymity → is_webproxy` (boolean): Returns true if IP is a web proxy.
- `anonymity → is_residential_proxy` (boolean): Returns true if IP is a residential proxy.
- `anonymity → is_vpn` (boolean): Returns true if IP is a VPN service, e.g. NordVPN.
- `anonymity → is_hosting` (boolean): Returns true if IP is a hosting provider, e.g. DigitalOcean.
- `anonymity → is_relay` (boolean): Returns true if the IP address belongs to a relay service (e.g. Apple Private Relay).
- `anonymity → is_tor` (boolean): Returns true if IP is a Tor node.
- `risk_score → result` (integer): Returns risk score, a number between 0 (safe) and 100 (dangerous).
- `elapsed_ms` (integer): Time taken to process the request, in milliseconds.
---
Source:
# Parked Domain API Reference
Check if a domain is parked, inactive, or for sale, which is useful for filtering out domains that are currently not in use and therefore do not host real content.
Service details and pricing: [Parked Domain API](https://www.apivoid.com/api/parked-domain/)
Endpoint: `POST https://api.apivoid.com/v2/parked-domain`
Credit cost: 2 credits per successful request.
## Request example
Query the endpoint via an HTTPS POST request (replace `YOUR_API_KEY_HERE` with your [API key](https://docs.apivoid.com/authentication/)):
```bash
curl -X POST "https://api.apivoid.com/v2/parked-domain" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY_HERE" \
-d '{"host": "example.com"}'
```
The same request in PHP:
```php
$host = 'example.com';
$apiKey = 'YOUR_API_KEY_HERE';
$curl = curl_init('https://api.apivoid.com/v2/parked-domain');
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(['host' => $host]));
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
- `host` (string; Required): Host to submit, e.g. google.com.
## Response example
A successful request returns HTTP `200` with a JSON body:
```json
{
"host": "example.com",
"parked_domain": false,
"a_records_found": true,
"ns_records_found": true,
"mx_records_found": true,
"txt_records_found": true,
"elapsed_ms": 162
}
```
## Response fields
The fields returned in the JSON response:
- `host` (string): Host submitted for the parked domain check.
- `parked_domain` (boolean): Returns true if domain is classified as parked.
- `a_records_found` (boolean): Returns true if domain has DNS A records.
- `ns_records_found` (boolean): Returns true if domain has DNS NS records.
- `mx_records_found` (boolean): Returns true if domain has DNS MX records.
- `txt_records_found` (boolean): Returns true if domain has DNS TXT records.
- `elapsed_ms` (integer): Time taken to process the request, in milliseconds.
---
Source:
# Phone Validator API Reference
Check and validate a phone number: get country code, carrier and estimated line type, detect invalid, disposable (commonly used on signups) and abusive numbers.
Service details and pricing: [Phone Validator API](https://www.apivoid.com/api/phone-validator/)
Endpoint: `POST https://api.apivoid.com/v2/phone-validator`
Credit cost: 1 credit per successful request.
## Request example
Query the endpoint via an HTTPS POST request (replace `YOUR_API_KEY_HERE` with your [API key](https://docs.apivoid.com/authentication/)):
```bash
curl -X POST "https://api.apivoid.com/v2/phone-validator" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY_HERE" \
-d '{"number": "+12024746243"}'
```
The same request in PHP:
```php
$number = '+12024746243';
$apiKey = 'YOUR_API_KEY_HERE';
$curl = curl_init('https://api.apivoid.com/v2/phone-validator');
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(['number' => $number]));
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
- `number` (string; Required): Phone number to submit, e.g. +12024746243 or 12024746243.
### Optional
- `country_code` (string): Country code of the phone number (e.g. US), not needed if the number has the prefix.
## Response example
A successful request returns HTTP `200` with a JSON body:
```json
{
"valid": true,
"number": "+12024746243",
"local_format": "(202) 474-6243",
"international_format": "+1 202-474-6243",
"e164_format": "+12024746243",
"uri": "tel:+12024746243",
"country_prefix": "+1",
"country_code": "US",
"country_name": "United States",
"location": "Washington D.C.",
"carrier": "",
"line_type": "Fixed Line or Mobile",
"disposable": true,
"abusive": true,
"elapsed_ms": 1
}
```
## Response fields
The fields returned in the JSON response:
- `valid` (boolean): Returns true if the phone number format is valid.
- `number` (string): Returns the submitted phone number.
- `local_format` (string): Returns the phone number in local format, such as (202) 474-6243.
- `international_format` (string): Returns the phone number in international format (e.g. +1 202-474-6243).
- `e164_format` (string): Returns the phone number in E.164 format (e.g. +12024746243).
- `uri` (string): Returns the phone number in URI format suitable for HTML tags (e.g. tel:+12024746243).
- `country_prefix` (string): Returns the phone number country prefix (e.g. +1 for the US).
- `country_code` (string): Returns the phone number country code in ISO 3166-1 alpha-2 format (e.g. US).
- `country_name` (string): Returns the phone number country name (e.g. United States).
- `location` (string): Returns the estimated geographic location of the phone number based on its numbering plan.
- `carrier` (string): Returns the name of the phone number carrier (e.g. Vodafone).
- `line_type` (string): Returns the phone line type, such as Fixed Line, Mobile, Fixed Line or Mobile, VoIP, Toll-Free, Premium Rate, Shared Cost, Personal Number, Pager, UAN, Voicemail, or Unknown.
- `disposable` (boolean): Returns true if the phone number is disposable (temporary).
- `abusive` (boolean): Returns true if the phone number is disposable (temporary), spam or fake.
- `elapsed_ms` (integer): Time taken to process the request, in milliseconds.
---
Source:
# Ping Test API Reference
Perform a ping test to a host from multiple geographic locations.
Service details and pricing: [Ping Test API](https://www.apivoid.com/api/ping-test/)
Endpoint: `POST https://api.apivoid.com/v2/ping-test`
Credit cost: 5 credits per successful request.
## Request example
Query the endpoint via an HTTPS POST request (replace `YOUR_API_KEY_HERE` with your [API key](https://docs.apivoid.com/authentication/)):
```bash
curl -X POST "https://api.apivoid.com/v2/ping-test" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY_HERE" \
-d '{"host": "google.com"}'
```
The same request in PHP:
```php
$host = 'google.com';
$apiKey = 'YOUR_API_KEY_HERE';
$curl = curl_init('https://api.apivoid.com/v2/ping-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(['host' => $host]));
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
- `host` (string; Required): Host to submit, e.g. google.com. Note: ⚠ Government and educational domains are blocked.
## Response example
A successful request returns HTTP `200` with a JSON body:
```json
{
"host": "google.com",
"locations": [
{
"continent_code": "NA",
"continent_name": "North America",
"country_code": "US",
"country_name": "United States",
"city_name": "San Francisco",
"ping_output": {
"host": "google.com",
"ip_address": "142.251.46.238",
"ip_hostname": "sfo03s27-in-f14.1e100.net",
"is_valid_ip": true,
"is_private_ip": false,
"is_loopback_ip": false,
"is_reserved_ip": false,
"packets_sent": 3,
"packets_received": 3,
"percent_packet_loss": 0,
"icmp_requests": [
{
"bytes": 64,
"icmp_seq": 1,
"ttl": 117,
"time_ms": 0.977
},
{
"bytes": 64,
"icmp_seq": 2,
"ttl": 117,
"time_ms": 0.689
},
{
"bytes": 64,
"icmp_seq": 3,
"ttl": 117,
"time_ms": 0.454
}
],
"rtt": {
"min": 0.454,
"avg": 0.706,
"max": 0.977,
"mdev": 0.213
},
"elapsed_ms": 2018
},
"error": ""
},
{
"continent_code": "AS",
"continent_name": "Asia",
"country_code": "IN",
"country_name": "India",
"city_name": "Bangalore",
"ping_output": {
"host": "google.com",
"ip_address": "142.250.70.110",
"ip_hostname": "pnbomb-ac-in-f14.1e100.net",
"is_valid_ip": true,
"is_private_ip": false,
"is_loopback_ip": false,
"is_reserved_ip": false,
"packets_sent": 3,
"packets_received": 3,
"percent_packet_loss": 0,
"icmp_requests": [
{
"bytes": 64,
"icmp_seq": 1,
"ttl": 118,
"time_ms": 18
},
{
"bytes": 64,
"icmp_seq": 2,
"ttl": 118,
"time_ms": 17.5
},
{
"bytes": 64,
"icmp_seq": 3,
"ttl": 118,
"time_ms": 17.3
}
],
"rtt": {
"min": 17.262,
"avg": 17.594,
"max": 17.999,
"mdev": 0.305
},
"elapsed_ms": 2022
},
"error": ""
},
...
],
"elapsed_ms": 3279
}
```
## Response fields
The fields returned in the JSON response:
- `host` (string): Host submitted for the ping test.
- `locations` (array): List of geographic locations with the ping output from each location.
- `locations[n] → continent_code` (string): Continent code (e.g. NA) of the pinging location.
- `locations[n] → continent_name` (string): Continent name of the pinging location.
- `locations[n] → country_code` (string): Country code (e.g. US) of the pinging location.
- `locations[n] → country_name` (string): Country name of the pinging location.
- `locations[n] → city_name` (string): City name of the pinging location.
- `locations[n] → ping_output → host` (string): Host that was pinged.
- `locations[n] → ping_output → ip_address` (string): IP address the host resolved to from this location.
- `locations[n] → ping_output → ip_hostname` (string): Hostname (reverse DNS) of the resolved IP address.
- `locations[n] → ping_output → is_valid_ip` (boolean): Returns true if the resolved IP address is valid.
- `locations[n] → ping_output → is_private_ip` (boolean): Returns true if the resolved IP address is private.
- `locations[n] → ping_output → is_loopback_ip` (boolean): Returns true if the resolved IP address is a loopback address.
- `locations[n] → ping_output → is_reserved_ip` (boolean): Returns true if the resolved IP address is reserved.
- `locations[n] → ping_output → packets_sent` (integer): Number of ICMP packets sent.
- `locations[n] → ping_output → packets_received` (integer): Number of ICMP packets received.
- `locations[n] → ping_output → percent_packet_loss` (integer): Percentage of packets lost.
- `locations[n] → ping_output → icmp_requests` (array): List of ICMP requests; each item has bytes, icmp_seq, ttl and time_ms.
- `locations[n] → ping_output → icmp_requests[n] → bytes` (integer): Number of bytes in the ICMP echo reply.
- `locations[n] → ping_output → icmp_requests[n] → icmp_seq` (integer): Sequence number of the ICMP request.
- `locations[n] → ping_output → icmp_requests[n] → ttl` (integer): Time-to-live (TTL) value in the ICMP reply.
- `locations[n] → ping_output → icmp_requests[n] → time_ms` (float): Round-trip time of the ICMP request, in milliseconds.
- `locations[n] → ping_output → rtt → min` (float): Minimum round-trip time in milliseconds.
- `locations[n] → ping_output → rtt → avg` (float): Average round-trip time in milliseconds.
- `locations[n] → ping_output → rtt → max` (float): Maximum round-trip time in milliseconds.
- `locations[n] → ping_output → rtt → mdev` (float): Round-trip time standard deviation in milliseconds.
- `locations[n] → ping_output → elapsed_ms` (integer): Time taken by the ping test from this location, in milliseconds.
- `locations[n] → error` (string): Error message if the ping from this location failed.
- `elapsed_ms` (integer): Time taken to process the request, in milliseconds.
---
Source:
# Port Scan API Reference
Scan common TCP ports of an IP and get the open/closed status for each port.
Service details and pricing: [Port Scan API](https://www.apivoid.com/api/port-scan/)
Endpoint: `POST https://api.apivoid.com/v2/port-scan`
Credit cost: 5 credits per successful request.
## Request example
Query the endpoint via an HTTPS POST request (replace `YOUR_API_KEY_HERE` with your [API key](https://docs.apivoid.com/authentication/)):
```bash
curl -X POST "https://api.apivoid.com/v2/port-scan" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY_HERE" \
-d '{"ip": "1.2.3.4"}'
```
The same request in PHP:
```php
$ip = '1.2.3.4';
$apiKey = 'YOUR_API_KEY_HERE';
$curl = curl_init('https://api.apivoid.com/v2/port-scan');
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(['ip' => $ip]));
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
- `ip` (string; Required): IPv4 or IPv6 address to scan.
### Optional
- `top_ports` (integer; Default: 20): Can be 20 or 100: scan the top 20 or the top 100 most common ports.
- `custom_ports` (string): Set custom ports to scan, e.g. 21,22,23,53,80,443 (no spaces).
## Response example
A successful request returns HTTP `200` with a JSON body:
```json
{
"ip": "1.2.3.4",
"open_ports": 4,
"scanned_ports": 20,
"ports": [
{
"port": 21,
"proto": "tcp",
"status": "open",
"service": "ftp"
},
{
"port": 22,
"proto": "tcp",
"status": "open",
"service": "ssh"
},
{
"port": 23,
"proto": "tcp",
"status": "closed",
"service": "telnet"
},
{
"port": 25,
"proto": "tcp",
"status": "closed",
"service": "smtp"
},
{
"port": 53,
"proto": "tcp",
"status": "closed",
"service": "domain"
},
{
"port": 80,
"proto": "tcp",
"status": "open",
"service": "http"
},
{
"port": 110,
"proto": "tcp",
"status": "closed",
"service": "pop3"
},
{
"port": 111,
"proto": "tcp",
"status": "closed",
"service": "rpcbind"
},
{
"port": 135,
"proto": "tcp",
"status": "closed",
"service": "msrpc"
},
{
"port": 139,
"proto": "tcp",
"status": "closed",
"service": "netbios-ssn"
},
{
"port": 143,
"proto": "tcp",
"status": "closed",
"service": "imap"
},
{
"port": 443,
"proto": "tcp",
"status": "open",
"service": "https"
},
{
"port": 445,
"proto": "tcp",
"status": "closed",
"service": "microsoft-ds"
},
{
"port": 993,
"proto": "tcp",
"status": "closed",
"service": "imaps"
},
{
"port": 995,
"proto": "tcp",
"status": "closed",
"service": "pop3s"
},
{
"port": 1723,
"proto": "tcp",
"status": "closed",
"service": "pptp"
},
{
"port": 3306,
"proto": "tcp",
"status": "closed",
"service": "mysql"
},
{
"port": 3389,
"proto": "tcp",
"status": "closed",
"service": "ms-wbt-server"
},
{
"port": 5900,
"proto": "tcp",
"status": "closed",
"service": "vnc"
},
{
"port": 8080,
"proto": "tcp",
"status": "closed",
"service": "http-proxy"
}
],
"elapsed_ms": 185
}
```
## Response fields
The fields returned in the JSON response:
- `ip` (string): IP address submitted for the port scan.
- `open_ports` (integer): Number of open ports found.
- `scanned_ports` (integer): Number of ports scanned.
- `ports` (array): List of scanned ports with their status.
- `ports[n] → port` (integer): Port number scanned.
- `ports[n] → proto` (string): Protocol of the scanned port, e.g. tcp.
- `ports[n] → status` (string): Status of the port, can be open/closed.
- `ports[n] → service` (string): Common service associated with the port, e.g. ftp, ssh, https.
- `elapsed_ms` (integer): Time taken to process the request, in milliseconds.
---
Source:
# QR Scan API Reference
Scan a QR code image (submitted as base64) and extract its decoded content.
Service details and pricing: [QR Scan API](https://www.apivoid.com/api/qr-scan/)
Endpoint: `POST https://api.apivoid.com/v2/qr-scan`
Credit cost: 2 credits per successful request.
## Request example
Query the endpoint via an HTTPS POST request (replace `YOUR_API_KEY_HERE` with your [API key](https://docs.apivoid.com/authentication/)):
```bash
curl -X POST "https://api.apivoid.com/v2/qr-scan" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY_HERE" \
-d '{"image_base64": "RW5jb2RlIGFuZCBkZWNv..."}'
```
The same request in PHP:
```php
$imageBase64 = 'RW5jb2RlIGFuZCBkZWNv...';
$apiKey = 'YOUR_API_KEY_HERE';
$curl = curl_init('https://api.apivoid.com/v2/qr-scan');
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(['image_base64' => $imageBase64]));
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
- `image_base64` (string; Required): Base64-encoded image file content (max 2.5 MB).
## Response example
A successful request returns HTTP `200` with a JSON body:
```json
{
"qrcode_found": true,
"extracted_data": "https://www.possible-phishing-url.com/bank/login",
"action_type": "URL",
"ioc": {
"urls": [
"https://www.possible-phishing-url.com/bank/login"
],
"emails": [],
"phone_numbers": [],
"bitcoin_addresses": []
},
"elapsed_ms": 63
}
```
## Response fields
The fields returned in the JSON response:
- `qrcode_found` (boolean): Returns true if a QR code was found in the image.
- `extracted_data` (string): Data extracted from the QR code.
- `action_type` (string): Type of action encoded in the QR code, e.g. URL, EMAIL, PHONE, TEXT.
- `ioc → urls` (array): URLs found in the QR code data.
- `ioc → emails` (array): Email addresses found in the QR code data.
- `ioc → phone_numbers` (array): Phone numbers found in the QR code data.
- `ioc → bitcoin_addresses` (array): Bitcoin addresses found in the QR code data.
- `elapsed_ms` (integer): Time taken to process the request, in milliseconds.
---
Source:
# Reverse IP API Reference
Find domains that share the same IPv4 address (DNS A record).
Service details and pricing: [Reverse IP API](https://www.apivoid.com/api/reverse-ip/)
Endpoint: `POST https://api.apivoid.com/v2/reverse-ip`
Credit cost: 50 credits per successful request.
## Request example
Query the endpoint via an HTTPS POST request (replace `YOUR_API_KEY_HERE` with your [API key](https://docs.apivoid.com/authentication/)):
```bash
curl -X POST "https://api.apivoid.com/v2/reverse-ip" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY_HERE" \
-d '{"ip": "46.105.204.23"}'
```
The same request in PHP:
```php
$ip = '46.105.204.23';
$apiKey = 'YOUR_API_KEY_HERE';
$curl = curl_init('https://api.apivoid.com/v2/reverse-ip');
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(['ip' => $ip]));
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);
}
```
Results are paginated. By default the first page is returned; to request another page, pass `page_num`:
```bash
curl -X POST "https://api.apivoid.com/v2/reverse-ip" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY_HERE" \
-d '{
"ip": "46.105.204.23",
"page_num": 2
}'
```
## Request parameters
### Required
- `ip` (string; Required): IPv4 address to submit, e.g. 46.105.204.23.
### Optional
- `page_num` (integer; Default: 1): Page of results to return; each page contains up to 500 domains. If `records_num` in the response is 500, request the next page to get more domains.
## Response example
A successful request returns HTTP `200` with a JSON body:
```json
{
"ip": "46.105.204.23",
"page_num": 1,
"records_num": 176,
"domains": [
{
"name": "maevadigitalactive.com",
"updated": "2025-01-22 11:48:31"
},
{
"name": "textileblue.be",
"updated": "2025-01-22 10:42:55"
},
{
"name": "testdeqigratuit.com",
"updated": "2025-01-20 10:52:51"
},
{
"name": "consorcioserrano.es",
"updated": "2025-01-20 09:58:51"
},
{
"name": "occitanie-films.fr",
"updated": "2025-01-19 10:47:44"
},
{
"name": "fisheyestudio.it",
"updated": "2025-01-17 08:23:30"
},
{
"name": "blogfrenchfluent.com",
"updated": "2025-01-16 13:11:28"
},
{
"name": "shop.movensee.com",
"updated": "2025-01-15 12:20:23"
},
{
"name": "monsuivilogement.fr",
"updated": "2025-01-15 12:12:59"
},
{
"name": "larchebologna.it",
"updated": "2025-01-13 12:23:50"
},
{
"name": "reliablecounter.com",
"updated": "2025-01-13 12:20:38"
},
{
"name": "egliseverte.org",
"updated": "2025-01-13 10:48:20"
},
{
"name": "canada-culture.org",
"updated": "2025-01-12 10:26:23"
},
{
"name": "pizz-arco.fr",
"updated": "2025-01-11 11:46:12"
},
{
"name": "dsavocats.com",
"updated": "2025-01-10 10:32:48"
},
...
],
"elapsed_ms": 620
}
```
## Response fields
The fields returned in the JSON response:
- `ip` (string): IP address submitted for the reverse IP lookup.
- `page_num` (integer): Page number of the results returned.
- `records_num` (integer): Number of domains returned on the current page (max 500). If it is 500, there may be more domains on the next page; a lower value means this is the last page.
- `domains` (array): List of domains hosted on the IP address.
- `domains[n] → name` (string): Domain name hosted on the IP address.
- `domains[n] → updated` (string): Date and time of when the domain record was last seen on the IP.
- `elapsed_ms` (integer): Time taken to process the request, in milliseconds.
---
Source:
# Screenshot API Reference
Capture a screenshot of any web page in a real browser, with full-page capture, device emulation, dark mode, custom viewport and headers, and many other options.
Service details and pricing: [Screenshot API](https://www.apivoid.com/api/screenshot/)
Endpoint: `POST https://api.apivoid.com/v2/screenshot`
Credit cost: 20 credits per successful request.
## Request example
Query the endpoint via an HTTPS POST request (replace `YOUR_API_KEY_HERE` with your [API key](https://docs.apivoid.com/authentication/)):
```bash
curl -X POST "https://api.apivoid.com/v2/screenshot" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY_HERE" \
-d '{"url": "https://apple.com/"}'
```
The same request in PHP:
```php
$url = 'https://apple.com/';
$apiKey = 'YOUR_API_KEY_HERE';
$curl = curl_init('https://api.apivoid.com/v2/screenshot');
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);
// Save the "base64_file" data as a PNG file
if (isset($responseData['rendered_file']['base64_file'])) {
$saveAs = __DIR__ . '/screenshot.png';
file_put_contents($saveAs, base64_decode($responseData['rendered_file']['base64_file']));
}
} else {
print_r('An error occurred: '.$response);
}
```
## Request parameters
### Required
- `url` (string; Required): URL to submit, e.g. `https://apple.com/`.
### Optional
- `image_type` (string; Default: png): Screenshot image type: `png`, `jpeg`, `webp`, `avif`.
- `full_page` (boolean; Default: false): Take a full page screenshot (max 15000px height).
- `viewport_width` (integer; Default: 1920): Browser viewport width in pixels (max 5000).
- `viewport_height` (integer; Default: 1080): Browser viewport height in pixels (max 10000).
- `image_width` (integer): Thumbnail image width in pixels (max 5000).
- `image_height` (integer): Thumbnail image height in pixels (max 10000).
- `add_url_bar` (boolean; Default: false; New): Include the browser's address bar in the screenshot.
- `user_agent` (string; Default: desktop): Can be `desktop` (default, a random desktop user agent) or `mobile`.
- `accept_language` (string; Default: en-US): Change the Accept-Language HTTP header, format like `en-US`.
- `basic_auth_username` (string): Set username for Basic Authentication.
- `basic_auth_password` (string): Set password for Basic Authentication.
- `authorization_bearer` (string): Set the authorization bearer token.
- `custom_header` (string): A custom header, e.g. `X-key: 690d1f9e-5a53-45ad-997d-a23143a0d068`.
- `disable_js` (boolean; Default: false): Disable JavaScript.
- `disable_popups` (boolean; Default: true): Disable alerts, cookie consents and confirmation dialogs.
- `disable_images` (boolean; Default: false): Disable loading of images.
- `disable_ads` (boolean; Default: true): Disable advertisements.
- `disable_fonts` (boolean; Default: false): Disable loading of custom fonts.
- `omit_background` (boolean; Default: false): Omit the page background.
- `grayscale` (boolean; Default: false): The screenshot image will be grayscaled.
- `emulate_device` (string): Can be `ipad`, `ipad_landscape`, `iphone5`, `iphone5_landscape`, `iphone8`, `iphone8_landscape`, `iphone13`, `iphone13_landscape`.
- `dark_mode` (boolean; Default: false): Enable dark mode, if available on the web page.
- `delay` (integer; Default: 0): Wait N seconds (max 10) before taking the screenshot.
## Response example
A successful request returns HTTP `200` with a JSON body:
```json
{
"url": "https://apple.com/",
"rendered_file": {
"format": "PNG",
"date_time_utc": "2024-11-29 19:00:32",
"base64_file": "iVBORw0KGgoAAAANSUhEUgAAB4AAAAQ4CAIAAABnsVYUAAAAAXNSR0IArs4c6QAAIABJREFUeJzs3XdUFNfbB/C7dJbeu4ICQUERBLEgWLA37KKoEbFrrKiINbH3rlhQsWHABhqxgQiKCg...",
"image_width": 1920,
"image_height": 1080,
"file_size_readable": "344.53 KB",
"file_size_bytes": 352795
},
"http_response": {
"final_url": "https://www.apple.com/",
"status_code": 200,
"content_type": "text/html",
"page_content_empty": false,
"ip": "69.192.160.210"
},
"html_info": {
"title": "Apple",
"description": "Discover the innovative world of Apple and shop everything iPhone, iPad, Apple Watch, Mac, and Apple TV, plus explore accessories, entertainment, and expert device support.",
"og_image": "https://www.apple.com/ac/structured-data/images/open_graph_logo.png?202110180743",
"icon": "",
"og_site_name": "Apple",
"ld_organization": "Apple",
"canonical": "https://www.apple.com/",
"robots": "",
"twitter_site": "",
"lang": "en-US"
},
"elapsed_ms": 5763
}
```
## Response fields
The fields returned in the JSON response:
- `url` (string): URL submitted for the screenshot.
- `rendered_file → format` (string): Format of the rendered file, e.g. PNG.
- `rendered_file → date_time_utc` (string): Date and time (UTC) of when the screenshot was captured.
- `rendered_file → base64_file` (string): The screenshot image encoded in base64.
- `rendered_file → image_width` (integer): Width of the screenshot in pixels.
- `rendered_file → image_height` (integer): Height of the screenshot in pixels.
- `rendered_file → file_size_readable` (string): File size in human-readable format, e.g. 344.53 KB.
- `rendered_file → file_size_bytes` (integer): File size in bytes.
- `http_response → final_url` (string): Final URL after following redirects.
- `http_response → status_code` (integer): HTTP status code returned by the server.
- `http_response → content_type` (string): Content type of the page, e.g. text/html.
- `http_response → page_content_empty` (boolean): Returns true if the page content is empty.
- `http_response → ip` (string): IP address of the server that served the page.
- `html_info → title` (string): Title of the page.
- `html_info → description` (string): Meta description of the page.
- `html_info → og_image` (string): Open Graph image URL of the page.
- `html_info → icon` (string): Favicon URL of the page.
- `html_info → og_site_name` (string): Open Graph site name of the page.
- `html_info → ld_organization` (string): Organization name found in JSON-LD structured data.
- `html_info → canonical` (string): Canonical URL of the page.
- `html_info → robots` (string): Robots meta tag of the page.
- `html_info → twitter_site` (string): Twitter site handle of the page.
- `html_info → lang` (string): Language declared by the page, e.g. en-US.
- `elapsed_ms` (integer): Time taken to process the request, in milliseconds.
---
Source:
# Security Headers API Reference
Analyze the HTTP security headers of a URL: check which security headers are present, missing, or misconfigured, with details for each header, and get a security score.
Service details and pricing: [Security Headers API](https://www.apivoid.com/api/security-headers/)
Endpoint: `POST https://api.apivoid.com/v2/security-headers`
Credit cost: 2 credits per successful request.
## Request example
Query the endpoint via an HTTPS POST request (replace `YOUR_API_KEY_HERE` with your [API key](https://docs.apivoid.com/authentication/)):
```bash
curl -X POST "https://api.apivoid.com/v2/security-headers" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY_HERE" \
-d '{"url": "https://stripe.com/"}'
```
The same request in PHP:
```php
$url = 'https://stripe.com/';
$apiKey = 'YOUR_API_KEY_HERE';
$curl = curl_init('https://api.apivoid.com/v2/security-headers');
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` (string; Required): URL to submit, e.g. `https://stripe.com/`.
## Response example
A successful request returns HTTP `200` with a JSON body:
```json
{
"url": "https://stripe.com/",
"final_url": "https://stripe.com/en-fi",
"ip": "54.76.53.164",
"status_code": 200,
"response_note": "",
"connection_error": false,
"access_restricted": false,
"response_headers": {
"content-security-policy": [
"base-uri 'none'; child-src 'none'; connect-src https://c.increment.com https://c.stripe.dev https://c.stripe.global https://c.stripe.partners blob: https://b.stripecdn.com https://errors.stripe.com https://ext.stripe.com https://r.stripe.com https://stripe-images.s3.us-west-1.amazonaws.com https://stripe.com 'self'; default-src 'none'; font-src https://b.stripecdn.com 'self'; form-action https://stripe.com 'self'; frame-ancestors https://app.contentful.com 'self'; frame-src https://b.stripecdn.com https://js.stripe.com https://support-conversations.stripe.com 'self'; img-src data: https://assets.ctfassets.net https://assets.stripeassets.com https://b.stripecdn.com https://images.ctfassets.net https://images.stripeassets.com https://q.stripe.com 'self'; manifest-src 'none'; media-src https://assets.ctfassets.net https://assets.stripeassets.com https://b.stripecdn.com https://videos.ctfassets.net https://videos.stripeassets.com 'self'; object-src 'none'; script-src https://b.stripecdn.com https://js.stripe.com 'self' 'sha256-3aWvb9tRBjmz1OjR3n7mwiTm94+s4iki4mMZF82asmc=' 'sha256-5LtzXhT7UFn+GqP5pKEMGL08UNZsrzANHFEBW/mQHGw=' 'sha256-beLzNcen8LrazzSCRjAapoIMTgJI0osPWGNSX7aK6lc=' 'sha256-cCM0Z4lzGkzQnmbdVw+ouz0JRawyaKcZ4yiqzqYS7ek=' 'sha256-vTifGUJH6hJYTvstw4xJ4xfr/vE0ELkOV4GpCumyqfg=' 'sha256-KxhSaxKB5RFTQsqfRwp+zG7iLjvMrTAySqnSvWlqct0=' 'sha256-tMuJ8c00j54yuxogrdIJeGhNVB350dc56i969XRz/Mc=' 'sha256-aEFSvCaVnb2wNwuO3IzA8J44RdTKt6vms9beA7BcCYg=' 'sha256-0SWEc2BfR2o77i2vUiNNIrFKQkjc2Ujsr2hlfZ6oUek=' 'report-sample'; style-src https://b.stripecdn.com 'self' 'unsafe-inline'; worker-src https://b.stripecdn.com 'self'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=s19Fnq91o9H4NDVx-N7qNHjvHjJd5CM9iCDBgcEd6Ky75-HIBDtVZY0Veb2cUyQ%3D"
],
"content-type": [
"text/html; charset=utf-8"
],
"cross-origin-opener-policy": [
"same-origin-allow-popups; report-to=\"wsp_coop\""
],
"cross-origin-opener-policy-report-only": [
"same-origin-allow-popups; report-to=\"wsp_coop\""
],
"date": [
"Tue, 17 Mar 2026 15:46:41 GMT"
],
"referrer-policy": [
"no-referrer-when-downgrade"
],
"report-to": [
"{\"group\":\"wsp_coop\",\"max_age\":8640,\"endpoints\":[{\"url\":\"https://q.stripe.com/coop-report?s=s19Fnq91o9H4NDVx-N7qNHjvHjJd5CM9iCDBgcEd6Ky75-HIBDtVZY0Veb2cUyQ=\"}],\"include_subdomains\":true},{\"group\":\"wsp_coep\",\"max_age\":8640,\"endpoints\":[{\"url\":\"https://q.stripe.com/coep-report?s=s19Fnq91o9H4NDVx-N7qNHjvHjJd5CM9iCDBgcEd6Ky75-HIBDtVZY0Veb2cUyQ=\"}],\"include_subdomains\":true}"
],
"reporting-endpoints": [
"coop=\"https://q.stripe.com/coop-report\", wsp_coop=\"https://q.stripe.com/coop-report?s=s19Fnq91o9H4NDVx-N7qNHjvHjJd5CM9iCDBgcEd6Ky75-HIBDtVZY0Veb2cUyQ=\",wsp_coep=\"https://q.stripe.com/coep-report?s=s19Fnq91o9H4NDVx-N7qNHjvHjJd5CM9iCDBgcEd6Ky75-HIBDtVZY0Veb2cUyQ=\""
],
"server": [
"nginx"
],
"strict-transport-security": [
"max-age=63072000; includeSubDomains; preload"
],
"x-content-type-options": [
"nosniff"
],
"x-frame-options": [
"SAMEORIGIN"
],
"x-mkt-cache": [
"HIT"
],
"x-stripe-proxy-response": [
"upstream"
],
"x-stripe-server-rpc-duration-micros": [
"44130"
],
"x-wc": [
"ABCDEFGHIJ"
]
},
"security_headers": [
{
"name": "strict-transport-security",
"reference": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security",
"found": true,
"value": [
"max-age=63072000; includeSubDomains; preload"
],
"issues": []
},
{
"name": "content-security-policy",
"reference": "https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP",
"found": true,
"value": [
"base-uri 'none'; child-src 'none'; connect-src https://c.increment.com https://c.stripe.dev https://c.stripe.global https://c.stripe.partners blob: https://b.stripecdn.com https://errors.stripe.com https://ext.stripe.com https://r.stripe.com https://stripe-images.s3.us-west-1.amazonaws.com https://stripe.com 'self'; default-src 'none'; font-src https://b.stripecdn.com 'self'; form-action https://stripe.com 'self'; frame-ancestors https://app.contentful.com 'self'; frame-src https://b.stripecdn.com https://js.stripe.com https://support-conversations.stripe.com 'self'; img-src data: https://assets.ctfassets.net https://assets.stripeassets.com https://b.stripecdn.com https://images.ctfassets.net https://images.stripeassets.com https://q.stripe.com 'self'; manifest-src 'none'; media-src https://assets.ctfassets.net https://assets.stripeassets.com https://b.stripecdn.com https://videos.ctfassets.net https://videos.stripeassets.com 'self'; object-src 'none'; script-src https://b.stripecdn.com https://js.stripe.com 'self' 'sha256-3aWvb9tRBjmz1OjR3n7mwiTm94+s4iki4mMZF82asmc=' 'sha256-5LtzXhT7UFn+GqP5pKEMGL08UNZsrzANHFEBW/mQHGw=' 'sha256-beLzNcen8LrazzSCRjAapoIMTgJI0osPWGNSX7aK6lc=' 'sha256-cCM0Z4lzGkzQnmbdVw+ouz0JRawyaKcZ4yiqzqYS7ek=' 'sha256-vTifGUJH6hJYTvstw4xJ4xfr/vE0ELkOV4GpCumyqfg=' 'sha256-KxhSaxKB5RFTQsqfRwp+zG7iLjvMrTAySqnSvWlqct0=' 'sha256-tMuJ8c00j54yuxogrdIJeGhNVB350dc56i969XRz/Mc=' 'sha256-aEFSvCaVnb2wNwuO3IzA8J44RdTKt6vms9beA7BcCYg=' 'sha256-0SWEc2BfR2o77i2vUiNNIrFKQkjc2Ujsr2hlfZ6oUek=' 'report-sample'; style-src https://b.stripecdn.com 'self' 'unsafe-inline'; worker-src https://b.stripecdn.com 'self'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=s19Fnq91o9H4NDVx-N7qNHjvHjJd5CM9iCDBgcEd6Ky75-HIBDtVZY0Veb2cUyQ%3D"
],
"issues": []
},
{
"name": "x-content-type-options",
"reference": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options",
"found": true,
"value": [
"nosniff"
],
"issues": []
},
{
"name": "x-xss-protection",
"reference": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection",
"found": false,
"value": [],
"issues": [
{
"code": "MISSING_X_XSS_PROTECTION",
"message": "X-XSS-Protection header is missing. This is acceptable as the header is deprecated.",
"type": "information"
}
]
},
{
"name": "referrer-policy",
"reference": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy",
"found": true,
"value": [
"no-referrer-when-downgrade"
],
"issues": [
{
"code": "REFERRER_POLICY_WEAK",
"message": "Referrer-Policy 'no-referrer-when-downgrade' may leak referrer to third-party origins over HTTPS.",
"type": "information"
}
]
},
{
"name": "permissions-policy",
"reference": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Permissions-Policy",
"found": false,
"value": [],
"issues": [
{
"code": "MISSING_PERMISSIONS_POLICY",
"message": "Permissions-Policy header is missing.",
"type": "error"
}
]
},
{
"name": "x-frame-options",
"reference": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options",
"found": true,
"value": [
"SAMEORIGIN"
],
"issues": []
},
{
"name": "cross-origin-opener-policy",
"reference": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Opener-Policy",
"found": true,
"value": [
"same-origin-allow-popups; report-to=\"wsp_coop\""
],
"issues": []
},
{
"name": "cross-origin-embedder-policy",
"reference": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Embedder-Policy",
"found": false,
"value": [],
"issues": [
{
"code": "MISSING_COEP",
"message": "Cross-Origin-Embedder-Policy header is missing.",
"type": "information"
}
]
},
{
"name": "cross-origin-resource-policy",
"reference": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Resource-Policy",
"found": false,
"value": [],
"issues": [
{
"code": "MISSING_CORP",
"message": "Cross-Origin-Resource-Policy header is missing.",
"type": "information"
}
]
}
],
"cors": {
"present": false,
"configuration": {
"allow_origin": "",
"allow_credentials": false,
"allow_methods": [],
"allow_headers": [],
"expose_headers": [],
"max_age": 0
},
"issues": []
},
"information_leakage": [
{
"name": "server",
"found": true,
"value": [
"nginx"
],
"issues": []
}
],
"duplicate_headers": [],
"cookies": [],
"summary": {
"security_headers": {
"checked": 10,
"found": 6,
"missing": 4
},
"issues": {
"errors": 1,
"warnings": 0,
"information": 4
}
},
"score": 94,
"max_score": 100,
"grade": "A",
"elapsed_ms": 524
}
```
## Response fields
The fields returned in the JSON response:
- `url` (string): URL submitted for the security headers check.
- `final_url` (string): Final URL after following redirects.
- `ip` (string): IP address of the server that served the page.
- `status_code` (integer): HTTP status code returned by the server.
- `response_note` (string): Additional note about the HTTP response, if any.
- `connection_error` (boolean): Returns true if the connection to the server failed.
- `access_restricted` (boolean): Returns true if access to the page is restricted (e.g. by a firewall or captcha).
- `response_headers` (object): HTTP response headers returned by the server, keyed by lowercase header name.
- `security_headers` (array): List of security headers checked with their status and issues.
- `security_headers[n] → name` (string): Name of the security header, lowercase, e.g. content-security-policy.
- `security_headers[n] → reference` (string): Reference URL with documentation about the header.
- `security_headers[n] → found` (boolean): Returns true if the security header is present.
- `security_headers[n] → value` (array): Values of the security header, if present.
- `security_headers[n] → issues` (array): Issues found with the header configuration; each item has code, message and type.
- `security_headers[n] → issues[n] → code` (string): Machine-readable issue code, e.g. MISSING_CORP.
- `security_headers[n] → issues[n] → message` (string): Human-readable description of the issue.
- `security_headers[n] → issues[n] → type` (string): Issue severity: error, warning or information.
- `cors → present` (boolean): Returns true if CORS headers are present.
- `cors → configuration → allow_origin` (string): Value of the Access-Control-Allow-Origin header.
- `cors → configuration → allow_credentials` (boolean): Returns true if Access-Control-Allow-Credentials is enabled.
- `cors → configuration → allow_methods` (array): HTTP methods allowed by the CORS configuration.
- `cors → configuration → allow_headers` (array): Headers allowed by the CORS configuration.
- `cors → configuration → expose_headers` (array): Headers exposed by the CORS configuration.
- `cors → configuration → max_age` (integer): Max age of the CORS preflight cache in seconds.
- `cors → issues` (array): Issues found with the CORS configuration.
- `information_leakage` (array): Headers that may leak information about the server or technology stack.
- `information_leakage[n] → name` (string): Name of the header, lowercase, e.g. server, x-powered-by.
- `information_leakage[n] → found` (boolean): Returns true if the header is present.
- `information_leakage[n] → value` (array): Values of the header, if present.
- `information_leakage[n] → issues` (array): Issues found related to the information disclosed.
- `duplicate_headers` (array): Headers that appear more than once in the response.
- `cookies` (array): Cookies set by the server with their security attributes.
- `summary → security_headers → checked` (integer): Number of security headers checked.
- `summary → security_headers → found` (integer): Number of security headers found.
- `summary → security_headers → missing` (integer): Number of security headers missing.
- `summary → issues → errors` (integer): Number of issues with error severity.
- `summary → issues → warnings` (integer): Number of issues with warning severity.
- `summary → issues → information` (integer): Number of issues with informational severity.
- `score` (integer): Security headers score of the page (0 bad, 100 good).
- `max_score` (integer): Maximum achievable score, e.g. 100.
- `grade` (string): Grade assigned based on the score, e.g. A+, A, A-, B+, B, B-, C+, C, C-, D+, D, D-, F.
- `elapsed_ms` (integer): Time taken to process the request, in milliseconds.
---
Source:
# Site Trustworthiness API Reference
Get a trust score of a website, useful to spot potentially fraudulent and insecure web shops, with detailed security and content checks.
Service details and pricing: [Site Trustworthiness API](https://www.apivoid.com/api/site-trustworthiness/)
Endpoint: `POST https://api.apivoid.com/v2/site-trust`
Credit cost: 10 credits per successful request.
## Request example
Query the endpoint via an HTTPS POST request (replace `YOUR_API_KEY_HERE` with your [API key](https://docs.apivoid.com/authentication/)):
```bash
curl -X POST "https://api.apivoid.com/v2/site-trust" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY_HERE" \
-d '{"host": "amazon.com"}'
```
The same request in PHP:
```php
$host = 'amazon.com';
$apiKey = 'YOUR_API_KEY_HERE';
$curl = curl_init('https://api.apivoid.com/v2/site-trust');
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(['host' => $host]));
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
- `host` (string; Required): Host to submit, e.g. amazon.com (without the www). Note: ⚠ Government and educational domains are blocked.
## Response example
A successful request returns HTTP `200` with a JSON body:
```json
{
"host": "amazon.com",
"dns_records": {
"ns": [
{
"target": "ns1.amzndns.org",
"ip": "156.154.66.10",
"country_code": "US",
"country_name": "United States of America",
"isp": "Vercara LLC"
},
{
"target": "ns2.amzndns.co.uk",
"ip": "204.74.120.1",
"country_code": "US",
"country_name": "United States of America",
"isp": "Vercara LLC"
},
{
"target": "ns2.amzndns.com",
"ip": "156.154.68.10",
"country_code": "US",
"country_name": "United States of America",
"isp": "Vercara LLC"
},
{
"target": "ns2.amzndns.net",
"ip": "156.154.69.10",
"country_code": "US",
"country_name": "United States of America",
"isp": "Vercara LLC"
},
{
"target": "ns2.amzndns.org",
"ip": "156.154.150.1",
"country_code": "US",
"country_name": "United States of America",
"isp": "Vercara LLC"
},
{
"target": "ns1.amzndns.co.uk",
"ip": "156.154.67.10",
"country_code": "US",
"country_name": "United States of America",
"isp": "Vercara LLC"
},
{
"target": "ns1.amzndns.com",
"ip": "156.154.64.10",
"country_code": "US",
"country_name": "United States of America",
"isp": "Vercara LLC"
}
],
"mx": [
{
"target": "amazon-smtp.amazon.com",
"ip": "52.28.202.117",
"country_code": "DE",
"country_name": "Germany",
"isp": "A100 ROW GmbH"
}
],
"cname": ""
},
"domain_blacklist": {
"engines": {
"0": {
"name": "ANJ Blocked Sites",
"detected": false,
"reference": "https://anj.fr/",
"confidence": "high",
"elapsed_ms": 0
},
"1": {
"name": "AntiSocial Blacklist",
"detected": false,
"reference": "https://theantisocialengineer.com/",
"confidence": "high",
"elapsed_ms": 0
},
"2": {
"name": "APVA",
"detected": false,
"reference": "https://www.antiphish.org/",
"confidence": "high",
"elapsed_ms": 0
},
"3": {
"name": "Artists Against 419",
"detected": false,
"reference": "https://wiki.aa419.org/index.php/Main_Page",
"confidence": "high",
"elapsed_ms": 0
},
"4": {
"name": "AZORult Tracker",
"detected": false,
"reference": "https://azorult-tracker.net/",
"confidence": "high",
"elapsed_ms": 0
},
"5": {
"name": "Badbitcoin",
"detected": false,
"reference": "https://badbitcoin.org/",
"confidence": "high",
"elapsed_ms": 0
},
"6": {
"name": "Bambenek Consulting",
"detected": false,
"reference": "https://www.bambenekconsulting.com/",
"confidence": "high",
"elapsed_ms": 0
},
"7": {
"name": "CERT Polska",
"detected": false,
"reference": "https://www.cert.pl/",
"confidence": "high",
"elapsed_ms": 0
},
"8": {
"name": "COI CZ",
"detected": false,
"reference": "https://coi.gov.cz/",
"confidence": "high",
"elapsed_ms": 0
},
"9": {
"name": "CryptoScamDB",
"detected": false,
"reference": "https://cryptoscamdb.org/",
"confidence": "high",
"elapsed_ms": 0
},
"10": {
"name": "EtherAddressLookup",
"detected": false,
"reference": "https://github.com/409H/EtherAddressLookup/",
"confidence": "high",
"elapsed_ms": 0
},
...
},
"detections": 0,
"engines_count": 42,
"detection_rate": "0%",
"scan_time_ms": 120
},
"ecommerce_platform": {
"is_shopify": false,
"is_woocommerce": false,
"is_opencart": false,
"is_prestashop": false,
"is_magento": false,
"is_zencart": false,
"is_other": false
},
"geo_location": {
"countries": [
"US",
"DE"
]
},
"html_info": {
"title": "Amazon.com. Spend less. Smile more.",
"description": "Free shipping on millions of items. Get the best of Shopping and Entertainment with Prime. Enjoy low prices and great deals on the largest selection of everyday essentials and other products, including fashion, home, beauty, electronics, Alexa Devices, sporting goods, toys, automotive, pets, baby, books, video games, musical instruments, office supplies, and more.",
"keywords": "Amazon, Amazon.com, Books, Online Shopping, Book Store, Magazine, Subscription, Music, CDs, DVDs, Videos, Electronics, Video Games, Computers, Cell Phones, Toys, Games, Apparel, Accessories, Shoes, Jewelry, Watches, Office Products, Sports & Outdoors, Sporting Goods, Baby Products, Health, Personal Care, Beauty, Home, Garden, Bed & Bath, Furniture, Tools, Hardware, Vacuums, Outdoor Living, Automotive Parts, Pet Supplies, Broadband, DSL",
"robots": "",
"canonical": "https://www.amazon.com/",
"og_image": "https://m.media-amazon.com/images/I/31epF-8N9LL.png",
"article_publisher": "",
"og_site_name": "",
"twitter_site": "",
"generator": "",
"ld_organization": "",
"lang": "en-us"
},
"redirection": {
"found": false,
"external": false,
"url": ""
},
"response_headers": {
"code": 200,
"status": "HTTP/2 200",
"content-type": "text/html",
"server": "Server",
"date": "Tue, 23 Dec 2025 16:13:51 GMT",
"x-amz-rid": "E158SRJTEWGJ2DDFSFZ4",
"set-cookie": "skin=noskin; path=/; domain=.amazon.com",
"vary": "Content-Type,Accept-Encoding,User-Agent",
"last-modified": "Tue, 23 Dec 2025 16:13:48 GMT",
"etag": "\"178e45-646a0d4277060-gzip\"",
"accept-ranges": "bytes",
"content-encoding": "gzip",
"strict-transport-security": "max-age=47474747; includeSubDomains; preload",
"x-frame-options": "SAMEORIGIN",
"x-cache": "Miss from cloudfront",
"via": "1.1 d31c4c288ffef497f9a848a4bcb51e54.cloudfront.net (CloudFront)",
"x-amz-cf-pop": "ATL58-P3",
"alt-svc": "h3=\":443\"; ma=86400",
"x-amz-cf-id": "gKbTOmeZcd0lzdM2oZoxnX0vlyLpN0x8zH3z1E-hZ0haAS0ilEubwg=="
},
"security_checks": {
"is_suspended_site": false,
"is_most_abused_tld": false,
"is_robots_noindex": false,
"is_website_accessible": true,
"is_empty_page_content": false,
"is_redirect_to_search_engine": false,
"is_suspicious_redirect": false,
"http_status_code": 200,
"is_http_status_error": false,
"is_http_server_error": false,
"is_http_client_error": false,
"is_empty_page_title": false,
"is_ipv6_enabled": false,
"is_domain_blacklisted": false,
"is_suspicious_domain": false,
"is_sinkholed_domain": false,
"is_http_redirected_to_https": true,
"is_directory_listing": false,
"is_domain_ipv4_assigned": true,
"is_domain_ipv4_private": false,
"is_domain_ipv4_loopback": false,
"is_domain_ipv4_reserved": false,
"is_domain_ipv4_valid": true,
"is_uncommon_host_length": false,
"is_uncommon_dash_char_count": false,
"is_uncommon_dot_char_count": false,
"is_email_configured": true,
"is_email_spoofable": true,
"is_dmarc_configured": true,
"is_dmarc_enforced": true,
"is_caa_configured": false,
"is_external_redirect": false,
"is_custom_404_configured": true,
"is_valid_https": true,
"is_ssl_blacklisted": false,
"is_ssl_expired": false,
"is_ssl_revoked": false,
"ssl_type": "Domain Validation",
"ssl_issuer_organization": "DigiCert Inc",
"ssl_issuer_country": "US",
"ssl_subject_organization": "",
"ssl_subject_common_name": "www.amazon.com",
"ssl_subject_country": "",
"is_hsts_header": true,
"is_referrer_policy_header": false,
"is_unsafe_url_in_referrer_policy_header": false,
"is_csp_header": false,
"is_unsafe_eval_in_csp_header": false,
"is_unsafe_inline_in_csp_header": false,
"is_content_type_options_header": false,
"is_frame_options_header": true,
"is_xss_protection_header": false,
"is_permissions_policy_header": false,
"is_set_cookie_header": true,
"is_secure_on_all_cookies": false,
"is_server_header_exposing_version": false,
"is_powered_by_header_exposed": false,
"is_aspnet_version_header_exposed": false,
"is_dnssec_enabled": false,
"is_dnssec_signed": false,
"is_defaced_heuristic": false,
"is_website_popular": true,
"is_domain_recent": "no",
"is_domain_very_recent": "no",
"domain_creation_date": "1994-11-01",
"domain_age_in_days": 11375,
"domain_age_in_months": 366,
"domain_age_in_years": 31,
"is_ecommerce_platform": false,
"is_high_discounts": false,
"is_fake_socials": false,
"is_heuristic_pattern": false,
"is_free_email": false,
"is_risky_geo_location": false,
"is_china_country": false,
"is_nigeria_country": false
},
"server_details": {
"ip": "98.82.161.185",
"hostname": "ec2-98-82-161-185.compute-1.amazonaws.com",
"continent_code": "NA",
"continent_name": "North America",
"country_code": "US",
"country_name": "United States of America",
"region_name": "Virginia",
"city_name": "Ashburn",
"latitude": 39.039474,
"longitude": -77.491809,
"isp": "Amazon Technologies Inc.",
"asn": "AS14618"
},
"trust_score": {
"result": 100
},
"url_parts": {
"scheme": "https",
"host": "www.amazon.com",
"host_nowww": "amazon.com",
"port": 443,
"path": "/",
"query": ""
},
"elapsed_ms": 3123
}
```
## Response fields
The fields returned in the JSON response:
- `host` (string): Host submitted for the trustworthiness analysis.
- `dns_records → ns` (array): NS records of the domain; each item has target, ip, country_code, country_name and isp.
- `dns_records → ns[n] → target` (string): Name server hostname.
- `dns_records → ns[n] → ip` (string): IPv4 address of the name server.
- `dns_records → ns[n] → country_code` (string): Country code (e.g. US) of the name server IP address.
- `dns_records → ns[n] → country_name` (string): Country name of the name server IP address.
- `dns_records → ns[n] → isp` (string): Internet Service Provider (ISP) of the name server IP address.
- `dns_records → mx` (array): MX records of the domain; each item has target, ip, country_code, country_name and isp.
- `dns_records → mx[n] → target` (string): Mail server hostname.
- `dns_records → mx[n] → ip` (string): IPv4 address of the mail server.
- `dns_records → mx[n] → country_code` (string): Country code (e.g. US) of the mail server IP address.
- `dns_records → mx[n] → country_name` (string): Country name of the mail server IP address.
- `dns_records → mx[n] → isp` (string): Internet Service Provider (ISP) of the mail server IP address.
- `dns_records → cname` (string): CNAME target of the host. Empty string if none.
- `domain_blacklist → engines` (object): List of scanning engines; each item has name, detected, reference, confidence and elapsed_ms.
- `domain_blacklist → engines → [index] → name` (string): Name of the scanning engine.
- `domain_blacklist → engines → [index] → detected` (boolean): Returns true if this engine flagged the submitted domain.
- `domain_blacklist → engines → [index] → reference` (string): Link to the engine's website or listing details.
- `domain_blacklist → engines → [index] → confidence` (string): Confidence of this engine detection, e.g. high.
- `domain_blacklist → engines → [index] → elapsed_ms` (integer): Time taken by this engine to complete its check, in milliseconds.
- `domain_blacklist → detections` (integer): Number of scanning engines that detected the domain.
- `domain_blacklist → engines_count` (integer): Number of scanning engines used to scan the domain.
- `domain_blacklist → detection_rate` (string): Percentage of engines that detected the domain, e.g. 5%.
- `domain_blacklist → scan_time_ms` (integer): Time taken to scan the domain across all engines, in milliseconds.
- `ecommerce_platform → is_shopify` (boolean): Returns true if the website runs on Shopify.
- `ecommerce_platform → is_woocommerce` (boolean): Returns true if the website runs on WooCommerce.
- `ecommerce_platform → is_opencart` (boolean): Returns true if the website runs on OpenCart.
- `ecommerce_platform → is_prestashop` (boolean): Returns true if the website runs on PrestaShop.
- `ecommerce_platform → is_magento` (boolean): Returns true if the website runs on Magento.
- `ecommerce_platform → is_zencart` (boolean): Returns true if the website runs on Zen Cart.
- `ecommerce_platform → is_other` (boolean): Returns true if the website runs on another known e-commerce platform.
- `geo_location → countries` (array): List of potential countries of origin.
- `html_info → title` (string): Title of the page.
- `html_info → description` (string): Meta description of the page.
- `html_info → keywords` (string): Contents of the `meta keywords` tag.
- `html_info → robots` (string): Robots meta tag of the page.
- `html_info → canonical` (string): Canonical URL of the page.
- `html_info → og_image` (string): Open Graph image URL of the page.
- `html_info → article_publisher` (string): Contents of the article:publisher Open Graph tag. Empty string if none.
- `html_info → og_site_name` (string): Open Graph site name of the page.
- `html_info → twitter_site` (string): Twitter site handle of the page.
- `html_info → generator` (string): CMS or framework from `meta generator` tag (e.g. WordPress).
- `html_info → ld_organization` (string): Organization name found in JSON-LD structured data.
- `html_info → lang` (string): Language declared by the page, e.g. en-US.
- `redirection → found` (boolean): Returns true if the website redirects to another URL.
- `redirection → external` (boolean): Returns true if the redirect points to an external host.
- `redirection → url` (string): Destination URL of the redirect. Empty string if none.
- `response_headers` (object): HTTP response headers returned by the server, keyed by lowercase header name.
- `security_checks → is_suspended_site` (boolean): Returns true if the website appears suspended by the hosting provider.
- `security_checks → is_most_abused_tld` (boolean): Returns true if the domain TLD is risky, e.g. .top or .tk.
- `security_checks → is_robots_noindex` (boolean): Returns true if URL "doesn't want" to be indexed on Google.
- `security_checks → is_website_accessible` (boolean): Returns true if website is accessible by our servers (status code is 2xx or 3xx).
- `security_checks → is_empty_page_content` (boolean): Returns true if website page content is empty.
- `security_checks → is_redirect_to_search_engine` (boolean): Returns true if website redirects to search engines, like google.com.
- `security_checks → is_suspicious_redirect` (boolean): Returns true if the redirect matches our suspicious redirect rules.
- `security_checks → http_status_code` (integer): HTTP status code returned by the website, e.g. 200.
- `security_checks → is_http_status_error` (boolean): Returns true if the HTTP status code is an error (4xx or 5xx).
- `security_checks → is_http_server_error` (boolean): Returns true if the HTTP status code is a server error (5xx).
- `security_checks → is_http_client_error` (boolean): Returns true if the HTTP status code is a client error (4xx).
- `security_checks → is_empty_page_title` (boolean): Returns true if website page title is empty.
- `security_checks → is_ipv6_enabled` (boolean): Returns true if host has IPv6 AAAA records configured.
- `security_checks → is_domain_blacklisted` (boolean): Returns true if domain is blacklisted by trusted sources.
- `security_checks → is_suspicious_domain` (boolean): Returns true if domain matches our suspicious domain rules.
- `security_checks → is_sinkholed_domain` (boolean): Returns true if domain is sinkholed (malicious).
- `security_checks → is_http_redirected_to_https` (boolean): Returns true if HTTP requests are redirected to HTTPS.
- `security_checks → is_directory_listing` (boolean): Returns true if website is a directory listing.
- `security_checks → is_domain_ipv4_assigned` (boolean): Returns true if the domain resolves to an assigned IPv4 address.
- `security_checks → is_domain_ipv4_private` (boolean): Returns true if the domain resolves to a private IPv4 address.
- `security_checks → is_domain_ipv4_loopback` (boolean): Returns true if the domain resolves to a loopback (e.g. 127.0.0.1) IPv4 address.
- `security_checks → is_domain_ipv4_reserved` (boolean): Returns true if the domain resolves to a reserved IPv4 address.
- `security_checks → is_domain_ipv4_valid` (boolean): Returns true if the domain resolves to a valid public IPv4 address.
- `security_checks → is_uncommon_host_length` (boolean): Returns true if the host length is uncommon (such as, a very long domain).
- `security_checks → is_uncommon_dash_char_count` (boolean): Returns true if the host contains too many dash "-" characters.
- `security_checks → is_uncommon_dot_char_count` (boolean): Returns true if the host contains too many dot "." characters.
- `security_checks → is_email_configured` (boolean): Returns true if the domain has MX records configured to receive email.
- `security_checks → is_email_spoofable` (boolean): Returns true if the domain's email can be spoofed due to missing or weak SPF/DMARC configuration.
- `security_checks → is_dmarc_configured` (boolean): Returns true if the domain has a DMARC record.
- `security_checks → is_dmarc_enforced` (boolean): Returns true if the DMARC policy is enforced (p=quarantine or p=reject).
- `security_checks → is_caa_configured` (boolean): Returns true if the domain has CAA records configured.
- `security_checks → is_external_redirect` (boolean): Returns true if the URL redirects to an external website.
- `security_checks → is_custom_404_configured` (boolean): Returns true if the website returns a custom 404 error page.
- `security_checks → is_valid_https` (boolean): Returns true if the URL HTTPS (SSL) is valid.
- `security_checks → is_ssl_blacklisted` (boolean): Returns true if the SSL certificate is blacklisted by trusted sources.
- `security_checks → is_ssl_expired` (boolean): Returns true if the SSL certificate is expired.
- `security_checks → is_ssl_revoked` (boolean): Returns true if the SSL certificate has been revoked.
- `security_checks → ssl_type` (string): SSL certificate type, can be Domain Validation, Organization Validation or Extended Validation.
- `security_checks → ssl_issuer_organization` (string): Organization that issued the SSL certificate, e.g. DigiCert Inc.
- `security_checks → ssl_issuer_country` (string): Country of the SSL certificate issuer.
- `security_checks → ssl_subject_organization` (string): Organization in the SSL certificate subject. Empty string if not present.
- `security_checks → ssl_subject_common_name` (string): Common Name (CN) in the SSL certificate subject.
- `security_checks → ssl_subject_country` (string): Country in the SSL certificate subject. Empty string if not present.
- `security_checks → is_hsts_header` (boolean): Returns true if the Strict-Transport-Security (HSTS) header is present.
- `security_checks → is_referrer_policy_header` (boolean): Returns true if the Referrer-Policy header is present.
- `security_checks → is_unsafe_url_in_referrer_policy_header` (boolean): Returns true if the Referrer-Policy header uses the unsafe-url value.
- `security_checks → is_csp_header` (boolean): Returns true if the Content-Security-Policy header is present.
- `security_checks → is_unsafe_eval_in_csp_header` (boolean): Returns true if the Content-Security-Policy header contains unsafe-eval.
- `security_checks → is_unsafe_inline_in_csp_header` (boolean): Returns true if the Content-Security-Policy header contains unsafe-inline.
- `security_checks → is_content_type_options_header` (boolean): Returns true if the X-Content-Type-Options header is present.
- `security_checks → is_frame_options_header` (boolean): Returns true if the X-Frame-Options header is present.
- `security_checks → is_xss_protection_header` (boolean): Returns true if the X-XSS-Protection header is present.
- `security_checks → is_permissions_policy_header` (boolean): Returns true if the Permissions-Policy header is present.
- `security_checks → is_set_cookie_header` (boolean): Returns true if the website sets cookies via the Set-Cookie header.
- `security_checks → is_secure_on_all_cookies` (boolean): Returns true if all cookies are set with the Secure attribute.
- `security_checks → is_server_header_exposing_version` (boolean): Returns true if the Server header exposes the software version.
- `security_checks → is_powered_by_header_exposed` (boolean): Returns true if the X-Powered-By header is exposed.
- `security_checks → is_aspnet_version_header_exposed` (boolean): Returns true if the X-AspNet-Version header is exposed.
- `security_checks → is_dnssec_enabled` (boolean): Returns true if DNSSEC is enabled for the domain.
- `security_checks → is_dnssec_signed` (boolean): Returns true if the DNS response is signed with DNSSEC.
- `security_checks → is_defaced_heuristic` (boolean): Returns true if website has been defaced (we use our own rules).
- `security_checks → is_website_popular` (boolean): Returns true if the website is present in popular website rankings.
- `security_checks → is_domain_recent` (string): Returns "yes" if domain was created less than 6 months ago, can be yes/no/unknown.
- `security_checks → is_domain_very_recent` (string): Returns "yes" if domain was created less than 30 days ago, can be yes/no/unknown.
- `security_checks → domain_creation_date` (string): Domain registration date, format is Y-m-d (empty if unknown).
- `security_checks → domain_age_in_days` (integer): Age of the domain in days (0 if unknown).
- `security_checks → domain_age_in_months` (integer): Age of the domain in months (0 if unknown).
- `security_checks → domain_age_in_years` (integer): Age of the domain in years (0 if unknown).
- `security_checks → is_ecommerce_platform` (boolean): Returns true if the website is using an ecommerce platform like Shopify.
- `security_checks → is_high_discounts` (boolean): Returns true if the website is offering high discounts.
- `security_checks → is_fake_socials` (boolean): Returns true if the website is using fake social profiles.
- `security_checks → is_heuristic_pattern` (boolean): Returns true if our heuristic engine detected malicious patterns.
- `security_checks → is_free_email` (boolean): Returns true if website is using a free email like Gmail.
- `security_checks → is_risky_geo_location` (boolean): Returns true if website location is considered risky.
- `security_checks → is_china_country` (boolean): Returns true if website is potentially located in China.
- `security_checks → is_nigeria_country` (boolean): Returns true if website is potentially located in Nigeria.
- `server_details → ip` (string): IP address of the submitted host.
- `server_details → hostname` (string): Reverse DNS hostname (PTR record) of the host's IP address. Empty string if none.
- `server_details → continent_code` (string): Continent code (e.g. NA) of where the host's IP address is located.
- `server_details → continent_name` (string): Continent name (e.g. North America) of where the host's IP address is located.
- `server_details → country_code` (string): Country code (e.g. CN) of where the host's IP address is located.
- `server_details → country_name` (string): Country name of where the host's IP address is located.
- `server_details → region_name` (string): Region or state name of where the host's IP address is located.
- `server_details → city_name` (string): City name of where the host's IP address is located.
- `server_details → latitude` (float): Approximate latitude of the host's IP address.
- `server_details → longitude` (float): Approximate longitude of the host's IP address.
- `server_details → isp` (string): Internet Service Provider (ISP) of host's IP address.
- `server_details → asn` (string): IP Autonomous System Number (ASN), such as AS16509.
- `trust_score → result` (integer): Returns trust score, a number between 0 (bad) and 100 (good).
- `url_parts → scheme` (string): URL scheme: `http` or `https`.
- `url_parts → host` (string): Full hostname including subdomain (e.g. `www.example.com`).
- `url_parts → host_nowww` (string): Hostname with the `www.` prefix stripped.
- `url_parts → port` (integer): Port number. Typically `80` for HTTP, `443` for HTTPS, or `0` if unspecified.
- `url_parts → path` (string): URL path component (e.g. `/contact-us/`).
- `url_parts → query` (string): URL query string. Empty string if none.
- `elapsed_ms` (integer): Time taken to process the request, in milliseconds.
---
Source:
# SPF Validator API Reference
Validate the SPF record of a domain: check the record syntax, lookup count and common issues, and verify if an IP is authorized to send emails for the domain.
Service details and pricing: [SPF Validator API](https://www.apivoid.com/api/spf-validator/)
Endpoint: `POST https://api.apivoid.com/v2/spf-validator`
Credit cost: 5 credits per successful request.
## Request example
Query the endpoint via an HTTPS POST request (replace `YOUR_API_KEY_HERE` with your [API key](https://docs.apivoid.com/authentication/)):
```bash
curl -X POST "https://api.apivoid.com/v2/spf-validator" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY_HERE" \
-d '{"host": "gmail.com"}'
```
The same request in PHP:
```php
$host = 'gmail.com';
$apiKey = 'YOUR_API_KEY_HERE';
$curl = curl_init('https://api.apivoid.com/v2/spf-validator');
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(['host' => $host]));
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
- `host` (string; Required): Host to submit, e.g. gmail.com.
### Optional
- `iptest` (string): IPv4 or IPv6 address to test: the response tells you whether it is authorized to send email for the domain.
## Response example
A successful request returns HTTP `200` with a JSON body:
```json
{
"host": "gmail.com",
"has_spf_record": true,
"dns_lookups_num": 4,
"spf_record": "v=spf1 redirect=_spf.google.com",
"spf_records_list": [
{
"record": "v=spf1 redirect=_spf.google.com",
"origin": "gmail.com",
"chars_num": 31,
"use_macro": false,
"domains": [
"_spf.google.com"
]
},
{
"record": "v=spf1 include:_netblocks.google.com include:_netblocks2.google.com include:_netblocks3.google.com ~all",
"origin": "_spf.google.com",
"chars_num": 103,
"use_macro": false,
"domains": [
"_netblocks.google.com",
"_netblocks2.google.com",
"_netblocks3.google.com"
]
},
{
"record": "v=spf1 ip4:35.190.247.0/24 ip4:64.233.160.0/19 ip4:66.102.0.0/20 ip4:66.249.80.0/20 ip4:72.14.192.0/18 ip4:74.125.0.0/16 ip4:108.177.8.0/21 ip4:173.194.0.0/16 ip4:209.85.128.0/17 ip4:216.58.192.0/19 ip4:216.239.32.0/19 ~all",
"authorized_ips": {
"ipv4": [
"35.190.247.0/24",
"64.233.160.0/19",
"66.102.0.0/20",
"66.249.80.0/20",
"72.14.192.0/18",
"74.125.0.0/16",
"108.177.8.0/21",
"173.194.0.0/16",
"209.85.128.0/17",
"216.58.192.0/19",
"216.239.32.0/19"
]
},
"origin": "_netblocks.google.com",
"chars_num": 223,
"use_macro": false
},
{
"record": "v=spf1 ip6:2001:4860:4000::/36 ip6:2404:6800:4000::/36 ip6:2607:f8b0:4000::/36 ip6:2800:3f0:4000::/36 ip6:2a00:1450:4000::/36 ip6:2c0f:fb50:4000::/36 ~all",
"authorized_ips": {
"ipv6": [
"2001:4860:4000::/36",
"2404:6800:4000::/36",
"2607:f8b0:4000::/36",
"2800:3f0:4000::/36",
"2a00:1450:4000::/36",
"2c0f:fb50:4000::/36"
]
},
"origin": "_netblocks2.google.com",
"chars_num": 154,
"use_macro": false
},
{
"record": "v=spf1 ip4:172.217.0.0/19 ip4:172.217.32.0/20 ip4:172.217.128.0/19 ip4:172.217.160.0/20 ip4:172.217.192.0/19 ip4:172.253.56.0/21 ip4:172.253.112.0/20 ip4:108.177.96.0/19 ip4:35.191.0.0/16 ip4:130.211.0.0/22 ~all",
"authorized_ips": {
"ipv4": [
"172.217.0.0/19",
"172.217.32.0/20",
"172.217.128.0/19",
"172.217.160.0/20",
"172.217.192.0/19",
"172.253.56.0/21",
"172.253.112.0/20",
"108.177.96.0/19",
"35.191.0.0/16",
"130.211.0.0/22"
]
},
"origin": "_netblocks3.google.com",
"chars_num": 211,
"use_macro": false
}
],
"domains_extracted": [
"_spf.google.com",
"_netblocks.google.com",
"_netblocks2.google.com",
"_netblocks3.google.com"
],
"authorized_ips": {
"ipv4": [
"35.190.247.0/24",
"64.233.160.0/19",
"66.102.0.0/20",
"66.249.80.0/20",
"72.14.192.0/18",
"74.125.0.0/16",
"108.177.8.0/21",
"173.194.0.0/16",
"209.85.128.0/17",
"216.58.192.0/19",
"216.239.32.0/19",
"172.217.0.0/19",
"172.217.32.0/20",
"172.217.128.0/19",
"172.217.160.0/20",
"172.217.192.0/19",
"172.253.56.0/21",
"172.253.112.0/20",
"108.177.96.0/19",
"35.191.0.0/16",
"130.211.0.0/22"
],
"ipv6": [
"2001:4860:4000::/36",
"2404:6800:4000::/36",
"2607:f8b0:4000::/36",
"2800:3f0:4000::/36",
"2a00:1450:4000::/36",
"2c0f:fb50:4000::/36"
]
},
"issues_found": [],
"spf_valid": true,
"has_issues": false,
"macros_found": false,
"ip_pass": true,
"elapsed_ms": 58
}
```
## Response fields
The fields returned in the JSON response:
- `host` (string): Host submitted for the SPF check.
- `has_spf_record` (boolean): Returns true if TXT SPF1 record is found.
- `dns_lookups_num` (integer): Number of DNS lookups performed.
- `spf_record` (string): TXT SPF1 record, e.g. v=spf1 redirect=_spf.google.com.
- `spf_records_list` (array): Array with details of each recursively-analyzed SPF record.
- `spf_records_list[n] → record` (string): The SPF record analyzed.
- `spf_records_list[n] → origin` (string): Domain where this SPF record was found (followed via include or redirect).
- `spf_records_list[n] → chars_num` (integer): Number of characters in the SPF record.
- `spf_records_list[n] → use_macro` (boolean): Returns true if this SPF record uses macros.
- `spf_records_list[n] → domains` (array): Domains referenced by this SPF record via include and redirect.
- `spf_records_list[n] → authorized_ips → ipv4` (array): IPv4 addresses and ranges authorized by this SPF record.
- `spf_records_list[n] → authorized_ips → ipv6` (array): IPv6 addresses and ranges authorized by this SPF record.
- `domains_extracted` (array): Array of domains extracted from include and redirect modifier.
- `authorized_ips` (object): Authorized sender addresses, grouped into `ipv4` and `ipv6` arrays.
- `authorized_ips → ipv4` (array): All IPv4 addresses and ranges authorized to send email for the domain.
- `authorized_ips → ipv6` (array): All IPv6 addresses and ranges authorized to send email for the domain.
- `issues_found` (array): Array of issues found, the "code" field can be SPF_NOT_FOUND, MULTIPLE_SPF_RECORDS, PTR_DEPRECATED, UPPERCASE_CHARACTERS, PLUS_ALL_FOUND, RECORD_TERMINATION_MISSING, DATA_AFTER_ALL, DATA_AFTER_REDIRECT, MULTIPLE_FALLBACKS, TOO_MANY_DNS_LOOKUPS, MULTIPLE_SPFV1_ON_SAME_RECORD, DUPLICATE_INCLUDE.
- `spf_valid` (boolean): Returns true if the SPF1 record is valid.
- `has_issues` (boolean): Returns true if we found issues on the SPF record.
- `macros_found` (boolean): Returns true if macros were found in any of the analyzed SPF records.
- `ip_pass` (boolean): Returns true if the IP submitted via "iptest" is authorized (ignore this field if you didn't set "iptest").
- `elapsed_ms` (integer): Time taken to process the request, in milliseconds.
---
Source:
# SSL Info API Reference
Get detailed SSL certificate information of a host: owner, issuer, validity dates, and more.
Service details and pricing: [SSL Info API](https://www.apivoid.com/api/ssl-info/)
Endpoint: `POST https://api.apivoid.com/v2/ssl-info`
Credit cost: 1 credit per successful request.
## Request example
Query the endpoint via an HTTPS POST request (replace `YOUR_API_KEY_HERE` with your [API key](https://docs.apivoid.com/authentication/)):
```bash
curl -X POST "https://api.apivoid.com/v2/ssl-info" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY_HERE" \
-d '{"host": "paypal.com"}'
```
The same request in PHP:
```php
$host = 'paypal.com';
$apiKey = 'YOUR_API_KEY_HERE';
$curl = curl_init('https://api.apivoid.com/v2/ssl-info');
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(['host' => $host]));
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
- `host` (string; Required): Host to submit, e.g. google.com.
### Optional
- `port` (integer; Default: 443): SSL port to check. Must be between 443 and 65535.
## Response example
A successful request returns HTTP `200` with a JSON body:
```json
{
"host": "paypal.com",
"port": 443,
"certificate": {
"found": true,
"debug_message": "",
"fingerprint_sha1": "6f55d7d0b407cb6bb13bd14a1cbb105c0ee5c3d5",
"fingerprint_sha256": "faf941ad6b7339463bcea590e77e39f7930a168eb6d130d79c3be12c5de83894",
"type": "Extended Validation",
"deprecated_issuer": false,
"name_match": true,
"blacklisted": false,
"self_signed": false,
"expired": false,
"revoked": false,
"valid": true,
"details": {
"subject": {
"name": "SERIALNUMBER=3014267,CN=paypal.com,O=PayPal\\, Inc.,L=San Jose,ST=California,C=US,2.5.4.15=#131450726976617465204f7267616e697a6174696f6e,1.3.6.1.4.1.311.60.2.1.2=#130844656c6177617265,1.3.6.1.4.1.311.60.2.1.3=#13025553",
"common_name": "paypal.com",
"alternative_names": "paypal.com, paypal-workplace.com, xoom-experience.com, www.curv.cc, buyindiaonline.com, www.curv.co, curv.co, xoom.com, venmo-experience.com, sandbox.paypal.com, paypal.me, curv.cc, simility.com, paypal-experience.com, www.paypal.biz, www.simility.com, paypal.biz, cash2india.com, pypl.com, fastlane.paypal.com, paypal.co.uk, paypal.com.tr, paypal.ca, paypal-promo.es, paypal-marketing.co.uk, paypal-sverige.se, paypalgivingfund.org, paypal.com.hk, paypal.com.tw, paypalobjects.com, paypal-partners.com, paypal.se, PAYPAL.CO, paypal-nakit.com, paypal-mktg.com, paypal-marketing.ca, paypal-communications.com, paypal.fr, paypal.jp, paypal.no, paypal-donations.co.uk, paypal.be, paypal-passport.com, paypal.fi, paypal.nl, paypal-latam.com, paypal.vn, paypal-gifts.com, paypal.co.za, PAYPAL-MARKETING.PL, paypal.at, paypal-australia.com.au, paypal.co.in, paypal-danmark.dk, paypal-turkiye.com, paypal.co.il, paypal.com.cn, paypal-prepagata.com, paypal.es, paypal.eu, paypal.it, paypal.com.pe, paypal.in, paypal-business.com.au, paypal.co.id, paypal-globalshops.com, paypal-optimizer.com, paypal-mena.com, paypal-donations.com, paypal.ie, paypal.co.nz, paypal-media.com, paypal-information.com, paypal.com.sa, paypal-knowledge.com, paypal-businesscenter.com, paypal-community.com, PAYPAL-DEUTSCHLAND.DE, paypal.lu, PAYPAL.COM.MY, paypal.com.sg, paypal.dk, paypal.com.br, paypal.de, paypal-knowledge-test.com, paypal.pt, paypal.co.th, thepaypalblog.com, paypal-norge.no, paypal.pl, paypal.ph, paypal.com.ve, paypal.com.mx, paypal.cl, paypal-business.co.uk, paypal.com.au, paypalbenefits.com, paypal.ch, paypal.com.ar, paypal-support.com",
"organization_unit": [],
"organization": "PayPal, Inc.",
"category": "Private Organization",
"country": "US",
"street": [],
"postal_code": "",
"state": "California",
"location": "San Jose",
"serial_number": "3014267",
"inc_country": "US",
"inc_state": "Delaware"
},
"issuer": {
"common_name": "DigiCert EV RSA CA G2",
"organization": "DigiCert Inc",
"country": "US",
"state": "",
"location": "",
"organization_unit": []
},
"public_key": {
"algorithm": "RSA",
"size": 2048
},
"crl_endpoints": [
"http://crl3.digicert.com/DigiCertEVRSACAG2.crl",
"http://crl4.digicert.com/DigiCertEVRSACAG2.crl"
],
"signature": {
"serial": "14728578715614846917259483520735530892",
"serial_hex": "0B149EFF02F1C650CF59029012764F8C",
"type": "SHA256-RSA"
},
"validity": {
"days_left": 269,
"expired_from_days": 0,
"valid_from": "Mon, 26 Aug 2024 00:00:00 UTC",
"valid_to": "Mon, 25 Aug 2025 23:59:59 UTC",
"valid_from_timestamp": 1724630400,
"valid_to_timestamp": 1756166399
},
"certificate_authority": false,
"authority_key_id": "301680146a4e50bf98689d5b7b2075d45901794866923206",
"subject_key_id": "04148d939fbf9c7cf8ba64066baa73bb814351b7dc41",
"key_usages": [
"Digital Signature",
"Key Encipherment"
],
"extended_key_usages": [
"Server Authentication",
"Client Authentication"
],
"authority_info": [
{
"location": "http://ocsp.digicert.com",
"method": "OCSP"
},
{
"location": "http://cacerts.digicert.com/DigiCertEVRSACAG2.crt",
"method": "CA Issuers"
}
]
}
},
"elapsed_ms": 289
}
```
## Response fields
The fields returned in the JSON response:
- `host` (string): Host submitted for the SSL check.
- `port` (integer): Port used for the SSL connection, e.g. 443.
- `certificate → found` (boolean): Returns true if a SSL certificate was found.
- `certificate → debug_message` (string): Debug or error details about the request, if any. Empty string if none.
- `certificate → fingerprint_sha1` (string): SHA-1 fingerprint of the certificate.
- `certificate → fingerprint_sha256` (string): SHA-256 fingerprint of the certificate.
- `certificate → type` (string): SSL certificate type, can be Domain Validation, Organization Validation or Extended Validation.
- `certificate → deprecated_issuer` (boolean): Returns true if the certificate was issued by a deprecated or distrusted certificate authority.
- `certificate → name_match` (boolean): Returns true if the certificate matches the submitted host name.
- `certificate → blacklisted` (boolean): Returns true if SSL certificate is blacklisted by [SSLBL](https://sslbl.abuse.ch/).
- `certificate → self_signed` (boolean): Returns true if the certificate is self-signed.
- `certificate → expired` (boolean): Returns true if the certificate is expired.
- `certificate → revoked` (boolean): Returns true if the certificate has been revoked.
- `certificate → valid` (boolean): Returns true if SSL certificate is valid.
- `certificate → details → subject → name` (string): Full subject distinguished name (DN) of the certificate.
- `certificate → details → subject → common_name` (string): Common Name (CN) of the certificate subject.
- `certificate → details → subject → alternative_names` (string): Subject Alternative Names (SANs) covered by the certificate, comma-separated.
- `certificate → details → subject → organization_unit` (array): Organizational Unit (OU) entries of the subject. Empty array if none.
- `certificate → details → subject → organization` (string): Organization (O) of the certificate subject. Empty string if not present.
- `certificate → details → subject → category` (string): Subject category for EV certificates, e.g. Private Organization. Empty string if not present.
- `certificate → details → subject → country` (string): Country (C) of the certificate subject. Empty string if not present.
- `certificate → details → subject → street` (array): Street address entries of the subject. Empty array if none.
- `certificate → details → subject → postal_code` (string): Postal code of the subject. Empty string if not present.
- `certificate → details → subject → state` (string): State or province (ST) of the certificate subject. Empty string if not present.
- `certificate → details → subject → location` (string): Locality (L) of the certificate subject. Empty string if not present.
- `certificate → details → subject → serial_number` (string): Subject serial number, typically present on EV certificates. Empty string if not present.
- `certificate → details → subject → inc_country` (string): Jurisdiction country of incorporation for EV certificates. Empty string if not present.
- `certificate → details → subject → inc_state` (string): Jurisdiction state of incorporation for EV certificates. Empty string if not present.
- `certificate → details → issuer → common_name` (string): Common Name (CN) of the certificate issuer.
- `certificate → details → issuer → organization` (string): Organization (O) of the certificate issuer.
- `certificate → details → issuer → country` (string): Country (C) of the certificate issuer.
- `certificate → details → issuer → state` (string): State or province (ST) of the certificate issuer. Empty string if not present.
- `certificate → details → issuer → location` (string): Locality (L) of the certificate issuer. Empty string if not present.
- `certificate → details → issuer → organization_unit` (array): Organizational Unit (OU) entries of the issuer. Empty array if none.
- `certificate → details → public_key → algorithm` (string): Public key algorithm, e.g. RSA or ECDSA.
- `certificate → details → public_key → size` (integer): Public key size, in bits (e.g. 2048).
- `certificate → details → crl_endpoints` (array): Certificate Revocation List (CRL) distribution point URLs.
- `certificate → details → signature → serial` (string): Certificate serial number, in decimal.
- `certificate → details → signature → serial_hex` (string): Certificate serial number, in hexadecimal (same format as `openssl x509 -serial`).
- `certificate → details → signature → type` (string): Signature algorithm of the certificate, e.g. SHA256-RSA.
- `certificate → details → validity → days_left` (integer): Days remaining until the certificate expires.
- `certificate → details → validity → expired_from_days` (integer): Days since the certificate expired; 0 if not expired.
- `certificate → details → validity → valid_from` (string): Start of the certificate validity period (UTC).
- `certificate → details → validity → valid_to` (string): End of the certificate validity period (UTC).
- `certificate → details → validity → valid_from_timestamp` (integer): Start of the validity period, as Unix timestamp.
- `certificate → details → validity → valid_to_timestamp` (integer): End of the validity period, as Unix timestamp.
- `certificate → details → certificate_authority` (boolean): Returns true if the certificate is a CA certificate.
- `certificate → details → authority_key_id` (string): Authority Key Identifier (AKID) extension value.
- `certificate → details → subject_key_id` (string): Subject Key Identifier (SKID) extension value.
- `certificate → details → key_usages` (array): Key usages allowed by the certificate, e.g. Digital Signature.
- `certificate → details → extended_key_usages` (array): Extended key usages of the certificate, e.g. Server Authentication.
- `certificate → details → authority_info` (array): Authority Information Access (AIA) endpoints; each item has method and location.
- `certificate → details → authority_info[n] → location` (string): URL of the AIA endpoint.
- `certificate → details → authority_info[n] → method` (string): AIA access method: CA Issuers or OCSP.
- `elapsed_ms` (integer): Time taken to process the request, in milliseconds.
---
Source:
# TLS Check API Reference
Check which SSL/TLS protocol versions a host supports (SSLv2 to TLSv1.3), detect deprecated protocols, get an overall score, and optionally scan cipher suites.
Service details and pricing: [TLS Check API](https://www.apivoid.com/api/tls-check/)
Endpoint: `POST https://api.apivoid.com/v2/tls-check`
Credit cost: 4 credits per successful request.
## Request example
Query the endpoint via an HTTPS POST request (replace `YOUR_API_KEY_HERE` with your [API key](https://docs.apivoid.com/authentication/)):
```bash
curl -X POST "https://api.apivoid.com/v2/tls-check" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY_HERE" \
-d '{"host": "stripe.com"}'
```
The same request in PHP:
```php
$host = 'stripe.com';
$apiKey = 'YOUR_API_KEY_HERE';
$curl = curl_init('https://api.apivoid.com/v2/tls-check');
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(['host' => $host]));
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
- `host` (string; Required): Host to submit, e.g. google.com.
### Optional
- `port` (integer; Default: 443): TLS port to check. Must be between 443 and 65535.
- `scan_ciphers` (boolean; Default: false; New; +1 Credit): Enable cipher suite scanning for all TLS protocols. Available on the Growth Plan and above. New response fields (when enabled): `ciphers`, `protocol_details`. Note: ⚠ Enabling this option costs 1 additional credit per successful request.
## Response example
A successful request returns HTTP `200` with a JSON body:
```json
{
"host": "stripe.com",
"ip": "198.202.176.231",
"port": 443,
"protocols": {
"sslv2": {
"enabled": false,
"recommended_status": "disabled",
"deprecated": true
},
"sslv3": {
"enabled": false,
"recommended_status": "disabled",
"deprecated": true
},
"tlsv1.0": {
"enabled": false,
"recommended_status": "disabled",
"deprecated": true
},
"tlsv1.1": {
"enabled": false,
"recommended_status": "disabled",
"deprecated": true
},
"tlsv1.2": {
"enabled": true,
"recommended_status": "enabled",
"deprecated": false
},
"tlsv1.3": {
"enabled": true,
"recommended_status": "enabled",
"deprecated": false
}
},
"connected": true,
"score": "excellent",
"elapsed_ms": 745
}
```
## Response fields
The fields returned in the JSON response:
- `host` (string): Host submitted for the TLS check.
- `ip` (string): IP address the host resolved to.
- `port` (integer): Port used for the TLS check, e.g. 443.
- `protocols` (object): Status of each SSL/TLS protocol version, keyed by protocol name.
- `protocols → [protocol] → enabled` (boolean): Returns true if the protocol version is enabled on the server.
- `protocols → [protocol] → recommended_status` (string): Recommended status for the protocol, can be enabled/disabled.
- `protocols → [protocol] → deprecated` (boolean): Returns true if the protocol version is deprecated.
- `connected` (boolean): Returns true if a TLS connection to the server was established.
- `score` (string): Overall TLS configuration score, e.g. excellent, moderate, poor.
- `ciphers` (object; With: scan_ciphers): Supported ciphers grouped by protocol version, keyed by protocol name (e.g. tlsv1.2, tlsv1.3).
- `ciphers → [protocol] → ciphers` (array; With: scan_ciphers): List of ciphers tested for this protocol; each item has name, hex_code, supported, key_exchange, bits and forward_secrecy.
- `ciphers → [protocol] → summary → insecure_cipher_count` (integer; With: scan_ciphers): Number of insecure ciphers supported.
- `ciphers → [protocol] → summary → weak_cipher_count` (integer; With: scan_ciphers): Number of weak ciphers supported.
- `ciphers → [protocol] → summary → strong_cipher_count` (integer; With: scan_ciphers): Number of strong ciphers supported.
- `ciphers → [protocol] → summary → total_supported` (integer; With: scan_ciphers): Total number of ciphers supported for this protocol.
- `protocol_details → secure_renegotiation` (boolean; With: scan_ciphers): Returns true if secure renegotiation is supported.
- `protocol_details → forward_secrecy` (boolean; With: scan_ciphers): Returns true if forward secrecy is supported.
- `protocol_details → rc4` (boolean; With: scan_ciphers): Returns true if RC4 ciphers are supported.
- `protocol_details → ocsp_stapling` (boolean; With: scan_ciphers): Returns true if OCSP stapling is enabled.
- `protocol_details → alpn` (boolean; With: scan_ciphers): Returns true if ALPN is supported.
- `protocol_details → alpn_protocols` (array; With: scan_ciphers): ALPN protocols advertised by the server, e.g. h2.
- `elapsed_ms` (integer): Time taken to process the request, in milliseconds.
## Optional response fields
Optional request parameters add extra fields to the JSON response, example:
```json
{
"host": "stripe.com",
"scan_ciphers": true
}
```
Each enabled option adds the following fields to the response:
- `scan_ciphers` adds `ciphers`, `protocol_details` (Top level: top level of the response)
Example response for the request payload above:
```json
{
"host": "stripe.com",
"ip": "198.202.176.231",
"port": 443,
"protocols": {
"sslv2": {
"enabled": false,
"recommended_status": "disabled",
"deprecated": true
},
"sslv3": {
"enabled": false,
"recommended_status": "disabled",
"deprecated": true
},
"tlsv1.0": {
"enabled": false,
"recommended_status": "disabled",
"deprecated": true
},
"tlsv1.1": {
"enabled": false,
"recommended_status": "disabled",
"deprecated": true
},
"tlsv1.2": {
"enabled": true,
"recommended_status": "enabled",
"deprecated": false
},
"tlsv1.3": {
"enabled": true,
"recommended_status": "enabled",
"deprecated": false
}
},
"connected": true,
"score": "excellent",
"ciphers": {
"tlsv1.3": {
"ciphers": [
{
"name": "TLS_AES_128_GCM_SHA256",
"hex_code": "0x1301",
"supported": true,
"key_exchange": "ECDH",
"bits": 128,
"forward_secrecy": true
},
{
"name": "TLS_AES_256_GCM_SHA384",
"hex_code": "0x1302",
"supported": true,
"key_exchange": "ECDH",
"bits": 256,
"forward_secrecy": true
},
{
"name": "TLS_CHACHA20_POLY1305_SHA256",
"hex_code": "0x1303",
"supported": true,
"key_exchange": "ECDH",
"bits": 256,
"forward_secrecy": true
}
],
"summary": {
"insecure_cipher_count": 0,
"weak_cipher_count": 0,
"strong_cipher_count": 3,
"total_supported": 3
}
},
"tlsv1.2": {
"ciphers": [
{
"name": "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
"hex_code": "0xc030",
"supported": true,
"key_exchange": "ECDH",
"bits": 256,
"forward_secrecy": true
},
{
"name": "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
"hex_code": "0xc02f",
"supported": true,
"key_exchange": "ECDH",
"bits": 128,
"forward_secrecy": true
},
{
"name": "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256",
"hex_code": "0xcca8",
"supported": true,
"key_exchange": "ECDH",
"bits": 256,
"forward_secrecy": true
},
{
"name": "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
"hex_code": "0xc02b",
"supported": true,
"key_exchange": "ECDH",
"bits": 128,
"forward_secrecy": true
},
{
"name": "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256",
"hex_code": "0xcca9",
"supported": true,
"key_exchange": "ECDH",
"bits": 256,
"forward_secrecy": true
},
{
"name": "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
"hex_code": "0xc014",
"supported": true,
"key_exchange": "ECDH",
"bits": 256,
"forward_secrecy": true,
"weak": true
},
{
"name": "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
"hex_code": "0xc013",
"supported": true,
"key_exchange": "ECDH",
"bits": 128,
"forward_secrecy": true,
"weak": true
},
{
"name": "TLS_RSA_WITH_AES_256_GCM_SHA384",
"hex_code": "0x009d",
"supported": true,
"key_exchange": "RSA",
"bits": 256,
"weak": true
},
{
"name": "TLS_RSA_WITH_AES_128_GCM_SHA256",
"hex_code": "0x009c",
"supported": true,
"key_exchange": "RSA",
"bits": 128,
"weak": true
},
{
"name": "TLS_RSA_WITH_AES_256_CBC_SHA",
"hex_code": "0x0035",
"supported": true,
"key_exchange": "RSA",
"bits": 256,
"weak": true
},
{
"name": "TLS_RSA_WITH_AES_128_CBC_SHA",
"hex_code": "0x002f",
"supported": true,
"key_exchange": "RSA",
"bits": 128,
"weak": true
}
],
"summary": {
"insecure_cipher_count": 0,
"weak_cipher_count": 6,
"strong_cipher_count": 5,
"total_supported": 11
}
},
"tlsv1.1": {
"ciphers": [],
"summary": {
"insecure_cipher_count": 0,
"weak_cipher_count": 0,
"strong_cipher_count": 0,
"total_supported": 0
}
},
"tlsv1.0": {
"ciphers": [],
"summary": {
"insecure_cipher_count": 0,
"weak_cipher_count": 0,
"strong_cipher_count": 0,
"total_supported": 0
}
}
},
"protocol_details": {
"secure_renegotiation": true,
"forward_secrecy": true,
"rc4": false,
"ocsp_stapling": false,
"alpn": true,
"alpn_protocols": [
"h2"
]
},
"elapsed_ms": 402
}
```
---
Source:
# Tor Test API Reference
Check if a website is accessible from the Tor network: the URL is requested through a Tor exit node and the API returns the HTTP status code, response headers and page details as seen from Tor. Useful to verify whether a site blocks or challenges Tor visitors.
Service details and pricing: [Tor Test API](https://www.apivoid.com/api/tor-test/)
Endpoint: `POST https://api.apivoid.com/v2/tor-test`
Credit cost: 10 credits per successful request.
## Request example
Query the endpoint via an HTTPS POST request (replace `YOUR_API_KEY_HERE` with your [API key](https://docs.apivoid.com/authentication/)):
```bash
curl -X POST "https://api.apivoid.com/v2/tor-test" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY_HERE" \
-d '{"url": "https://www.nvidia.com/"}'
```
The same request in PHP:
```php
$url = 'https://www.nvidia.com/';
$apiKey = 'YOUR_API_KEY_HERE';
$curl = curl_init('https://api.apivoid.com/v2/tor-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` (string; Required): URL to submit, e.g. `https://www.nvidia.com/`. Note: ⚠ Government and educational domains are blocked.
## Response example
A successful request returns HTTP `200` with a JSON body:
```json
{
"url": "https://www.nvidia.com/",
"accessible": false,
"status_code": 403,
"debug_message": "",
"response_headers": {
"content-length": "366",
"content-type": "text/html",
"date": "Fri, 28 Mar 2025 15:20:54 GMT",
"expires": "Fri, 28 Mar 2025 15:20:54 GMT",
"last-modified": "Fri, 28 Mar 2025 15:20:54 GMT",
"mime-version": "1.0",
"server": "AkamaiGHost",
"set-cookie": "c_code=DE; Path=/; Secure",
"x-cache-status": "Error from child",
"x-cdn": "akam",
"x-cdn-version": "v373"
},
"html_info": {
"title": "Access Denied",
"description": ""
},
"elapsed_ms": 678
}
```
## Response fields
The fields returned in the JSON response:
- `url` (string): URL submitted for the Tor accessibility test.
- `accessible` (boolean): Returns true if the URL is accessible from the Tor network.
- `status_code` (integer): HTTP status code returned by the server.
- `debug_message` (string): Debug or error details about the request, if any. Empty string if none.
- `response_headers` (object): HTTP response headers returned by the server to the Tor exit node, keyed by lowercase header name.
- `html_info → title` (string): Title of the page returned to the Tor exit node.
- `html_info → description` (string): Meta description of the page returned to the Tor exit node.
- `elapsed_ms` (integer): Time taken to process the request, in milliseconds.
---
Source:
# URL Reputation API Reference
Check the safety reputation and risk score of a URL using unique URL security checks, with detailed detection and website analysis data.
Service details and pricing: [URL Reputation API](https://www.apivoid.com/api/url-reputation/)
Endpoint: `POST https://api.apivoid.com/v2/url-reputation`
Credit cost: 5 credits per successful request.
## Request example
Query the endpoint via an HTTPS POST request (replace `YOUR_API_KEY_HERE` with your [API key](https://docs.apivoid.com/authentication/)):
```bash
curl -X POST "https://api.apivoid.com/v2/url-reputation" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY_HERE" \
-d '{"url": "https://blog.google/products/android/"}'
```
The same request in PHP:
```php
$url = 'https://blog.google/products/android/';
$apiKey = 'YOUR_API_KEY_HERE';
$curl = curl_init('https://api.apivoid.com/v2/url-reputation');
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` (string; Required): URL to submit, e.g. `https://www.example.com/index.html`.
## Response example
A successful request returns HTTP `200` with a JSON body:
```json
{
"url": "https://blog.google/products/android/",
"dns_records": {
"ns": [
{
"target": "ns2.zdns.google",
"ip": "216.239.34.114",
"country_code": "US",
"country_name": "United States of America",
"isp": "Google LLC"
},
{
"target": "ns1.zdns.google",
"ip": "216.239.32.114",
"country_code": "US",
"country_name": "United States of America",
"isp": "Google LLC"
},
{
"target": "ns4.zdns.google",
"ip": "216.239.38.114",
"country_code": "US",
"country_name": "United States of America",
"isp": "Google LLC"
},
{
"target": "ns3.zdns.google",
"ip": "216.239.36.114",
"country_code": "US",
"country_name": "United States of America",
"isp": "Google LLC"
}
],
"mx": [
{
"target": "smtp.google.com",
"ip": "142.251.107.26",
"country_code": "US",
"country_name": "United States of America",
"isp": "Google LLC"
}
],
"cname": ""
},
"domain_blacklist": {
"engines": {
"0": {
"name": "ANJ Blocked Sites",
"detected": false,
"reference": "https://anj.fr/",
"confidence": "high",
"elapsed_ms": 0
},
"1": {
"name": "AntiSocial Blacklist",
"detected": false,
"reference": "https://theantisocialengineer.com/",
"confidence": "high",
"elapsed_ms": 0
},
"2": {
"name": "APVA",
"detected": false,
"reference": "https://www.antiphish.org/",
"confidence": "high",
"elapsed_ms": 0
},
"3": {
"name": "Artists Against 419",
"detected": false,
"reference": "https://wiki.aa419.org/index.php/Main_Page",
"confidence": "high",
"elapsed_ms": 0
},
"4": {
"name": "AZORult Tracker",
"detected": false,
"reference": "https://azorult-tracker.net/",
"confidence": "high",
"elapsed_ms": 0
},
"5": {
"name": "Badbitcoin",
"detected": false,
"reference": "https://badbitcoin.org/",
"confidence": "high",
"elapsed_ms": 0
},
"6": {
"name": "Bambenek Consulting",
"detected": false,
"reference": "https://www.bambenekconsulting.com/",
"confidence": "high",
"elapsed_ms": 0
},
"7": {
"name": "CERT Polska",
"detected": false,
"reference": "https://www.cert.pl/",
"confidence": "high",
"elapsed_ms": 0
},
"8": {
"name": "COI CZ",
"detected": false,
"reference": "https://coi.gov.cz/",
"confidence": "high",
"elapsed_ms": 0
},
"9": {
"name": "CryptoScamDB",
"detected": false,
"reference": "https://cryptoscamdb.org/",
"confidence": "high",
"elapsed_ms": 0
},
"10": {
"name": "EtherAddressLookup",
"detected": false,
"reference": "https://github.com/409H/EtherAddressLookup/",
"confidence": "high",
"elapsed_ms": 0
},
...
},
"detections": 0,
"engines_count": 42,
"detection_rate": "0%",
"scan_time_ms": 119
},
"domain_parts": {
"root_domain": "blog.google",
"subdomain": "",
"tld": "google"
},
"file_type": {
"signature": "HTML",
"extension": "",
"headers": "HTML"
},
"geo_location": {
"countries": [
"US"
]
},
"html_info": {
"title": "Official Android news and updates | Google Blog",
"description": "Read the latest news and updates about Android, the world's most popular mobile platform.",
"keywords": "",
"robots": "",
"canonical": "https://blog.google/products/android/",
"og_image": "https://storage.googleapis.com/gweb-uniblog-publish-prod/images/3D_DROID_HEAD_200x200.max-1440x810.jpg",
"article_publisher": "",
"og_site_name": "blog.google",
"twitter_site": "@google",
"generator": "",
"ld_organization": "",
"lang": "en-us"
},
"redirection": {
"found": false,
"external": false,
"url": "",
"redirects": []
},
"response_headers": {
"code": 200,
"status": "HTTP/2 200",
"content-type": "text/html; charset=utf-8",
"vary": "Accept-Encoding",
"content-security-policy": "require-trusted-types-for 'script'; connect-src 'self' cdn.ampproject.org *.google.com storage.googleapis.com https://services.google.com/fb/submissions/thekeywordtest/ https://services.google.com/fb/submissions/0a65d7733e1f11ea9701614fc033d30c/ *.gstatic.com gstatic.com *.cdn.ampproject.org *.doubleclick.net https://readaloud.googleapis.com/ *.google-analytics.com https://www.youtube.com/; img-src * data: blob:; font-src 'self' themes.googleusercontent.com *.gstatic.com https://fonts.gstatic.com storage.googleapis.com fonts.googleapis.com *.cdn.ampproject.org; style-src 'self' 'unsafe-inline' fonts.googleapis.com *.gstatic.com storage.googleapis.com *.google.com cdn.ampproject.org; object-src 'none'; media-src 'self' data: *.gstatic.com storage.googleapis.com *.googlevideo.com; base-uri 'none'; script-src 'self' 'strict-dynamic' 'unsafe-inline' *.googleanalytics.com *.google-analytics.com *.youtube.com youtube.com optimize.google.com https://s.ytimg.com *.googletagmanager.com storage.googleapis.com *.googleapis.com *.google.com cdn.ampproject.org *.gstatic.com gstatic.com googleadservices.com *.googleadservices.com 'sha256-hdPneczWRi+c9LQVo+PzNzlNr9TacChC0CW0fiDBHkI=' 'sha256-DE/j4w1a1HDIXysWgFTrJCJK6JWEcHqScfyMr9zq9R4=' 'sha256-Ehy9lGqrTi8OqqWxX1HN6hKJT7iwwYMFJ+HLjpEobO0=' 'sha256-s/yvuH0ZHyO+7N8dM5CshPem4K1PknDExYN18xHq0LI=' 'sha256-MWQdkIAX5J//suH1t5P3PFFwFUiphY0PxD6VVzbBehQ=' 'sha256-587vJAV9t9k86IMQixmyKa7lbPaDhkGzrJsdngtoiAA=' 'sha256-nlbIOie3vmdUUZjQFDMa7iipxS6Qst8pPhTLjibMsRk=' 'sha256-+LJ+tgqOXIri3+D/uJC785tov3eXewv8x+Pkenx+3Z8=' 'sha256-PnD9J8UK8zpwVizQXkEtbZOvTiv9C/05Nn81NEwPBoQ=' 'sha256-LH1mE8uiAlSGs6/ejmL47sTk8G+/Hh6T1ydVxa0idaM=' 'sha256-GuPeLJgWIkkS7hCKcSc+mQs6jTN0D8QzfW624B4OMME=' 'sha256-CDqe41szG4ZmAxS54wSNKisRTrwu1wxcuRQv09PB3Nk=' 'sha256-Xyk5Ei/Yh7DuZgaxNfbPswkpmMKHk5Jy18vkxjfPMj0=' 'sha256-Q+8W9SyZ6wnayM05rLv0YuHooUH/nnzpE2XQZJ/ekjY=' 'sha256-1lOrojGb+aoV56bZpsODLpb+j+HHbONNEpX/YqVtiUU=' 'sha256-sAsQphoZozaLVFpcda3bvT5euqcGL4MqVnizAR+Xla4=' 'sha256-ZlqdbaXB1F4Evuv/nmY3QGBLFBbrfiNndyYxbgdQn7g=' 'sha256-OEwIbDcQTxJYhU2ONmKA0LutIDdkmge2c+9IPFv5vFE=' 'sha256-Iz9ZZz/rHQFiJs2bKOHSC82gR0WdD/37qrPCB65PCFg='; frame-src 'self' www.google.com *.youtube.com youtube.com accounts.google.com *.doubleclick.net apis.google.com optimize.google.com *.google.com *.cdn.ampproject.org https://www.gstatic.com/ https://www.youtube-nocookie.com/; default-src 'self' *.gstatic.com storage.googleapis.com",
"content-language": "en-us",
"access-control-allow-origin": "*",
"content-encoding": "gzip",
"x-cloud-trace-context": "3578b5662a689995c0760c7d9e7f155c",
"date": "Fri, 19 Dec 2025 22:37:38 GMT",
"server": "Google Frontend",
"content-length": "63300"
},
"risk_score": {
"result": 0
},
"security_checks": {
"is_host_an_ipv4": false,
"is_uncommon_host_length": false,
"is_uncommon_dash_char_count": false,
"is_uncommon_dot_char_count": false,
"is_suspicious_url_pattern": false,
"is_suspicious_file_extension": false,
"is_robots_noindex": false,
"is_suspended_page": false,
"is_most_abused_tld": false,
"is_uncommon_clickable_url": false,
"is_phishing_heuristic": false,
"is_possible_emotet": false,
"is_redirect_to_search_engine": false,
"is_redirect_to_wikipedia": false,
"http_status_code": 200,
"is_http_status_error": false,
"is_http_server_error": false,
"is_http_client_error": false,
"is_suspicious_content": false,
"is_url_accessible": true,
"is_empty_page_title": false,
"is_empty_page_content": false,
"is_domain_ipv4_assigned": true,
"is_domain_ipv4_private": false,
"is_domain_ipv4_loopback": false,
"is_domain_ipv4_reserved": false,
"is_domain_ipv4_valid": true,
"is_domain_blacklisted": false,
"is_suspicious_domain": false,
"is_sinkholed_domain": false,
"is_defaced_heuristic": false,
"is_masked_file": false,
"is_risky_geo_location": false,
"is_china_country": false,
"is_nigeria_country": false,
"is_non_standard_port": false,
"is_email_address_on_url_query": false,
"is_directory_listing": false,
"is_exe_on_directory_listing": false,
"is_zip_on_directory_listing": false,
"is_php_on_directory_listing": false,
"is_doc_on_directory_listing": false,
"is_pdf_on_directory_listing": false,
"is_apk_on_directory_listing": false,
"is_linux_elf_file": false,
"is_linux_elf_file_on_free_dynamic_dns": false,
"is_linux_elf_file_on_free_hosting": false,
"is_linux_elf_file_on_ipv4": false,
"is_masked_linux_elf_file": false,
"is_masked_windows_exe_file": false,
"is_ms_office_file": false,
"is_windows_exe_file_on_free_dynamic_dns": false,
"is_windows_exe_file_on_free_hosting": false,
"is_windows_exe_file_on_ipv4": false,
"is_windows_exe_file": false,
"is_android_apk_file_on_free_dynamic_dns": false,
"is_android_apk_file_on_free_hosting": false,
"is_android_apk_file_on_ipv4": false,
"is_android_apk_file": false,
"is_external_redirect": false,
"is_risky_category": false,
"is_domain_recent": "no",
"is_domain_very_recent": "no",
"domain_creation_date": "2016-08-12",
"domain_age_in_days": 3416,
"domain_age_in_months": 110,
"domain_age_in_years": 9,
"is_credit_card_field": false,
"is_email_field": false,
"is_password_field": false,
"is_valid_https": true,
"is_ssl_blacklisted": false
},
"server_details": {
"ip": "216.239.34.21",
"hostname": "any-in-2215.1e100.net",
"continent_code": "NA",
"continent_name": "North America",
"country_code": "US",
"country_name": "United States of America",
"region_name": "California",
"city_name": "Mountain View",
"latitude": 37.38605,
"longitude": -122.08385,
"isp": "Google LLC",
"asn": "AS15169"
},
"site_category": {
"is_free_hosting": false,
"is_anonymizer": false,
"is_url_shortener": false,
"is_free_dynamic_dns": false,
"is_code_sandbox": false,
"is_form_builder": false,
"is_free_file_sharing": false,
"is_pastebin": false
},
"url_parts": {
"scheme": "https",
"host": "blog.google",
"host_nowww": "blog.google",
"port": 443,
"path": "/products/android/",
"query": ""
},
"elapsed_ms": 1385
}
```
## Response fields
The fields returned in the JSON response:
- `url` (string): URL submitted for the reputation analysis.
- `dns_records → ns` (array): NS records of the domain; each item has target, ip, country_code, country_name and isp.
- `dns_records → ns[n] → target` (string): Name server hostname.
- `dns_records → ns[n] → ip` (string): IPv4 address of the name server.
- `dns_records → ns[n] → country_code` (string): Country code (e.g. US) of the name server IP address.
- `dns_records → ns[n] → country_name` (string): Country name of the name server IP address.
- `dns_records → ns[n] → isp` (string): Internet Service Provider (ISP) of the name server IP address.
- `dns_records → mx` (array): MX records of the domain; each item has target, ip, country_code, country_name and isp.
- `dns_records → mx[n] → target` (string): Mail server hostname.
- `dns_records → mx[n] → ip` (string): IPv4 address of the mail server.
- `dns_records → mx[n] → country_code` (string): Country code (e.g. US) of the mail server IP address.
- `dns_records → mx[n] → country_name` (string): Country name of the mail server IP address.
- `dns_records → mx[n] → isp` (string): Internet Service Provider (ISP) of the mail server IP address.
- `dns_records → cname` (string): CNAME target of the host. Empty string if none.
- `domain_blacklist → engines` (object): List of scanning engines; each item has name, detected, reference, confidence and elapsed_ms.
- `domain_blacklist → engines → [index] → name` (string): Name of the scanning engine.
- `domain_blacklist → engines → [index] → detected` (boolean): Returns true if this engine flagged the submitted domain.
- `domain_blacklist → engines → [index] → reference` (string): Link to the engine's website or listing details.
- `domain_blacklist → engines → [index] → confidence` (string): Confidence of this engine detection, e.g. high.
- `domain_blacklist → engines → [index] → elapsed_ms` (integer): Time taken by this engine to complete its check, in milliseconds.
- `domain_blacklist → detections` (integer): Number of scanning engines that detected the domain.
- `domain_blacklist → engines_count` (integer): Number of scanning engines used to scan the domain.
- `domain_blacklist → detection_rate` (string): Percentage of engines that detected the domain, e.g. 5%.
- `domain_blacklist → scan_time_ms` (integer): Time taken to scan the domain across all engines, in milliseconds.
- `domain_parts → root_domain` (string): Registered root domain (e.g. `example.com`), excluding subdomains.
- `domain_parts → subdomain` (string): Subdomain portion of the host (e.g. `www`). Empty string if none.
- `domain_parts → tld` (string): Top-level domain (e.g. `com`, `org`, `co.uk`).
- `file_type → signature` (string): Returns file type by analyzing file content.
- `file_type → extension` (string): Returns file type by analyzing file extension.
- `file_type → headers` (string): Returns file type by analyzing HTTP response headers.
- `geo_location → countries` (array): List of potential countries of origin.
- `html_info → title` (string): Title of the page.
- `html_info → description` (string): Meta description of the page.
- `html_info → keywords` (string): Contents of the `meta keywords` tag.
- `html_info → robots` (string): Robots meta tag of the page.
- `html_info → canonical` (string): Canonical URL of the page.
- `html_info → og_image` (string): Open Graph image URL of the page.
- `html_info → article_publisher` (string): Contents of the article:publisher Open Graph tag. Empty string if none.
- `html_info → og_site_name` (string): Open Graph site name of the page.
- `html_info → twitter_site` (string): Twitter site handle of the page.
- `html_info → generator` (string): CMS or framework from `meta generator` tag (e.g. WordPress).
- `html_info → ld_organization` (string): Organization name found in JSON-LD structured data.
- `html_info → lang` (string): Language declared by the page, e.g. en-US.
- `redirection → found` (boolean): Returns true if the URL redirects to another URL.
- `redirection → external` (boolean): Returns true if the redirect points to an external host.
- `redirection → url` (string): Destination URL of the redirect. Empty string if none.
- `redirection → redirects` (array): List of redirect URLs followed. Empty array if none.
- `response_headers` (object): HTTP response headers returned by the server, keyed by lowercase header name.
- `risk_score → result` (integer): Returns risk score, a number between 0 (safe) and 100 (dangerous).
- `security_checks → is_host_an_ipv4` (boolean): Returns true if the URL host is an IPv4 address instead of a domain.
- `security_checks → is_uncommon_host_length` (boolean): Returns true if the host length is uncommon (such as, a very long domain).
- `security_checks → is_uncommon_dash_char_count` (boolean): Returns true if the host contains too many dash "-" characters.
- `security_checks → is_uncommon_dot_char_count` (boolean): Returns true if the host contains too many dot "." characters.
- `security_checks → is_suspicious_url_pattern` (boolean): Returns true if URL pattern is suspicious.
- `security_checks → is_suspicious_file_extension` (boolean): Returns true if URL file extension is suspicious.
- `security_checks → is_robots_noindex` (boolean): Returns true if URL "doesn't want" to be indexed on Google.
- `security_checks → is_suspended_page` (boolean): Returns true if the web page has been suspended by the hosting provider.
- `security_checks → is_most_abused_tld` (boolean): Returns true if the domain TLD is risky, e.g. .top or .tk.
- `security_checks → is_uncommon_clickable_url` (boolean): Returns true if the URL is not a commonly clickable URL.
- `security_checks → is_phishing_heuristic` (boolean): Returns true if URL content matches our phishing rules.
- `security_checks → is_possible_emotet` (boolean): Returns true if URL is potentially related to Emotet.
- `security_checks → is_redirect_to_search_engine` (boolean): Returns true if URL redirects to search engines, like google.com.
- `security_checks → is_redirect_to_wikipedia` (boolean): Returns true if the URL redirects to Wikipedia.
- `security_checks → http_status_code` (integer): HTTP status code returned by the website, e.g. 200.
- `security_checks → is_http_status_error` (boolean): Returns true if the HTTP status code is an error (4xx or 5xx).
- `security_checks → is_http_server_error` (boolean): Returns true if the HTTP status code is a server error (5xx).
- `security_checks → is_http_client_error` (boolean): Returns true if the HTTP status code is a client error (4xx).
- `security_checks → is_suspicious_content` (boolean): Returns true if URL content matches our suspicious content rules.
- `security_checks → is_url_accessible` (boolean): Returns true if URL is accessible by our servers (status code is 2xx or 3xx).
- `security_checks → is_empty_page_title` (boolean): Returns true if URL page title is empty.
- `security_checks → is_empty_page_content` (boolean): Returns true if URL page content is empty.
- `security_checks → is_domain_ipv4_assigned` (boolean): Returns true if the domain resolves to an assigned IPv4 address.
- `security_checks → is_domain_ipv4_private` (boolean): Returns true if the domain resolves to a private IPv4 address.
- `security_checks → is_domain_ipv4_loopback` (boolean): Returns true if the domain resolves to a loopback (e.g. 127.0.0.1) IPv4 address.
- `security_checks → is_domain_ipv4_reserved` (boolean): Returns true if the domain resolves to a reserved IPv4 address.
- `security_checks → is_domain_ipv4_valid` (boolean): Returns true if the domain resolves to a valid public IPv4 address.
- `security_checks → is_domain_blacklisted` (boolean): Returns true if domain is blacklisted by trusted sources.
- `security_checks → is_suspicious_domain` (boolean): Returns true if domain matches our suspicious domain rules.
- `security_checks → is_sinkholed_domain` (boolean): Returns true if domain is sinkholed (malicious).
- `security_checks → is_defaced_heuristic` (boolean): Returns true if URL page has been defaced (we use our own rules).
- `security_checks → is_masked_file` (boolean): Returns true if remote file content does not match its extension.
- `security_checks → is_risky_geo_location` (boolean): Returns true if website location is considered risky.
- `security_checks → is_china_country` (boolean): Returns true if website is potentially located in China.
- `security_checks → is_nigeria_country` (boolean): Returns true if website is potentially located in Nigeria.
- `security_checks → is_non_standard_port` (boolean): Returns true if remote port is a non-standard port.
- `security_checks → is_email_address_on_url_query` (boolean): Returns true if an email address is found in the URL query string.
- `security_checks → is_directory_listing` (boolean): Returns true if URL page is a directory listing.
- `security_checks → is_exe_on_directory_listing` (boolean): Returns true if an EXE file is found in the directory listing.
- `security_checks → is_zip_on_directory_listing` (boolean): Returns true if a .zip file is found on an open directory listing.
- `security_checks → is_php_on_directory_listing` (boolean): Returns true if a .php file is found on an open directory listing.
- `security_checks → is_doc_on_directory_listing` (boolean): Returns true if a .doc file is found on an open directory listing.
- `security_checks → is_pdf_on_directory_listing` (boolean): Returns true if a .pdf file is found on an open directory listing.
- `security_checks → is_apk_on_directory_listing` (boolean): Returns true if a .apk file is found on an open directory listing.
- `security_checks → is_linux_elf_file` (boolean): Returns true if remote file is an ELF (executable) linux file.
- `security_checks → is_linux_elf_file_on_free_dynamic_dns` (boolean): Returns true if the URL serves a Linux ELF file hosted on a free dynamic DNS domain.
- `security_checks → is_linux_elf_file_on_free_hosting` (boolean): Returns true if the URL serves a Linux ELF file hosted on a free hosting service.
- `security_checks → is_linux_elf_file_on_ipv4` (boolean): Returns true if remote URL is an ELF file on an IPv4 host.
- `security_checks → is_masked_linux_elf_file` (boolean): Returns true if the URL serves a Linux ELF file masked with a different file extension.
- `security_checks → is_masked_windows_exe_file` (boolean): Returns true if remote EXE file is masked with wrong file extension.
- `security_checks → is_ms_office_file` (boolean): Returns true if the URL serves a Microsoft Office file.
- `security_checks → is_windows_exe_file_on_free_dynamic_dns` (boolean): Returns true if the URL serves a Windows executable hosted on a free dynamic DNS domain.
- `security_checks → is_windows_exe_file_on_free_hosting` (boolean): Returns true if the URL serves a Windows executable hosted on a free hosting service.
- `security_checks → is_windows_exe_file_on_ipv4` (boolean): Returns true if the URL serves a Windows executable hosted on a bare IPv4 address.
- `security_checks → is_windows_exe_file` (boolean): Returns true if remote file is an EXE (executable) Windows file.
- `security_checks → is_android_apk_file_on_free_dynamic_dns` (boolean): Returns true if the URL serves an Android APK file hosted on a free dynamic DNS domain.
- `security_checks → is_android_apk_file_on_free_hosting` (boolean): Returns true if the URL serves an Android APK file hosted on a free hosting service.
- `security_checks → is_android_apk_file_on_ipv4` (boolean): Returns true if the URL serves an Android APK file hosted on a bare IPv4 address.
- `security_checks → is_android_apk_file` (boolean): Returns true if the URL serves an Android APK file.
- `security_checks → is_external_redirect` (boolean): Returns true if the URL redirects to an external website.
- `security_checks → is_risky_category` (boolean): Returns true if domain is a free DNS provider, free hosting provider or URL shortener.
- `security_checks → is_domain_recent` (string): Returns "yes" if domain was created less than 6 months ago, can be yes/no/unknown.
- `security_checks → is_domain_very_recent` (string): Returns "yes" if domain was created less than 30 days ago, can be yes/no/unknown.
- `security_checks → domain_creation_date` (string): Domain registration date, format is Y-m-d (empty if unknown).
- `security_checks → domain_age_in_days` (integer): Age of the domain in days (0 if unknown).
- `security_checks → domain_age_in_months` (integer): Age of the domain in months (0 if unknown).
- `security_checks → domain_age_in_years` (integer): Age of the domain in years (0 if unknown).
- `security_checks → is_credit_card_field` (boolean): Returns true if the web page contains credit card input fields.
- `security_checks → is_email_field` (boolean): Returns true if the web page contains an email input field.
- `security_checks → is_password_field` (boolean): Returns true if the web page contains password input fields.
- `security_checks → is_valid_https` (boolean): Returns true if the URL HTTPS (SSL) is valid.
- `security_checks → is_ssl_blacklisted` (boolean): Returns true if the SSL certificate is blacklisted by trusted sources.
- `server_details → ip` (string): IP address of the submitted host.
- `server_details → hostname` (string): Reverse DNS hostname (PTR record) of the host's IP address. Empty string if none.
- `server_details → continent_code` (string): Continent code (e.g. NA) of where the host's IP address is located.
- `server_details → continent_name` (string): Continent name (e.g. North America) of where the host's IP address is located.
- `server_details → country_code` (string): Country code (e.g. CN) of where the host's IP address is located.
- `server_details → country_name` (string): Country name of where the host's IP address is located.
- `server_details → region_name` (string): Region or state name of where the host's IP address is located.
- `server_details → city_name` (string): City name of where the host's IP address is located.
- `server_details → latitude` (float): Approximate latitude of the host's IP address.
- `server_details → longitude` (float): Approximate longitude of the host's IP address.
- `server_details → isp` (string): Internet Service Provider (ISP) of host's IP address.
- `server_details → asn` (string): IP Autonomous System Number (ASN), such as AS16509.
- `site_category → is_free_hosting` (boolean): Returns true if the site is a known free hosting service.
- `site_category → is_anonymizer` (boolean): Returns true if the site is a known anonymizer service.
- `site_category → is_url_shortener` (boolean): Returns true if the site is a known URL shortener.
- `site_category → is_free_dynamic_dns` (boolean): Returns true if the site is a known free dynamic DNS service.
- `site_category → is_code_sandbox` (boolean): Returns true if the site is a known code sandbox service.
- `site_category → is_form_builder` (boolean): Returns true if the site is a known online form builder.
- `site_category → is_free_file_sharing` (boolean): Returns true if the site is a known free file sharing service.
- `site_category → is_pastebin` (boolean): Returns true if the site is a known pastebin service.
- `url_parts → scheme` (string): URL scheme: `http` or `https`.
- `url_parts → host` (string): Full hostname including subdomain (e.g. `www.example.com`).
- `url_parts → host_nowww` (string): Hostname with the `www.` prefix stripped.
- `url_parts → port` (integer): Port number. Typically `80` for HTTP, `443` for HTTPS, or `0` if unspecified.
- `url_parts → path` (string): URL path component (e.g. `/contact-us/`).
- `url_parts → query` (string): URL query string. Empty string if none.
- `elapsed_ms` (integer): Time taken to process the request, in milliseconds.
---
Source:
# URL Status API Reference
Check the status of a URL: HTTP response code, redirects chain, final URL and page details, with many options to control how the URL is fetched.
Service details and pricing: [URL Status API](https://www.apivoid.com/api/url-status/)
Endpoint: `POST https://api.apivoid.com/v2/url-status`
Credit cost: 1 credit per successful request.
## Request example
Query the endpoint via an HTTPS POST request (replace `YOUR_API_KEY_HERE` with your [API key](https://docs.apivoid.com/authentication/)):
```bash
curl -X POST "https://api.apivoid.com/v2/url-status" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY_HERE" \
-d '{"url": "http://wikipedia.com"}'
```
The same request in PHP:
```php
$url = 'http://wikipedia.com';
$apiKey = 'YOUR_API_KEY_HERE';
$curl = curl_init('https://api.apivoid.com/v2/url-status');
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` (string; Required): URL to submit, e.g. `http://wikipedia.com`.
### Optional
- `follow_redirects` (boolean; Default: true): Specify if redirect URLs should be followed.
- `follow_external_redirects` (boolean; Default: true): Specify if external redirect URLs should be followed.
- `follow_meta_redirects` (boolean; Default: false): Specify if meta refresh redirects should be followed.
- `follow_header_redirects` (boolean; Default: false): Specify if header refresh redirects should be followed.
- `follow_custom_redirects` (boolean; Default: false): Specify if custom redirects (e.g. site-specific) should be followed.
- `max_redirects` (integer; Default: 10): Set maximum number of redirects to follow (max 10).
- `verify_ssl` (boolean; Default: true): Enable or disable SSL certificate verification. New response fields (when enabled): `valid_ssl`, `ssl_details`.
- `check_ssl_revocation` (boolean; Default: false): Enable SSL revocation check. Requires `"verify_ssl": true`. New response fields (when enabled): `revoked` inside `ssl_details`.
- `user_agent` (string; Default: desktop): Can be `desktop` (default, a random desktop user agent), `desktop-firefox`, `desktop-chrome`, `desktop-edge` or `mobile`.
- `referer` (string): Can be "origin" (the base URL {scheme}://{host}/), "google", "yahoo", "duckduckgo", or "bing".
- `accept_language` (string; Default: en-US): Change the Accept-Language HTTP header, format like `en` or `en-US`.
- `basic_auth_username` (string): Set username for Basic Authentication.
- `basic_auth_password` (string): Set password for Basic Authentication.
- `authorization_bearer` (string): Set the authorization bearer token.
- `connect_timeout` (integer; Default: 10): Set a connection timeout in seconds (max 15) for each followed URL.
- `include_response_headers` (boolean; Default: false): Enable the retrieval of response headers if needed. New response fields (when enabled): `response_headers`.
- `include_response_body` (boolean; Default: false): Enable the retrieval of response body (in base64) if needed. New response fields (when enabled): `body_base64`, `body_md5_hash_original`, `body_size_bytes`, `body_truncated`.
- `include_response_body_text` (boolean; Default: false): Include the response body in plain text only (no HTML tags). New response fields (when enabled): `body_text`.
- `include_favicon_details` (boolean; Default: false): Include favicon details, e.g. the base64-encoded file, MD5 hash, and image dimensions. New response fields (when enabled): `favicon_details`.
- `include_og_image_details` (boolean; Default: false): Include og:image details, e.g. the base64-encoded file, MD5 hash, and image dimensions. New response fields (when enabled): `og_image_details`.
- `include_links` (boolean; Default: false): Extract internal and external links categorized by tags, including links found in inline scripts. New response fields (when enabled): `links`.
- `include_forms` (boolean; Default: false): Extract and parse every form and all its elements (input, button, etc.). New response fields (when enabled): `forms`.
- `clean_page_content` (boolean; Default: false): Clean HTML content by removing extra whitespace and newlines.
- `custom_proxy` (string): Custom proxy URL, e.g. `http://user:pass@example.com:8000`.
- `use_premium_proxy` (boolean; Default: false): Use a premium proxy *BETA*.
- `use_http2` (boolean; Default: false): Use HTTP/2 to make the request.
## Response example
A successful request returns HTTP `200` with a JSON body:
```json
{
"url": "http://wikipedia.com/",
"unwrapped_url": "",
"debug_message": "",
"chain_status": "complete",
"redirect_stats": {
"redirects_found": 2,
"followed_redirects": 2,
"duplicate_redirects": 0,
"http_to_https_redirects": 1,
"https_to_http_redirects": 0,
"external_redirects": 1,
"same_origin_redirects": 0,
"cross_origin_redirects": 2
},
"request_stats": {
"total_requests": 3,
"failed_requests": 0,
"slow_requests": 0,
"ssl_errors": 0,
"avg_elapsed_ms": 285,
"max_elapsed_ms": 374
},
"chain": [
{
"url": "http://wikipedia.com/",
"hop": 0,
"protocol": "HTTP/1.1",
"status_code": 301,
"status_message": "Moved Permanently",
"content_type": "text/html",
"can_resolve": true,
"connection_error": false,
"redirect_to": "https://wikipedia.com/",
"redirect_type": "3xx_redirect",
"redirect_info": {
"http_to_https": true,
"https_to_http": false,
"non_www_to_www": false,
"www_to_non_www": false,
"external_redirect": false,
"same_origin": false,
"cross_origin": true,
"same_scheme": false,
"same_domain": true,
"same_host": true,
"same_port": false
},
"redirect_followed": true,
"ip": "185.15.59.226",
"url_parts": {
"scheme": "http",
"host": "wikipedia.com",
"host_nowww": "wikipedia.com",
"port": 80,
"path": "/",
"query": ""
},
"domain_parts": {
"root_domain": "wikipedia.com",
"subdomain": "",
"tld": "com"
},
"valid_ssl": false,
"elapsed_ms": 177
},
{
"url": "https://wikipedia.com/",
"hop": 1,
"protocol": "HTTP/1.1",
"status_code": 301,
"status_message": "Moved Permanently",
"content_type": "text/html",
"can_resolve": true,
"connection_error": false,
"redirected_from": "http://wikipedia.com/",
"redirect_to": "https://www.wikipedia.org/",
"redirect_type": "3xx_redirect",
"redirect_info": {
"http_to_https": false,
"https_to_http": false,
"non_www_to_www": false,
"www_to_non_www": false,
"external_redirect": true,
"same_origin": false,
"cross_origin": true,
"same_scheme": true,
"same_domain": false,
"same_host": false,
"same_port": true
},
"redirect_followed": true,
"ip": "185.15.59.226",
"url_parts": {
"scheme": "https",
"host": "wikipedia.com",
"host_nowww": "wikipedia.com",
"port": 443,
"path": "/",
"query": ""
},
"domain_parts": {
"root_domain": "wikipedia.com",
"subdomain": "",
"tld": "com"
},
"valid_ssl": true,
"ssl_details": {
"certificate_found": true,
"ssl_errors": false,
"name_match": true,
"expired": false,
"valid": true,
"self_signed": false,
"issuer": {
"common_name": "E8",
"organization": [
"Let's Encrypt"
],
"organizational_unit": [],
"location": [],
"state": [],
"country": [
"US"
]
},
"subject": {
"common_name": "wikipedia.com",
"organization": [],
"organizational_unit": [],
"location": [],
"state": [],
"country": []
},
"valid_from": "Mon, 23 Feb 2026 19:59:09 UTC",
"valid_to": "Sun, 24 May 2026 19:59:08 UTC",
"valid_days_left": 63,
"expired_from_days": 0,
"serial_number": "623dc3867ce9c736adc88a61b43e0f9e73e",
"fingerprint_sha1": "cc2a48be4cbfecc7b5cddf3783bd3b188573fdf8",
"fingerprint_sha256": "525174022c16125f127a9f34adc01c5dac8a1de93205588acc14a26d24c29ea3",
"algorithm": "ECDSA-SHA384",
"key_algorithm": "ECDSA",
"key_size": 256,
"type": "Domain Validation"
},
"elapsed_ms": 306
},
{
"url": "https://www.wikipedia.org/",
"hop": 2,
"protocol": "HTTP/1.1",
"status_code": 200,
"status_message": "OK",
"content_type": "text/html",
"can_resolve": true,
"connection_error": false,
"redirected_from": "https://wikipedia.com/",
"ip": "185.15.59.224",
"html_info": {
"title": "Wikipedia",
"description": "Wikipedia is a free online encyclopedia, created and edited by volunteers around the world and hosted by the Wikimedia Foundation.",
"keywords": "",
"author": "",
"robots": "",
"googlebot": "",
"canonical": "",
"og_image": "https://upload.wikimedia.org/wikipedia/en/thumb/8/80/Wikipedia-logo-v2.svg/2244px-Wikipedia-logo-v2.svg.png",
"og_type": "website",
"og_site_name": "",
"og_url": "",
"article_publisher": "",
"twitter_site": "",
"fb_app_id": "",
"ld_organization": "",
"ld_url": "",
"ld_logo": "",
"ld_same_as": [],
"generator": [],
"refresh_url": "",
"apple_itunes_app_id": "",
"apple_itunes_app_name": "",
"icon": "https://www.wikipedia.org/static/favicon/wikipedia.ico",
"apple_touch_icon": [
{
"size": "",
"href": "https://www.wikipedia.org/static/apple-touch/wikipedia.png"
}
],
"lang": "en",
"hreflang": [],
"h1": [
"Wikipedia The Free Encyclopedia",
"Wikipedia 25 years of the free encyclopedia"
],
"h2": [
"Unlock birthday surprises on Wikipedia",
"1,000,000+ articles",
"100,000+ articles",
"10,000+ articles",
"1,000+ articles",
"100+ articles"
],
"h3": []
},
"url_parts": {
"scheme": "https",
"host": "www.wikipedia.org",
"host_nowww": "wikipedia.org",
"port": 443,
"path": "/",
"query": ""
},
"domain_parts": {
"root_domain": "wikipedia.org",
"subdomain": "www",
"tld": "org"
},
"valid_ssl": true,
"ssl_details": {
"certificate_found": true,
"ssl_errors": false,
"name_match": true,
"expired": false,
"valid": true,
"self_signed": false,
"issuer": {
"common_name": "E8",
"organization": [
"Let's Encrypt"
],
"organizational_unit": [],
"location": [],
"state": [],
"country": [
"US"
]
},
"subject": {
"common_name": "*.wikipedia.org",
"organization": [],
"organizational_unit": [],
"location": [],
"state": [],
"country": []
},
"valid_from": "Fri, 06 Feb 2026 21:41:32 UTC",
"valid_to": "Thu, 07 May 2026 21:41:31 UTC",
"valid_days_left": 47,
"expired_from_days": 0,
"serial_number": "666163cc3790d2d917d56a0dd1c87974320",
"fingerprint_sha1": "2c9db350d2b084116c7a12bb629b7397d42da8fa",
"fingerprint_sha256": "3461aaf30b87e6ffb74969ae7a96efa4e8e1c6a2a39a213ed3abd5d17de9279f",
"algorithm": "ECDSA-SHA384",
"key_algorithm": "ECDSA",
"key_size": 256,
"type": "Domain Validation"
},
"elapsed_ms": 374
}
],
"final_url": {
"url": "https://www.wikipedia.org/",
"protocol": "HTTP/1.1",
"status": "online",
"status_code": 200,
"status_message": "OK"
},
"elapsed_ms": 857
}
```
## Response fields
The fields returned in the JSON response:
- `url` (string): The original URL submitted for checking.
- `unwrapped_url` (string): If the input is an email gateway protected link (Mimecast, Proofpoint, Barracuda, etc.), contains the extracted real destination URL that was scanned. Empty string if not applicable.
- `debug_message` (string): Populated when the chain stopped early (e.g. max redirects reached, meta refresh disabled). Empty string on a clean complete chain.
- `chain_status` (string): `complete` if the chain reached a final URL. `partial` if stopped early.
- `redirect_stats → redirects_found` (integer): Total redirects detected in the chain, including 3xx and other redirects.
- `redirect_stats → followed_redirects` (integer): Number of redirects actually followed. May be lower than `redirects_found` if a redirect was not followed.
- `redirect_stats → duplicate_redirects` (integer): Hops where the URL was already visited earlier in the chain. A non-zero value indicates a potential redirect loop.
- `redirect_stats → http_to_https_redirects` (integer): Redirects that upgraded the scheme from `http://` to `https://`.
- `redirect_stats → https_to_http_redirects` (integer): Redirects that downgraded the scheme from `https://` to `http://`. A non-zero value is a security concern.
- `redirect_stats → external_redirects` (integer): Redirects that crossed to a different root domain.
- `redirect_stats → same_origin_redirects` (integer): Redirects where scheme, host, and port all remained identical (browser origin definition).
- `redirect_stats → cross_origin_redirects` (integer): Redirects where scheme, host, or port changed. Includes subdomain changes such as non-www to www.
- `request_stats → total_requests` (integer): Total HTTP requests made across the entire chain, including the final destination hop.
- `request_stats → failed_requests` (integer): Hops that returned no HTTP response (`status_code: 0`). Covers DNS failures, private IP blocks, and connection errors.
- `request_stats → slow_requests` (integer): Hops that exceeded the slow request threshold (6000ms).
- `request_stats → ssl_errors` (integer): Hops with an invalid SSL certificate. Includes self-signed, expired, or name mismatch certificates.
- `request_stats → avg_elapsed_ms` (integer): Average response time in milliseconds across all hops in the chain.
- `request_stats → max_elapsed_ms` (integer): Slowest single hop response time in milliseconds across the chain.
- `chain` (array): Hops of the request chain; one item per request, from the submitted URL to the final destination.
- `chain[n] → url` (string): The URL requested at this hop.
- `chain[n] → hop` (integer): Zero-based index of this hop in the redirect chain.
- `chain[n] → protocol` (string): HTTP protocol version used (e.g. `HTTP/1.1`, `HTTP/2`). Empty string if the request failed.
- `chain[n] → status_code` (integer): HTTP response status code. `0` indicates no response was received (connection failure).
- `chain[n] → status_message` (string): HTTP status message or a descriptive error if the request failed (e.g. `Domain resolves to a non-public IP`).
- `chain[n] → content_type` (string): Content-Type of the response at this hop, e.g. text/html.
- `chain[n] → can_resolve` (boolean): Returns true if the domain resolved to a valid public IP address via DNS.
- `chain[n] → connection_error` (boolean): Returns true if a connection error occurred at this hop. True for DNS failures and non-public IP blocks.
- `chain[n] → redirect_to` (string): The URL this hop redirects to. Only present on redirect hops.
- `chain[n] → redirect_type` (string): `3xx_redirect` for HTTP redirects. `meta_redirect` for HTML meta refresh redirects.
- `chain[n] → redirect_info → http_to_https` (boolean): Returns true if this redirect upgraded from `http://` to `https://`.
- `chain[n] → redirect_info → https_to_http` (boolean): Returns true if this redirect downgraded from `https://` to `http://`.
- `chain[n] → redirect_info → non_www_to_www` (boolean): Returns true if this redirect added the `www.` subdomain.
- `chain[n] → redirect_info → www_to_non_www` (boolean): Returns true if this redirect removed the `www.` subdomain.
- `chain[n] → redirect_info → external_redirect` (boolean): Returns true if this redirect crossed to a different root domain.
- `chain[n] → redirect_info → same_origin` (boolean): Returns true if scheme, host, and port are all identical between source and destination (browser origin model).
- `chain[n] → redirect_info → cross_origin` (boolean): Returns true if scheme, host, or port differs between source and destination.
- `chain[n] → redirect_info → same_scheme` (boolean): Returns true if the redirect keeps the same URL scheme (http/https).
- `chain[n] → redirect_info → same_domain` (boolean): Returns true if the root domain is the same, regardless of subdomain or scheme changes.
- `chain[n] → redirect_info → same_host` (boolean): Returns true if the full host including subdomain is identical.
- `chain[n] → redirect_info → same_port` (boolean): Returns true if the port is identical between source and destination.
- `chain[n] → redirect_followed` (boolean): Returns true if the redirect at this hop was followed. False if max redirects reached or meta refresh is disabled.
- `chain[n] → ip` (string): Resolved IP address of the host at this hop.
- `chain[n] → url_parts → scheme` (string): URL scheme at this hop: `http` or `https`.
- `chain[n] → url_parts → host` (string): Full hostname including subdomain (e.g. `www.example.com`).
- `chain[n] → url_parts → host_nowww` (string): Hostname with the `www.` prefix stripped.
- `chain[n] → url_parts → port` (integer): Port number. Typically `80` for HTTP, `443` for HTTPS, or `0` if unspecified.
- `chain[n] → url_parts → path` (string): URL path component (e.g. `/contact-us/`).
- `chain[n] → url_parts → query` (string): URL query string. Empty string if none.
- `chain[n] → domain_parts → root_domain` (string): Registered root domain (e.g. `example.com`), excluding subdomains.
- `chain[n] → domain_parts → subdomain` (string): Subdomain portion of the host (e.g. `www`). Empty string if none.
- `chain[n] → domain_parts → tld` (string): Top-level domain (e.g. `com`, `org`, `co.uk`).
- `chain[n] → valid_ssl` (boolean; With: verify_ssl): Returns true if the SSL certificate passed all validation checks. Always `false` for plain HTTP hops.
- `chain[n] → elapsed_ms` (integer): Response time in milliseconds for this individual hop.
- `chain[n] → response_headers` (object; With: include_response_headers): HTTP response headers of the hop, keyed by lowercase header name.
- `chain[n] → body_base64` (string; With: include_response_body): Response body of the hop encoded in base64.
- `chain[n] → body_md5_hash_original` (string; With: include_response_body): MD5 hash of the original (untruncated) response body.
- `chain[n] → body_size_bytes` (integer; With: include_response_body): Size of the response body in bytes.
- `chain[n] → body_truncated` (boolean; With: include_response_body): Returns true if the response body was truncated.
- `chain[n] → body_text` (string; With: include_response_body_text): Visible text extracted from the response body.
- `chain[n] → redirected_from` (string): URL of the previous hop that redirected here. Only present from hop 1 onwards.
- `chain[n] → ssl_details → certificate_found` (boolean; With: verify_ssl): Returns true if an SSL certificate was found for this hop.
- `chain[n] → ssl_details → ssl_errors` (boolean; With: verify_ssl): Returns true if any SSL validation errors were detected.
- `chain[n] → ssl_details → name_match` (boolean; With: verify_ssl): Returns true if the certificate common name or SAN matches the requested hostname.
- `chain[n] → ssl_details → expired` (boolean; With: verify_ssl): Returns true if the certificate is past its expiry date.
- `chain[n] → ssl_details → revoked` (boolean; With: check_ssl_revocation): Returns true if the SSL certificate is revoked.
- `chain[n] → ssl_details → valid` (boolean; With: verify_ssl): Returns true if the certificate passed all validation checks.
- `chain[n] → ssl_details → self_signed` (boolean; With: verify_ssl): Returns true if the certificate is self-signed (issuer equals subject).
- `chain[n] → ssl_details → issuer → common_name` (string; With: verify_ssl): Common name of the Certificate Authority that issued this certificate.
- `chain[n] → ssl_details → issuer → organization` (array; With: verify_ssl): Organization name of the Certificate Authority (e.g. `Let's Encrypt`).
- `chain[n] → ssl_details → issuer → organizational_unit` (array): Organizational Unit (OU) entries of the certificate issuer. Empty array if none.
- `chain[n] → ssl_details → issuer → location` (array): Locality (L) entries of the certificate issuer. Empty array if none.
- `chain[n] → ssl_details → issuer → state` (array): State or province (ST) entries of the certificate issuer. Empty array if none.
- `chain[n] → ssl_details → issuer → country` (array): Country (C) entries of the certificate issuer. Empty array if none.
- `chain[n] → ssl_details → subject → common_name` (string; With: verify_ssl): Common name the certificate was issued for (e.g. `*.example.com`).
- `chain[n] → ssl_details → subject → organization` (array): Organization (O) entries of the certificate subject. Empty array if none.
- `chain[n] → ssl_details → subject → organizational_unit` (array): Organizational Unit (OU) entries of the certificate subject. Empty array if none.
- `chain[n] → ssl_details → subject → location` (array): Locality (L) entries of the certificate subject. Empty array if none.
- `chain[n] → ssl_details → subject → state` (array): State or province (ST) entries of the certificate subject. Empty array if none.
- `chain[n] → ssl_details → subject → country` (array): Country (C) entries of the certificate subject. Empty array if none.
- `chain[n] → ssl_details → valid_from` (string; With: verify_ssl): Certificate validity start date in UTC.
- `chain[n] → ssl_details → valid_to` (string; With: verify_ssl): Certificate expiry date in UTC.
- `chain[n] → ssl_details → valid_days_left` (integer; With: verify_ssl): Number of days until the certificate expires.
- `chain[n] → ssl_details → expired_from_days` (integer; With: verify_ssl): Number of days since the certificate expired. `0` on valid certificates.
- `chain[n] → ssl_details → serial_number` (string; With: verify_ssl): Unique serial number assigned by the Certificate Authority.
- `chain[n] → ssl_details → fingerprint_sha1` (string; With: verify_ssl): SHA-1 fingerprint of the certificate.
- `chain[n] → ssl_details → fingerprint_sha256` (string; With: verify_ssl): SHA-256 fingerprint of the certificate.
- `chain[n] → ssl_details → algorithm` (string; With: verify_ssl): Signature algorithm used (e.g. `ECDSA-SHA256`, `SHA256-RSA`).
- `chain[n] → ssl_details → key_algorithm` (string; With: verify_ssl): Public key algorithm (e.g. `RSA`, `ECDSA`).
- `chain[n] → ssl_details → key_size` (integer; With: verify_ssl): Key size in bits (e.g. `2048` for RSA, `256` for ECDSA).
- `chain[n] → ssl_details → type` (string; With: verify_ssl): Certificate validation type: `Domain Validation`, `Organization Validation`, or `Extended Validation`.
- `chain[n] → html_info → title` (string): Contents of the HTML `` tag.
- `chain[n] → html_info → description` (string): Contents of the `meta description` tag.
- `chain[n] → html_info → keywords` (string): Contents of the `meta keywords` tag.
- `chain[n] → html_info → author` (string): Contents of the `meta author` tag. Empty string if none.
- `chain[n] → html_info → robots` (string): Contents of the `meta robots` tag.
- `chain[n] → html_info → googlebot` (string): Contents of the `meta googlebot` tag. Empty string if none.
- `chain[n] → html_info → canonical` (string): Canonical URL declared via ``.
- `chain[n] → html_info → og_image` (string): Open Graph image URL (`og:image`).
- `chain[n] → html_info → og_type` (string): Open Graph content type (`og:type`).
- `chain[n] → html_info → og_site_name` (string): Open Graph site name (`og:site_name`).
- `chain[n] → html_info → og_url` (string): Open Graph URL of the page. Empty string if none.
- `chain[n] → html_info → article_publisher` (string): Contents of the article:publisher Open Graph tag. Empty string if none.
- `chain[n] → html_info → twitter_site` (string): Twitter/X site handle from `twitter:site` meta tag.
- `chain[n] → html_info → fb_app_id` (string): Facebook App ID from `fb:app_id` meta tag.
- `chain[n] → html_info → ld_organization` (string): Organization name from JSON-LD structured data.
- `chain[n] → html_info → ld_url` (string): URL from JSON-LD structured data.
- `chain[n] → html_info → ld_logo` (string): Logo URL from JSON-LD structured data.
- `chain[n] → html_info → ld_same_as` (array): sameAs URLs found in JSON-LD structured data (e.g. social profiles).
- `chain[n] → favicon_details → base64_file` (string; With: include_favicon_details): The favicon image encoded in base64.
- `chain[n] → favicon_details → md5_hash` (string; With: include_favicon_details): MD5 hash of the favicon image file.
- `chain[n] → favicon_details → image_width` (integer; With: include_favicon_details): Width of the favicon image in pixels.
- `chain[n] → favicon_details → image_height` (integer; With: include_favicon_details): Height of the favicon image in pixels.
- `chain[n] → favicon_details → file_size_bytes` (integer; With: include_favicon_details): File size of the favicon image in bytes.
- `chain[n] → favicon_details → file_size_readable` (string; With: include_favicon_details): File size in human-readable format, e.g. 2.7 KB.
- `chain[n] → og_image_details → base64_file` (string; With: include_og_image_details): The Open Graph image encoded in base64.
- `chain[n] → og_image_details → md5_hash` (string; With: include_og_image_details): MD5 hash of the Open Graph image file.
- `chain[n] → og_image_details → image_width` (integer; With: include_og_image_details): Width of the Open Graph image in pixels.
- `chain[n] → og_image_details → image_height` (integer; With: include_og_image_details): Height of the Open Graph image in pixels.
- `chain[n] → og_image_details → file_size_bytes` (integer; With: include_og_image_details): File size of the Open Graph image in bytes.
- `chain[n] → og_image_details → file_size_readable` (string; With: include_og_image_details): File size in human-readable format, e.g. 2.7 KB.
- `chain[n] → links` (object; With: include_links): Links found on the page, grouped by source tag: a, script, inline, img, link, form, iframe, embed, object.
- `chain[n] → links → [tag] → internal` (array; With: include_links): URLs of this tag group pointing to the same site.
- `chain[n] → links → [tag] → external` (array; With: include_links): URLs of this tag group pointing to external sites.
- `chain[n] → forms` (array; With: include_forms): HTML forms found on the page.
- `chain[n] → forms[n] → id` (string; With: include_forms): ID attribute of the form.
- `chain[n] → forms[n] → class` (string; With: include_forms): Class attribute of the form.
- `chain[n] → forms[n] → method` (string; With: include_forms): HTTP method of the form, e.g. post.
- `chain[n] → forms[n] → action` (string; With: include_forms): Action URL the form submits to.
- `chain[n] → forms[n] → enctype` (string; With: include_forms): Encoding type of the form, if set.
- `chain[n] → forms[n] → target` (string; With: include_forms): Target attribute of the form, if set.
- `chain[n] → forms[n] → autocomplete` (string; With: include_forms): Autocomplete attribute of the form, if set.
- `chain[n] → forms[n] → has_password_fields` (boolean; With: include_forms): Returns true if the form contains password fields.
- `chain[n] → forms[n] → has_hidden_fields` (boolean; With: include_forms): Returns true if the form contains hidden fields.
- `chain[n] → forms[n] → components` (array; With: include_forms): Form components; each item has tag, type, id, name, class, placeholder, value, required, minlength, maxlength and text.
- `chain[n] → html_info → generator` (array): CMS or framework from `meta generator` tag (e.g. WordPress).
- `chain[n] → html_info → refresh_url` (string): Target URL from a meta refresh tag. Used to detect meta redirects.
- `chain[n] → html_info → apple_itunes_app_id` (string): App ID from the apple-itunes-app meta tag. Empty string if none.
- `chain[n] → html_info → apple_itunes_app_name` (string): App name from the apple-itunes-app meta tag. Empty string if none.
- `chain[n] → html_info → icon` (string): URL of the site favicon.
- `chain[n] → html_info → apple_touch_icon` (array): Apple touch icon URLs and sizes declared on the page.
- `chain[n] → html_info → apple_touch_icon[n] → size` (string): Value of the sizes attribute, e.g. 180x180. Empty string if not specified.
- `chain[n] → html_info → apple_touch_icon[n] → href` (string): URL of the Apple touch icon.
- `chain[n] → html_info → lang` (string): Language code from the HTML `lang` attribute.
- `chain[n] → html_info → hreflang` (array): Hreflang alternate language/region URLs declared on the page.
- `chain[n] → html_info → h1` (array): All `
` tag contents found on the page.
- `chain[n] → html_info → h2` (array): All `
` tag contents found on the page.
- `chain[n] → html_info → h3` (array): Text of the H3 headings found on the page.
- `final_url → url` (string): The last URL reached after following all redirects.
- `final_url → protocol` (string): HTTP protocol version of the final response.
- `final_url → status` (string): Status of the final URL: `online` (2xx), `redirect` (3xx terminal), `client_error` (4xx), `server_error` (5xx), `offline` (no response).
- `final_url → status_code` (integer): HTTP status code of the final response. `0` if no response was received.
- `final_url → status_message` (string): HTTP status message of the final response.
- `elapsed_ms` (integer): Time taken to process the request, in milliseconds.
## Optional response fields
Several optional request parameters add extra fields to the JSON response, example:
```json
{
"url": "https://www.wikipedia.org/",
"include_response_headers": true,
"include_response_body": true,
"include_response_body_text": true,
"include_links": true,
"include_forms": true,
"include_favicon_details": true,
"include_og_image_details": true,
"verify_ssl": true,
"check_ssl_revocation": true
}
```
Each enabled option adds the following fields to the response:
- `include_response_headers` adds `response_headers` (Chain hop: inside each redirect chain hop)
- `include_response_body` adds `body_base64`, `body_md5_hash_original`, `body_size_bytes`, `body_truncated` (Chain hop: only on hops that return a `200` status code)
- `include_response_body_text` adds `body_text` (Chain hop: on chain hops that return a `200` status code)
- `include_favicon_details` adds `favicon_details` (Chain hop: on chain hops that return a `200` status code)
- `include_og_image_details` adds `og_image_details` (Chain hop: on chain hops that return a `200` status code)
- `include_links` adds `links` (Chain hop: on chain hops that return a `200` status code)
- `include_forms` adds `forms` (Chain hop: on chain hops that return a `200` status code)
- `verify_ssl` adds `valid_ssl`, `ssl_details` (Chain hop: on HTTPS hops, with certificate details)
- `check_ssl_revocation` adds `revoked` (SSL details: inside the `ssl_details` object)
Example response for the request payload above:
```json
{
"url": "https://www.wikipedia.org/",
"unwrapped_url": "",
"debug_message": "",
"chain_status": "complete",
"redirect_stats": {
"redirects_found": 0,
"followed_redirects": 0,
"duplicate_redirects": 0,
"http_to_https_redirects": 0,
"https_to_http_redirects": 0,
"external_redirects": 0,
"same_origin_redirects": 0,
"cross_origin_redirects": 0
},
"request_stats": {
"total_requests": 1,
"failed_requests": 0,
"slow_requests": 0,
"ssl_errors": 0,
"avg_elapsed_ms": 285,
"max_elapsed_ms": 374
},
"chain": [
{
"url": "https://www.wikipedia.org/",
"hop": 0,
"protocol": "HTTP/1.1",
"status_code": 200,
"status_message": "OK",
"content_type": "text/html",
"can_resolve": true,
"connection_error": false,
"ip": "208.80.154.224",
"response_headers": {
"accept-ranges": [
"bytes"
],
"age": [
"10766"
],
"cache-control": [
"s-maxage=86400, must-revalidate, max-age=3600"
],
"content-type": [
"text/html"
],
"date": [
"Thu, 05 Mar 2026 12:19:43 GMT"
],
"etag": [
"W/\"1fb73-64b80643ed380\""
],
"last-modified": [
"Mon, 23 Feb 2026 16:37:50 GMT"
],
"nel": [
"{ \"report_to\": \"wm_nel\", \"max_age\": 604800, \"failure_fraction\": 0.05, \"success_fraction\": 0.0}"
],
"report-to": [
"{ \"group\": \"wm_nel\", \"max_age\": 604800, \"endpoints\": [{ \"url\": \"https://intake-logging.wikimedia.org/v1/events?stream=w3c.reportingapi.network_error&schema_uri=/w3c/reportingapi/network_error/1.0.0\" }] }"
],
"server": [
"ATS/9.2.11"
],
"server-timing": [
"cache;desc=\"hit-front\", host;desc=\"cp6014\""
],
"set-cookie": [
"WMF-Last-Access=05-Mar-2026;Path=/;HttpOnly;secure;Expires=Mon, 06 Apr 2026 12:00:00 GMT",
"WMF-Last-Access-Global=05-Mar-2026;Path=/;Domain=.wikipedia.org;HttpOnly;secure;Expires=Mon, 06 Apr 2026 12:00:00 GMT",
"GeoIP=IT:25:Milan:45.47:9.19:v4; Path=/; secure; Domain=.wikipedia.org",
"NetworkProbeLimit=0.001;Path=/;Secure;SameSite=None;Max-Age=3600",
"WMF-Uniq=Q-g5NIrOuPSTt1PWYtcIXwMaAAAAAFvdxYk6NVLI8rtq6pxtaEKbKNRjpbIF58FU;Domain=.wikipedia.org;Path=/;HttpOnly;secure;SameSite=None;Expires=Fri, 05 Mar 2027 00:00:00 GMT"
],
"strict-transport-security": [
"max-age=106384710; includeSubDomains; preload"
],
"x-analytics": [
""
],
"x-cache": [
"cp6016 miss, cp6014 hit/137255"
],
"x-cache-status": [
"hit-front"
],
"x-client-ip": [
"2a03:f80:39:b25e::1"
],
"x-request-id": [
"c2e5f414-d4b1-4b92-a71a-6a5a89d62a9e"
]
},
"cookies": [
{
"name": "WMF-Last-Access",
"value": "05-Mar-2026",
"domain": "www.wikipedia.org",
"path": "/",
"expires": "Mon, 06 Apr 2026 12:00:00 UTC",
"size": 26,
"http_only": true,
"secure": true,
"same_site": ""
},
{
"name": "WMF-Last-Access-Global",
"value": "05-Mar-2026",
"domain": ".wikipedia.org",
"path": "/",
"expires": "Mon, 06 Apr 2026 12:00:00 UTC",
"size": 33,
"http_only": true,
"secure": true,
"same_site": ""
},
{
"name": "GeoIP",
"value": "IT:25:Milan:45.47:9.19:v4",
"domain": ".wikipedia.org",
"path": "/",
"expires": "",
"size": 30,
"http_only": false,
"secure": true,
"same_site": ""
},
{
"name": "NetworkProbeLimit",
"value": "0.001",
"domain": "www.wikipedia.org",
"path": "/",
"expires": "",
"size": 22,
"http_only": false,
"secure": true,
"same_site": "none"
},
{
"name": "WMF-Uniq",
"value": "Q-g5NIrOuPSTt1PWYtcIXwMaAAAAAFvdxYk6NVLI8rtq6pxtaEKbKNRjpbIF58FU",
"domain": ".wikipedia.org",
"path": "/",
"expires": "Fri, 05 Mar 2027 00:00:00 UTC",
"size": 72,
"http_only": true,
"secure": true,
"same_site": "none"
}
],
"body_base64": "PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIiBjbGFzcz0ibm8tanMiPgo8aGVhZD4KPG1ld...",
"body_md5_hash_original": "46371d029de140b336cb01e7041e216b",
"body_size_bytes": 129906,
"body_text": "Wikipedia Wikipedia The Free Encyclopedia \nWikipedia 25 years of the free encyclopedia \nEnglish 7,141,000+ articles...",
"body_truncated": false,
"html_info": {
"title": "Wikipedia",
"description": "Wikipedia is a free online encyclopedia, created and edited by volunteers around the world and hosted by the Wikimedia Foundation.",
"keywords": "",
"author": "",
"robots": "",
"googlebot": "",
"canonical": "",
"og_image": "https://upload.wikimedia.org/wikipedia/en/thumb/8/80/Wikipedia-logo-v2.svg/2244px-Wikipedia-logo-v2.svg.png",
"og_type": "website",
"og_site_name": "",
"og_url": "",
"article_publisher": "",
"twitter_site": "",
"fb_app_id": "",
"ld_organization": "",
"ld_url": "",
"ld_logo": "",
"ld_same_as": [],
"generator": [],
"refresh_url": "",
"apple_itunes_app_id": "",
"apple_itunes_app_name": "",
"icon": "https://www.wikipedia.org/static/favicon/wikipedia.ico",
"apple_touch_icon": [
{
"size": "",
"href": "https://www.wikipedia.org/static/apple-touch/wikipedia.png"
}
],
"lang": "en",
"hreflang": [],
"h1": [
"Wikipedia The Free Encyclopedia",
"Wikipedia 25 years of the free encyclopedia"
],
"h2": [
"Unlock birthday surprises on Wikipedia",
"1,000,000+ articles",
"100,000+ articles",
"10,000+ articles",
"1,000+ articles",
"100+ articles"
],
"h3": []
},
"links": {
"a": {
"internal": [],
"external": [
"https://my.wikipedia.org/",
"https://sat.wikipedia.org/",
"https://za.wikipedia.org/",
"https://pfl.wikipedia.org/",
"https://rm.wikipedia.org/",
"https://hu.wikipedia.org/",
...
]
},
"script": {
"internal": [
"https://www.wikipedia.org/portal/wikipedia.org/assets/js/index-90de98612a.js",
"https://www.wikipedia.org/portal/wikipedia.org/assets/js/gt-ie9-507b16b6be.js"
],
"external": []
},
"inline": {
"internal": [],
"external": []
},
"img": {
"internal": [
"https://www.wikipedia.org/portal/wikipedia.org/assets/img/Wikipedia-logo-v2.png"
],
"external": []
},
"link": {
"internal": [
"https://www.wikipedia.org/static/favicon/wikipedia.ico",
"https://www.wikipedia.org/static/apple-touch/wikipedia.png"
],
"external": [
"https://upload.wikimedia.org",
"https://wikis.world/@wikipedia",
"https://creativecommons.org/licenses/by-sa/4.0/"
]
},
"form": {
"internal": [
"https://www.wikipedia.org/search-redirect.php"
],
"external": []
},
"iframe": {
"internal": [],
"external": []
},
"embed": {
"internal": [],
"external": []
},
"object": {
"internal": [],
"external": []
}
},
"forms": [
{
"id": "search-form",
"class": "pure-form",
"method": "",
"action": "https://www.wikipedia.org/search-redirect.php",
"enctype": "",
"target": "",
"autocomplete": "",
"has_password_fields": false,
"has_hidden_fields": true,
"components": [
{
"tag": "input",
"type": "hidden",
"id": "",
"name": "family",
"class": "",
"placeholder": "",
"value": "wikipedia",
"required": false,
"minlength": "",
"maxlength": "",
"text": ""
},
{
"tag": "input",
"type": "search",
"id": "searchInput",
"name": "search",
"class": "",
"placeholder": "",
"value": "",
"required": false,
"minlength": "",
"maxlength": "",
"text": ""
},
{
"tag": "select",
"type": "",
"id": "searchLanguage",
"name": "language",
"class": "",
"placeholder": "",
"value": "",
"required": false,
"minlength": "",
"maxlength": "",
"text": ""
},
{
"tag": "button",
"type": "submit",
"id": "",
"name": "",
"class": "pure-button pure-button-primary-progressive",
"placeholder": "",
"value": "",
"required": false,
"minlength": "",
"maxlength": "",
"text": "Search"
},
{
"tag": "input",
"type": "hidden",
"id": "",
"name": "go",
"class": "",
"placeholder": "",
"value": "Go",
"required": false,
"minlength": "",
"maxlength": "",
"text": ""
}
],
"text_only": "Search Wikipedia Afrikaans Shqip العربية Asturianu Azərbaycanca...",
}
],
"favicon_details": {
"base64_file": "AAABAAMAMDAQAAEABABoBgAANgAAACAg...",
"md5_hash": "904ce6bd2ef5e1eaa6de1eb02164436b",
"image_width": 48,
"image_height": 48,
"file_size_bytes": 2734,
"file_size_readable": "2.7 KB"
},
"og_image_details": {
"base64_file": "iVBORw0KGgoAAAANSUhEUgAACMQAAAg...",
"md5_hash": "5a294517cb0e591ba2f2f07b21f7477c",
"image_width": 2244,
"image_height": 2048,
"file_size_bytes": 951071,
"file_size_readable": "928.8 KB"
},
"url_parts": {
"scheme": "https",
"host": "www.wikipedia.org",
"host_nowww": "wikipedia.org",
"port": 443,
"path": "/",
"query": ""
},
"domain_parts": {
"root_domain": "wikipedia.org",
"subdomain": "www",
"tld": "org"
},
"valid_ssl": true,
"ssl_details": {
"certificate_found": true,
"ssl_errors": false,
"name_match": true,
"expired": false,
"revoked": false,
"valid": true,
"self_signed": false,
"issuer": {
"common_name": "E8",
"organization": [
"Let's Encrypt"
],
"organizational_unit": [],
"location": [],
"state": [],
"country": [
"US"
]
},
"subject": {
"common_name": "*.wikipedia.org",
"organization": [],
"organizational_unit": [],
"location": [],
"state": [],
"country": []
},
"valid_from": "Fri, 06 Feb 2026 21:41:32 UTC",
"valid_to": "Thu, 07 May 2026 21:41:31 UTC",
"valid_days_left": 63,
"expired_from_days": 0,
"serial_number": "666163cc3790d2d917d56a0dd1c87974320",
"fingerprint_sha1": "2c9db350d2b084116c7a12bb629b7397d42da8fa",
"fingerprint_sha256": "3461aaf30b87e6ffb74969ae7a96efa4e8e1c6a2a39a213ed3abd5d17de9279f",
"algorithm": "ECDSA-SHA384",
"key_algorithm": "ECDSA",
"key_size": 256,
"type": "Domain Validation"
},
"elapsed_ms": 795
}
],
"final_url": {
"url": "https://www.wikipedia.org/",
"protocol": "HTTP/1.1",
"status": "online",
"status_code": 200,
"status_message": "OK"
},
"elapsed_ms": 795
}
```
---
Source:
# URL to PDF API Reference
Convert any URL into a printable, high quality PDF document rendered by a real browser.
Service details and pricing: [URL to PDF API](https://www.apivoid.com/api/url-to-pdf/)
Endpoint: `POST https://api.apivoid.com/v2/url-to-pdf`
Credit cost: 20 credits per successful request.
## Request example
Query the endpoint via an HTTPS POST request (replace `YOUR_API_KEY_HERE` with your [API key](https://docs.apivoid.com/authentication/)):
```bash
curl -X POST "https://api.apivoid.com/v2/url-to-pdf" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY_HERE" \
-d '{"url": "https://apple.com/"}'
```
The same request in PHP:
```php
$url = 'https://apple.com/';
$apiKey = 'YOUR_API_KEY_HERE';
$curl = curl_init('https://api.apivoid.com/v2/url-to-pdf');
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);
// Save the "base64_file" data as PDF file
if (isset($responseData['rendered_file']['base64_file'])) {
$saveAs = __DIR__ . '/document.pdf';
file_put_contents($saveAs, base64_decode($responseData['rendered_file']['base64_file']));
if (file_exists($saveAs)) {
echo '
File document.pdf saved successfully!
';
} else {
echo '
Failed to create document.pdf file.
';
}
}
} else {
print_r('An error occurred: '.$response);
}
```
## Request parameters
### Required
- `url` (string; Required): URL to submit, e.g. `https://apple.com/`. Note: ⚠ Government and educational domains are blocked.
### Optional
- `viewport_width` (integer; Default: 1920): Browser viewport width in pixels (max 5000).
- `viewport_height` (integer; Default: 1080): Browser viewport height in pixels (max 10000).
- `user_agent` (string; Default: desktop): Can be `desktop` (default, a random desktop user agent) or `mobile`.
- `accept_language` (string; Default: en-US): Change the Accept-Language HTTP header, format like `en-US`.
- `delay` (integer; Default: 0): Wait N seconds (max 10) before converting the URL to PDF.
- `basic_auth_username` (string): Set username for Basic Authentication.
- `basic_auth_password` (string): Set password for Basic Authentication.
- `authorization_bearer` (string): Set the authorization bearer token.
- `custom_header` (string): A custom header, e.g. `X-key: 690d1f9e-5a53-45ad-997d-a23143a0d068`.
- `disable_js` (boolean; Default: false): Disable JavaScript.
- `disable_popups` (boolean; Default: true): Disable alerts, cookie consents and confirmation dialogs.
- `disable_images` (boolean; Default: false): Disable loading of images.
- `disable_ads` (boolean; Default: true): Disable advertisements.
- `emulate_media` (string; Default: screen): Emulate a media type, can be screen or print.
- `pdf_papersize_width` (integer; Default: 0): Change PDF paper width in pixels (max 5000).
- `pdf_papersize_height` (integer; Default: 0): Change PDF paper height in pixels (max 10000).
- `pdf_format` (string; Default: A4): Change PDF format, can be Letter, Legal, Tabloid, Ledger, A0, A1, A2, A3, A4, A5, A6.
- `pdf_margin` (integer; Default: 0): Change PDF margin.
- `pdf_show_background` (boolean; Default: true): Show the background of the web page.
- `pdf_landscape` (boolean; Default: false): Change the PDF orientation to landscape.
- `pdf_page_ranges` (string): Select page ranges, can be 1 or 1-3 (for example).
- `pdf_scale` (float): Scale the PDF, must be between 0.1 and 2.
- `pdf_one_page` (boolean; Default: false): Try to fit the web page into a single PDF page.
## Response example
A successful request returns HTTP `200` with a JSON body:
```json
{
"url": "https://apple.com/",
"rendered_file": {
"format": "PDF",
"date_time_utc": "2024-11-29 19:00:32",
"base64_file": "JVBERi0xLjcKJeLjz9MKMSAwIG9iago8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFI+PgplbmRvYmoKMiAwIG9iago8PC9UICQUERBLEgWLA37KKoEbFrrKiINbH3rlhQsWHABhqxgQiKCg...",
"file_size_readable": "344.53 KB",
"file_size_bytes": 352795
},
"http_response": {
"final_url": "https://www.apple.com/",
"status_code": 200,
"content_type": "text/html",
"page_content_empty": false,
"ip": "69.192.160.210"
},
"html_info": {
"title": "Apple",
"description": "Discover the innovative world of Apple and shop everything iPhone, iPad, Apple Watch, Mac, and Apple TV, plus explore accessories, entertainment, and expert device support.",
"og_image": "https://www.apple.com/ac/structured-data/images/open_graph_logo.png?202110180743",
"icon": "",
"og_site_name": "Apple",
"ld_organization": "Apple",
"canonical": "https://www.apple.com/",
"robots": "",
"twitter_site": "",
"lang": "en-US"
},
"elapsed_ms": 5763
}
```
## Response fields
The fields returned in the JSON response:
- `url` (string): URL submitted for the PDF rendering.
- `rendered_file → format` (string): Format of the rendered file, e.g. PDF.
- `rendered_file → date_time_utc` (string): Date and time (UTC) of when the file was rendered.
- `rendered_file → base64_file` (string): The rendered PDF file encoded in base64.
- `rendered_file → file_size_readable` (string): File size in human-readable format, e.g. 344.53 KB.
- `rendered_file → file_size_bytes` (integer): File size in bytes.
- `http_response → final_url` (string): Final URL after following redirects.
- `http_response → status_code` (integer): HTTP status code returned by the server.
- `http_response → content_type` (string): Content type of the page, e.g. text/html.
- `http_response → page_content_empty` (boolean): Returns true if the page content is empty.
- `http_response → ip` (string): IP address of the server that served the page.
- `html_info → title` (string): Title of the page.
- `html_info → description` (string): Meta description of the page.
- `html_info → og_image` (string): Open Graph image URL of the page.
- `html_info → icon` (string): Favicon URL of the page.
- `html_info → og_site_name` (string): Open Graph site name of the page.
- `html_info → ld_organization` (string): Organization name found in JSON-LD structured data.
- `html_info → canonical` (string): Canonical URL of the page.
- `html_info → robots` (string): Robots meta tag of the page.
- `html_info → twitter_site` (string): Twitter site handle of the page.
- `html_info → lang` (string): Language declared by the page, e.g. en-US.
- `elapsed_ms` (integer): Time taken to process the request, in milliseconds.
---
Source:
# 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](https://www.apivoid.com/api/vpn-test/)
Endpoint: `POST https://api.apivoid.com/v2/vpn-test`
Credit cost: 10 credits per successful request.
## Request example
Query the endpoint via an HTTPS POST request (replace `YOUR_API_KEY_HERE` with your [API key](https://docs.apivoid.com/authentication/)):
```bash
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
- `url` (string; Required): URL to submit, e.g. `https://www.patreon.com/`. Note: ⚠ Government and educational domains are blocked.
## Response example
A successful request returns HTTP `200` with a JSON body:
```json
{
"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:
- `url` (string): URL submitted for the VPN accessibility test.
- `accessible` (boolean): Returns true if the URL is accessible from a VPN connection.
- `status_code` (integer): HTTP status code returned by the server.
- `debug_message` (string): Debug or error details about the request, if any. Empty string if none.
- `response_headers` (object): HTTP response headers returned by the server to the VPN connection, keyed by lowercase header name.
- `html_info → title` (string): Title of the page returned to the VPN connection.
- `html_info → description` (string): Meta description of the page returned to the VPN connection.
- `elapsed_ms` (integer): Time taken to process the request, in milliseconds.