Delete your BloodHound data
curl --request POST \
--url https://your-tenant.bloodhoundenterprise.io/api/v2/clear-database \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"deleteCollectedGraphData": true,
"deleteRelationships": [
"<string>"
],
"deleteFileIngestHistory": true,
"deleteDataQualityHistory": true,
"deleteAssetGroupSelectors": [
123
]
}
'import requests
url = "https://your-tenant.bloodhoundenterprise.io/api/v2/clear-database"
payload = {
"deleteCollectedGraphData": True,
"deleteRelationships": ["<string>"],
"deleteFileIngestHistory": True,
"deleteDataQualityHistory": True,
"deleteAssetGroupSelectors": [123]
}
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({
deleteCollectedGraphData: true,
deleteRelationships: ['<string>'],
deleteFileIngestHistory: true,
deleteDataQualityHistory: true,
deleteAssetGroupSelectors: [123]
})
};
fetch('https://your-tenant.bloodhoundenterprise.io/api/v2/clear-database', 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://your-tenant.bloodhoundenterprise.io/api/v2/clear-database",
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([
'deleteCollectedGraphData' => true,
'deleteRelationships' => [
'<string>'
],
'deleteFileIngestHistory' => true,
'deleteDataQualityHistory' => true,
'deleteAssetGroupSelectors' => [
123
]
]),
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://your-tenant.bloodhoundenterprise.io/api/v2/clear-database"
payload := strings.NewReader("{\n \"deleteCollectedGraphData\": true,\n \"deleteRelationships\": [\n \"<string>\"\n ],\n \"deleteFileIngestHistory\": true,\n \"deleteDataQualityHistory\": true,\n \"deleteAssetGroupSelectors\": [\n 123\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://your-tenant.bloodhoundenterprise.io/api/v2/clear-database")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"deleteCollectedGraphData\": true,\n \"deleteRelationships\": [\n \"<string>\"\n ],\n \"deleteFileIngestHistory\": true,\n \"deleteDataQualityHistory\": true,\n \"deleteAssetGroupSelectors\": [\n 123\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://your-tenant.bloodhoundenterprise.io/api/v2/clear-database")
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 \"deleteCollectedGraphData\": true,\n \"deleteRelationships\": [\n \"<string>\"\n ],\n \"deleteFileIngestHistory\": true,\n \"deleteDataQualityHistory\": true,\n \"deleteAssetGroupSelectors\": [\n 123\n ]\n}"
response = http.request(request)
puts response.read_body"[this request has no response data]"{
"http_status": 400,
"timestamp": "2024-02-19T19:27:43.866Z",
"request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"errors": [
{
"context": "clients",
"message": "The JSON payload could not be unmarshalled."
}
]
}{
"http_status": 401,
"timestamp": "2024-02-19T19:27:43.866Z",
"request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"errors": [
{
"context": "login",
"message": "Unauthorized"
}
]
}{
"http_status": 403,
"timestamp": "2024-02-19T19:27:43.866Z",
"request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"errors": [
{
"context": "clients",
"message": "You do not have permission to access this resource"
}
]
}{
"http_status": 429,
"timestamp": "2024-02-19T19:27:43.866Z",
"request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"errors": [
{
"context": "middleware",
"message": "Too many requests. Please try again later."
}
]
}{
"http_status": 500,
"timestamp": "2024-02-19T19:27:43.866Z",
"request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"errors": [
{
"context": "clients",
"message": "The request could not be handled due to an unexpected database error."
}
]
}Database
Delete your BloodHound data
Wipes your BloodHound data permanently. Specify the data to delete in the request body. Possible data includes collected graph data, relationships of specific types, custom high value selectors, file ingest history, and data quality history.
POST
/
api
/
v2
/
clear-database
Delete your BloodHound data
curl --request POST \
--url https://your-tenant.bloodhoundenterprise.io/api/v2/clear-database \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"deleteCollectedGraphData": true,
"deleteRelationships": [
"<string>"
],
"deleteFileIngestHistory": true,
"deleteDataQualityHistory": true,
"deleteAssetGroupSelectors": [
123
]
}
'import requests
url = "https://your-tenant.bloodhoundenterprise.io/api/v2/clear-database"
payload = {
"deleteCollectedGraphData": True,
"deleteRelationships": ["<string>"],
"deleteFileIngestHistory": True,
"deleteDataQualityHistory": True,
"deleteAssetGroupSelectors": [123]
}
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({
deleteCollectedGraphData: true,
deleteRelationships: ['<string>'],
deleteFileIngestHistory: true,
deleteDataQualityHistory: true,
deleteAssetGroupSelectors: [123]
})
};
fetch('https://your-tenant.bloodhoundenterprise.io/api/v2/clear-database', 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://your-tenant.bloodhoundenterprise.io/api/v2/clear-database",
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([
'deleteCollectedGraphData' => true,
'deleteRelationships' => [
'<string>'
],
'deleteFileIngestHistory' => true,
'deleteDataQualityHistory' => true,
'deleteAssetGroupSelectors' => [
123
]
]),
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://your-tenant.bloodhoundenterprise.io/api/v2/clear-database"
payload := strings.NewReader("{\n \"deleteCollectedGraphData\": true,\n \"deleteRelationships\": [\n \"<string>\"\n ],\n \"deleteFileIngestHistory\": true,\n \"deleteDataQualityHistory\": true,\n \"deleteAssetGroupSelectors\": [\n 123\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://your-tenant.bloodhoundenterprise.io/api/v2/clear-database")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"deleteCollectedGraphData\": true,\n \"deleteRelationships\": [\n \"<string>\"\n ],\n \"deleteFileIngestHistory\": true,\n \"deleteDataQualityHistory\": true,\n \"deleteAssetGroupSelectors\": [\n 123\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://your-tenant.bloodhoundenterprise.io/api/v2/clear-database")
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 \"deleteCollectedGraphData\": true,\n \"deleteRelationships\": [\n \"<string>\"\n ],\n \"deleteFileIngestHistory\": true,\n \"deleteDataQualityHistory\": true,\n \"deleteAssetGroupSelectors\": [\n 123\n ]\n}"
response = http.request(request)
puts response.read_body"[this request has no response data]"{
"http_status": 400,
"timestamp": "2024-02-19T19:27:43.866Z",
"request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"errors": [
{
"context": "clients",
"message": "The JSON payload could not be unmarshalled."
}
]
}{
"http_status": 401,
"timestamp": "2024-02-19T19:27:43.866Z",
"request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"errors": [
{
"context": "login",
"message": "Unauthorized"
}
]
}{
"http_status": 403,
"timestamp": "2024-02-19T19:27:43.866Z",
"request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"errors": [
{
"context": "clients",
"message": "You do not have permission to access this resource"
}
]
}{
"http_status": 429,
"timestamp": "2024-02-19T19:27:43.866Z",
"request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"errors": [
{
"context": "middleware",
"message": "Too many requests. Please try again later."
}
]
}{
"http_status": 500,
"timestamp": "2024-02-19T19:27:43.866Z",
"request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"errors": [
{
"context": "clients",
"message": "The request could not be handled due to an unexpected database error."
}
]
}Authorizations
JWTBearerTokenSignedRequest & RequestDate & HMACSignature
Authorization: Bearer $JWT_TOKEN
Headers
Prefer header, used to specify a custom timeout in seconds using the wait parameter as per RFC7240. Passing in wait=-1 bypasses all timeout limits when the feature is enabled.
Pattern:
^wait=(-1|[0-9]+)$Body
application/json
Response
No Content This response will contain no response body.
The response is of type string.
⌘I