Start a scan
Queue a scan of the account’s website. Only one scan can run at a time
per account, and accounts have a daily scan limit — both come back as a
422, as does a mobile app account, which has no website to crawl.
Scanning is asynchronous: the scan is created queued, and the report
appears on the scan once its status reaches completed.
curl --request POST \
--url https://cookiechimp.com/api/v1/scans \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"scan": {
"starting_url": "https://example.com",
"max_pages": 25,
"crawl_subdomains": false
}
}
'import requests
url = "https://cookiechimp.com/api/v1/scans"
payload = { "scan": {
"starting_url": "https://example.com",
"max_pages": 25,
"crawl_subdomains": False
} }
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({
scan: {starting_url: 'https://example.com', max_pages: 25, crawl_subdomains: false}
})
};
fetch('https://cookiechimp.com/api/v1/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://cookiechimp.com/api/v1/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([
'scan' => [
'starting_url' => 'https://example.com',
'max_pages' => 25,
'crawl_subdomains' => false
]
]),
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://cookiechimp.com/api/v1/scans"
payload := strings.NewReader("{\n \"scan\": {\n \"starting_url\": \"https://example.com\",\n \"max_pages\": 25,\n \"crawl_subdomains\": false\n }\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://cookiechimp.com/api/v1/scans")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"scan\": {\n \"starting_url\": \"https://example.com\",\n \"max_pages\": 25,\n \"crawl_subdomains\": false\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://cookiechimp.com/api/v1/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 \"scan\": {\n \"starting_url\": \"https://example.com\",\n \"max_pages\": 25,\n \"crawl_subdomains\": false\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "scn1",
"status": "queued",
"starting_url": "https://example.com",
"domain": "example.com",
"max_pages": 25,
"crawl_subdomains": false,
"response_code": null,
"created_at": "2023-03-01T09:00:00Z",
"updated_at": "2023-03-01T09:00:00Z"
}
}{
"errors": [
{
"code": 400,
"message": "Specify account_id when the API key can access more than one account"
}
]
}{
"errors": [
{
"code": 401,
"message": "API key must belong to an account"
}
]
}{
"errors": [
{
"code": 403,
"message": "User must be an admin of this account"
}
]
}{
"errors": [
{
"error": "Name can't be blank"
}
]
}{
"errors": [
{
"code": 429,
"message": "Too many requests. Please retry later."
}
]
}Authorizations
API token obtained from the login endpoint or the dashboard
Query Parameters
Which account to act on, as the account's API id. Only meaningful for a user API key, which may reach several accounts — an account key already identifies exactly one and ignores this.
Accepted by the endpoints that declare it; others act on the account the key resolves to on its own.
Optional for reads, where it narrows the request to that account.
Required for writes that declare it when the key can reach more than one
account: without it the request would act on an account it picked rather
than one you named, so it is refused with a 400.
Body
Scan to queue
Show child attributes
Show child attributes
Response
Queued scan
Show child attributes
Show child attributes
{
"id": "scn1",
"status": "queued",
"starting_url": "https://example.com",
"domain": "example.com",
"max_pages": 25,
"crawl_subdomains": false,
"response_code": null,
"created_at": "2023-03-01T09:00:00Z",
"updated_at": "2023-03-01T09:00:00Z"
}
Was this page helpful?
curl --request POST \
--url https://cookiechimp.com/api/v1/scans \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"scan": {
"starting_url": "https://example.com",
"max_pages": 25,
"crawl_subdomains": false
}
}
'import requests
url = "https://cookiechimp.com/api/v1/scans"
payload = { "scan": {
"starting_url": "https://example.com",
"max_pages": 25,
"crawl_subdomains": False
} }
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({
scan: {starting_url: 'https://example.com', max_pages: 25, crawl_subdomains: false}
})
};
fetch('https://cookiechimp.com/api/v1/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://cookiechimp.com/api/v1/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([
'scan' => [
'starting_url' => 'https://example.com',
'max_pages' => 25,
'crawl_subdomains' => false
]
]),
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://cookiechimp.com/api/v1/scans"
payload := strings.NewReader("{\n \"scan\": {\n \"starting_url\": \"https://example.com\",\n \"max_pages\": 25,\n \"crawl_subdomains\": false\n }\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://cookiechimp.com/api/v1/scans")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"scan\": {\n \"starting_url\": \"https://example.com\",\n \"max_pages\": 25,\n \"crawl_subdomains\": false\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://cookiechimp.com/api/v1/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 \"scan\": {\n \"starting_url\": \"https://example.com\",\n \"max_pages\": 25,\n \"crawl_subdomains\": false\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "scn1",
"status": "queued",
"starting_url": "https://example.com",
"domain": "example.com",
"max_pages": 25,
"crawl_subdomains": false,
"response_code": null,
"created_at": "2023-03-01T09:00:00Z",
"updated_at": "2023-03-01T09:00:00Z"
}
}{
"errors": [
{
"code": 400,
"message": "Specify account_id when the API key can access more than one account"
}
]
}{
"errors": [
{
"code": 401,
"message": "API key must belong to an account"
}
]
}{
"errors": [
{
"code": 403,
"message": "User must be an admin of this account"
}
]
}{
"errors": [
{
"error": "Name can't be blank"
}
]
}{
"errors": [
{
"code": 429,
"message": "Too many requests. Please retry later."
}
]
}