Start a scan
curl --request POST \
--url https://app.pentest-tools.com/api/v2/scans \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"tool_id": 123,
"tool_params": {
"scan_type": "deep",
"web_details": true,
"whois": false,
"unresolved_results": false,
"search_methods": {
"passive_detection": true,
"dns_records": true,
"dns_enumeration": {
"enabled": true,
"wordlist_id": 1600
},
"ctr_search": true,
"external_api_search": true,
"bing_search": true,
"google_search": true,
"html_search": true,
"ssl_search": true,
"revdns_search": true,
"alteration_search": true,
"cname_search": true
}
},
"target_id": 123,
"target_name": "<string>",
"workspace_id": 123,
"vpn_profile_uuid": "<string>",
"max_scan_time": 1440,
"scan_original_url": false,
"redirect_level": "same_domain"
}
'import requests
url = "https://app.pentest-tools.com/api/v2/scans"
payload = {
"tool_id": 123,
"tool_params": {
"scan_type": "deep",
"web_details": True,
"whois": False,
"unresolved_results": False,
"search_methods": {
"passive_detection": True,
"dns_records": True,
"dns_enumeration": {
"enabled": True,
"wordlist_id": 1600
},
"ctr_search": True,
"external_api_search": True,
"bing_search": True,
"google_search": True,
"html_search": True,
"ssl_search": True,
"revdns_search": True,
"alteration_search": True,
"cname_search": True
}
},
"target_id": 123,
"target_name": "<string>",
"workspace_id": 123,
"vpn_profile_uuid": "<string>",
"max_scan_time": 1440,
"scan_original_url": False,
"redirect_level": "same_domain"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
tool_id: 123,
tool_params: {
scan_type: 'deep',
web_details: true,
whois: false,
unresolved_results: false,
search_methods: {
passive_detection: true,
dns_records: true,
dns_enumeration: {enabled: true, wordlist_id: 1600},
ctr_search: true,
external_api_search: true,
bing_search: true,
google_search: true,
html_search: true,
ssl_search: true,
revdns_search: true,
alteration_search: true,
cname_search: true
}
},
target_id: 123,
target_name: '<string>',
workspace_id: 123,
vpn_profile_uuid: '<string>',
max_scan_time: 1440,
scan_original_url: false,
redirect_level: 'same_domain'
})
};
fetch('https://app.pentest-tools.com/api/v2/scans', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.pentest-tools.com/api/v2/scans",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'tool_id' => 123,
'tool_params' => [
'scan_type' => 'deep',
'web_details' => true,
'whois' => false,
'unresolved_results' => false,
'search_methods' => [
'passive_detection' => true,
'dns_records' => true,
'dns_enumeration' => [
'enabled' => true,
'wordlist_id' => 1600
],
'ctr_search' => true,
'external_api_search' => true,
'bing_search' => true,
'google_search' => true,
'html_search' => true,
'ssl_search' => true,
'revdns_search' => true,
'alteration_search' => true,
'cname_search' => true
]
],
'target_id' => 123,
'target_name' => '<string>',
'workspace_id' => 123,
'vpn_profile_uuid' => '<string>',
'max_scan_time' => 1440,
'scan_original_url' => false,
'redirect_level' => 'same_domain'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.pentest-tools.com/api/v2/scans"
payload := strings.NewReader("{\n \"tool_id\": 123,\n \"tool_params\": {\n \"scan_type\": \"deep\",\n \"web_details\": true,\n \"whois\": false,\n \"unresolved_results\": false,\n \"search_methods\": {\n \"passive_detection\": true,\n \"dns_records\": true,\n \"dns_enumeration\": {\n \"enabled\": true,\n \"wordlist_id\": 1600\n },\n \"ctr_search\": true,\n \"external_api_search\": true,\n \"bing_search\": true,\n \"google_search\": true,\n \"html_search\": true,\n \"ssl_search\": true,\n \"revdns_search\": true,\n \"alteration_search\": true,\n \"cname_search\": true\n }\n },\n \"target_id\": 123,\n \"target_name\": \"<string>\",\n \"workspace_id\": 123,\n \"vpn_profile_uuid\": \"<string>\",\n \"max_scan_time\": 1440,\n \"scan_original_url\": false,\n \"redirect_level\": \"same_domain\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.pentest-tools.com/api/v2/scans")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"tool_id\": 123,\n \"tool_params\": {\n \"scan_type\": \"deep\",\n \"web_details\": true,\n \"whois\": false,\n \"unresolved_results\": false,\n \"search_methods\": {\n \"passive_detection\": true,\n \"dns_records\": true,\n \"dns_enumeration\": {\n \"enabled\": true,\n \"wordlist_id\": 1600\n },\n \"ctr_search\": true,\n \"external_api_search\": true,\n \"bing_search\": true,\n \"google_search\": true,\n \"html_search\": true,\n \"ssl_search\": true,\n \"revdns_search\": true,\n \"alteration_search\": true,\n \"cname_search\": true\n }\n },\n \"target_id\": 123,\n \"target_name\": \"<string>\",\n \"workspace_id\": 123,\n \"vpn_profile_uuid\": \"<string>\",\n \"max_scan_time\": 1440,\n \"scan_original_url\": false,\n \"redirect_level\": \"same_domain\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.pentest-tools.com/api/v2/scans")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"tool_id\": 123,\n \"tool_params\": {\n \"scan_type\": \"deep\",\n \"web_details\": true,\n \"whois\": false,\n \"unresolved_results\": false,\n \"search_methods\": {\n \"passive_detection\": true,\n \"dns_records\": true,\n \"dns_enumeration\": {\n \"enabled\": true,\n \"wordlist_id\": 1600\n },\n \"ctr_search\": true,\n \"external_api_search\": true,\n \"bing_search\": true,\n \"google_search\": true,\n \"html_search\": true,\n \"ssl_search\": true,\n \"revdns_search\": true,\n \"alteration_search\": true,\n \"cname_search\": true\n }\n },\n \"target_id\": 123,\n \"target_name\": \"<string>\",\n \"workspace_id\": 123,\n \"vpn_profile_uuid\": \"<string>\",\n \"max_scan_time\": 1440,\n \"scan_original_url\": false,\n \"redirect_level\": \"same_domain\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"created_id": 420323,
"target_id": 5426912
}
}{
"status": 401,
"message": "No API key specified"
}{
"status": 401,
"message": "No API key specified"
}{
"status": 401,
"message": "No API key specified"
}{
"status": 401,
"message": "No API key specified"
}{
"status": 401,
"message": "No API key specified"
}tool_id specifies which scanner to run. Valid values:| Tool | tool_id |
|---|---|
| Subdomain Finder | 20 |
| WHOIS | 30 |
| Port Scanner | 70 |
| URL Fuzzer | 90 |
| Virtual Hosts Finder | 160 |
| Website Scanner | 170 |
| ICMP Ping | 240 |
| SharePoint Scanner | 260 |
| WordPress Scanner | 270 |
| Drupal Scanner | 280 |
| Joomla Scanner | 290 |
| Website Recon | 310 |
| Subdomain Takeover | 320 |
| Network Scanner | 350 |
| SQLi Exploiter | 380 |
| Domain Finder | 390 |
| Password Auditor | 400 |
| SSL/TLS Scanner | 450 |
| Sniper | 490 |
| WAF Detector | 500 |
| API Scanner | 510 |
| Cloud Scanner | 520 |
| People Hunter | 530 |
| Kubernetes Scanner | 540 |
Authorizations
Use the "API key" from the profile page as the token
Body
- Subdomain Finder
- Whois Lookup
- Port Scanner
- URL Fuzzer
- Virtual Hosts Finder
- Website Scanner
- ICMP Ping
- SharePoint Scanner
- Wordpress Scanner
- Drupal Scanner
- Joomla Scanner
- Website Recon
- Network Scanner
- SQLi Exploiter
- Domain Finder
- Password Auditor
- SSL Scanner
- Sniper
- WAF Detector
- API Scanner
- Cloud Scanner
- People Hunter
- KubernetesScanner
Show child attributes
Show child attributes
only one of target_id and target_name should be used
only one of target_id and target_name should be used
Workspace where the scan is started. It has to match the workspace ID of the target
VPN profile to use for the scan. If null, there will be no VPN profile used. If not specified, the profile attached to the workspace will be used.
Maximum number of minutes that the scan should run. Not supported by: Sniper, tools with short scan duration (like Website Recon or ICMP Ping).
1 <= x <= 1440Send the report in a specific format to this URL when the scan finishes
Show child attributes
Show child attributes
If true, the original URL is passed to the scanner, even if it redirects. If false, the redirected URL will be scanned instead.
Possible values:
none- the target is passed directly to the scannercheck_accessibility- the target is checked for accessibility and an error is thrown on any redirectsame_host- only redirects within the same host are allowedsame_domain- redirects to subdomains are allowedallow_all- any redirects are allowed
none, check_accessibility, same_host, same_domain, allow_all Response
Created
Show child attributes
Show child attributes
Was this page helpful?
curl --request POST \
--url https://app.pentest-tools.com/api/v2/scans \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"tool_id": 123,
"tool_params": {
"scan_type": "deep",
"web_details": true,
"whois": false,
"unresolved_results": false,
"search_methods": {
"passive_detection": true,
"dns_records": true,
"dns_enumeration": {
"enabled": true,
"wordlist_id": 1600
},
"ctr_search": true,
"external_api_search": true,
"bing_search": true,
"google_search": true,
"html_search": true,
"ssl_search": true,
"revdns_search": true,
"alteration_search": true,
"cname_search": true
}
},
"target_id": 123,
"target_name": "<string>",
"workspace_id": 123,
"vpn_profile_uuid": "<string>",
"max_scan_time": 1440,
"scan_original_url": false,
"redirect_level": "same_domain"
}
'import requests
url = "https://app.pentest-tools.com/api/v2/scans"
payload = {
"tool_id": 123,
"tool_params": {
"scan_type": "deep",
"web_details": True,
"whois": False,
"unresolved_results": False,
"search_methods": {
"passive_detection": True,
"dns_records": True,
"dns_enumeration": {
"enabled": True,
"wordlist_id": 1600
},
"ctr_search": True,
"external_api_search": True,
"bing_search": True,
"google_search": True,
"html_search": True,
"ssl_search": True,
"revdns_search": True,
"alteration_search": True,
"cname_search": True
}
},
"target_id": 123,
"target_name": "<string>",
"workspace_id": 123,
"vpn_profile_uuid": "<string>",
"max_scan_time": 1440,
"scan_original_url": False,
"redirect_level": "same_domain"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
tool_id: 123,
tool_params: {
scan_type: 'deep',
web_details: true,
whois: false,
unresolved_results: false,
search_methods: {
passive_detection: true,
dns_records: true,
dns_enumeration: {enabled: true, wordlist_id: 1600},
ctr_search: true,
external_api_search: true,
bing_search: true,
google_search: true,
html_search: true,
ssl_search: true,
revdns_search: true,
alteration_search: true,
cname_search: true
}
},
target_id: 123,
target_name: '<string>',
workspace_id: 123,
vpn_profile_uuid: '<string>',
max_scan_time: 1440,
scan_original_url: false,
redirect_level: 'same_domain'
})
};
fetch('https://app.pentest-tools.com/api/v2/scans', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.pentest-tools.com/api/v2/scans",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'tool_id' => 123,
'tool_params' => [
'scan_type' => 'deep',
'web_details' => true,
'whois' => false,
'unresolved_results' => false,
'search_methods' => [
'passive_detection' => true,
'dns_records' => true,
'dns_enumeration' => [
'enabled' => true,
'wordlist_id' => 1600
],
'ctr_search' => true,
'external_api_search' => true,
'bing_search' => true,
'google_search' => true,
'html_search' => true,
'ssl_search' => true,
'revdns_search' => true,
'alteration_search' => true,
'cname_search' => true
]
],
'target_id' => 123,
'target_name' => '<string>',
'workspace_id' => 123,
'vpn_profile_uuid' => '<string>',
'max_scan_time' => 1440,
'scan_original_url' => false,
'redirect_level' => 'same_domain'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.pentest-tools.com/api/v2/scans"
payload := strings.NewReader("{\n \"tool_id\": 123,\n \"tool_params\": {\n \"scan_type\": \"deep\",\n \"web_details\": true,\n \"whois\": false,\n \"unresolved_results\": false,\n \"search_methods\": {\n \"passive_detection\": true,\n \"dns_records\": true,\n \"dns_enumeration\": {\n \"enabled\": true,\n \"wordlist_id\": 1600\n },\n \"ctr_search\": true,\n \"external_api_search\": true,\n \"bing_search\": true,\n \"google_search\": true,\n \"html_search\": true,\n \"ssl_search\": true,\n \"revdns_search\": true,\n \"alteration_search\": true,\n \"cname_search\": true\n }\n },\n \"target_id\": 123,\n \"target_name\": \"<string>\",\n \"workspace_id\": 123,\n \"vpn_profile_uuid\": \"<string>\",\n \"max_scan_time\": 1440,\n \"scan_original_url\": false,\n \"redirect_level\": \"same_domain\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.pentest-tools.com/api/v2/scans")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"tool_id\": 123,\n \"tool_params\": {\n \"scan_type\": \"deep\",\n \"web_details\": true,\n \"whois\": false,\n \"unresolved_results\": false,\n \"search_methods\": {\n \"passive_detection\": true,\n \"dns_records\": true,\n \"dns_enumeration\": {\n \"enabled\": true,\n \"wordlist_id\": 1600\n },\n \"ctr_search\": true,\n \"external_api_search\": true,\n \"bing_search\": true,\n \"google_search\": true,\n \"html_search\": true,\n \"ssl_search\": true,\n \"revdns_search\": true,\n \"alteration_search\": true,\n \"cname_search\": true\n }\n },\n \"target_id\": 123,\n \"target_name\": \"<string>\",\n \"workspace_id\": 123,\n \"vpn_profile_uuid\": \"<string>\",\n \"max_scan_time\": 1440,\n \"scan_original_url\": false,\n \"redirect_level\": \"same_domain\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.pentest-tools.com/api/v2/scans")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"tool_id\": 123,\n \"tool_params\": {\n \"scan_type\": \"deep\",\n \"web_details\": true,\n \"whois\": false,\n \"unresolved_results\": false,\n \"search_methods\": {\n \"passive_detection\": true,\n \"dns_records\": true,\n \"dns_enumeration\": {\n \"enabled\": true,\n \"wordlist_id\": 1600\n },\n \"ctr_search\": true,\n \"external_api_search\": true,\n \"bing_search\": true,\n \"google_search\": true,\n \"html_search\": true,\n \"ssl_search\": true,\n \"revdns_search\": true,\n \"alteration_search\": true,\n \"cname_search\": true\n }\n },\n \"target_id\": 123,\n \"target_name\": \"<string>\",\n \"workspace_id\": 123,\n \"vpn_profile_uuid\": \"<string>\",\n \"max_scan_time\": 1440,\n \"scan_original_url\": false,\n \"redirect_level\": \"same_domain\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"created_id": 420323,
"target_id": 5426912
}
}{
"status": 401,
"message": "No API key specified"
}{
"status": 401,
"message": "No API key specified"
}{
"status": 401,
"message": "No API key specified"
}{
"status": 401,
"message": "No API key specified"
}{
"status": 401,
"message": "No API key specified"
}