curl --request POST \
--url https://api.wirespeed.co/v1/endpoint/count \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"size": 123,
"page": 123,
"search": "<string>",
"orderBy": "<string>",
"hvaOnly": true,
"onlyContained": true,
"userId": "<string>",
"showUnmanagedEndpoints": true,
"operatingSystemCategories": [],
"onlyLive": true,
"integrationIds": [
"<string>"
],
"groupIds": [
"<string>"
],
"searchAttributeKey": "<string>",
"caseSensitive": false,
"dedupeCanonicalRoots": true,
"onlyCanonicalClustersWithDuplicates": true,
"teamId": "<string>",
"canonicalClusterOfEndpointId": "<string>"
}
'import requests
url = "https://api.wirespeed.co/v1/endpoint/count"
payload = {
"size": 123,
"page": 123,
"search": "<string>",
"orderBy": "<string>",
"hvaOnly": True,
"onlyContained": True,
"userId": "<string>",
"showUnmanagedEndpoints": True,
"operatingSystemCategories": [],
"onlyLive": True,
"integrationIds": ["<string>"],
"groupIds": ["<string>"],
"searchAttributeKey": "<string>",
"caseSensitive": False,
"dedupeCanonicalRoots": True,
"onlyCanonicalClustersWithDuplicates": True,
"teamId": "<string>",
"canonicalClusterOfEndpointId": "<string>"
}
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({
size: 123,
page: 123,
search: '<string>',
orderBy: '<string>',
hvaOnly: true,
onlyContained: true,
userId: '<string>',
showUnmanagedEndpoints: true,
operatingSystemCategories: [],
onlyLive: true,
integrationIds: ['<string>'],
groupIds: ['<string>'],
searchAttributeKey: '<string>',
caseSensitive: false,
dedupeCanonicalRoots: true,
onlyCanonicalClustersWithDuplicates: true,
teamId: '<string>',
canonicalClusterOfEndpointId: '<string>'
})
};
fetch('https://api.wirespeed.co/v1/endpoint/count', 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://api.wirespeed.co/v1/endpoint/count",
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([
'size' => 123,
'page' => 123,
'search' => '<string>',
'orderBy' => '<string>',
'hvaOnly' => true,
'onlyContained' => true,
'userId' => '<string>',
'showUnmanagedEndpoints' => true,
'operatingSystemCategories' => [
],
'onlyLive' => true,
'integrationIds' => [
'<string>'
],
'groupIds' => [
'<string>'
],
'searchAttributeKey' => '<string>',
'caseSensitive' => false,
'dedupeCanonicalRoots' => true,
'onlyCanonicalClustersWithDuplicates' => true,
'teamId' => '<string>',
'canonicalClusterOfEndpointId' => '<string>'
]),
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://api.wirespeed.co/v1/endpoint/count"
payload := strings.NewReader("{\n \"size\": 123,\n \"page\": 123,\n \"search\": \"<string>\",\n \"orderBy\": \"<string>\",\n \"hvaOnly\": true,\n \"onlyContained\": true,\n \"userId\": \"<string>\",\n \"showUnmanagedEndpoints\": true,\n \"operatingSystemCategories\": [],\n \"onlyLive\": true,\n \"integrationIds\": [\n \"<string>\"\n ],\n \"groupIds\": [\n \"<string>\"\n ],\n \"searchAttributeKey\": \"<string>\",\n \"caseSensitive\": false,\n \"dedupeCanonicalRoots\": true,\n \"onlyCanonicalClustersWithDuplicates\": true,\n \"teamId\": \"<string>\",\n \"canonicalClusterOfEndpointId\": \"<string>\"\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://api.wirespeed.co/v1/endpoint/count")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"size\": 123,\n \"page\": 123,\n \"search\": \"<string>\",\n \"orderBy\": \"<string>\",\n \"hvaOnly\": true,\n \"onlyContained\": true,\n \"userId\": \"<string>\",\n \"showUnmanagedEndpoints\": true,\n \"operatingSystemCategories\": [],\n \"onlyLive\": true,\n \"integrationIds\": [\n \"<string>\"\n ],\n \"groupIds\": [\n \"<string>\"\n ],\n \"searchAttributeKey\": \"<string>\",\n \"caseSensitive\": false,\n \"dedupeCanonicalRoots\": true,\n \"onlyCanonicalClustersWithDuplicates\": true,\n \"teamId\": \"<string>\",\n \"canonicalClusterOfEndpointId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.wirespeed.co/v1/endpoint/count")
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 \"size\": 123,\n \"page\": 123,\n \"search\": \"<string>\",\n \"orderBy\": \"<string>\",\n \"hvaOnly\": true,\n \"onlyContained\": true,\n \"userId\": \"<string>\",\n \"showUnmanagedEndpoints\": true,\n \"operatingSystemCategories\": [],\n \"onlyLive\": true,\n \"integrationIds\": [\n \"<string>\"\n ],\n \"groupIds\": [\n \"<string>\"\n ],\n \"searchAttributeKey\": \"<string>\",\n \"caseSensitive\": false,\n \"dedupeCanonicalRoots\": true,\n \"onlyCanonicalClustersWithDuplicates\": true,\n \"teamId\": \"<string>\",\n \"canonicalClusterOfEndpointId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"totalCount": 123
}{
"message": "<string>",
"statusCode": 123
}Get endpoint search count
Returns total count of endpoints matching the same filters as the search endpoint. Use this to get totalCount for pagination without running the count in the search query.
curl --request POST \
--url https://api.wirespeed.co/v1/endpoint/count \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"size": 123,
"page": 123,
"search": "<string>",
"orderBy": "<string>",
"hvaOnly": true,
"onlyContained": true,
"userId": "<string>",
"showUnmanagedEndpoints": true,
"operatingSystemCategories": [],
"onlyLive": true,
"integrationIds": [
"<string>"
],
"groupIds": [
"<string>"
],
"searchAttributeKey": "<string>",
"caseSensitive": false,
"dedupeCanonicalRoots": true,
"onlyCanonicalClustersWithDuplicates": true,
"teamId": "<string>",
"canonicalClusterOfEndpointId": "<string>"
}
'import requests
url = "https://api.wirespeed.co/v1/endpoint/count"
payload = {
"size": 123,
"page": 123,
"search": "<string>",
"orderBy": "<string>",
"hvaOnly": True,
"onlyContained": True,
"userId": "<string>",
"showUnmanagedEndpoints": True,
"operatingSystemCategories": [],
"onlyLive": True,
"integrationIds": ["<string>"],
"groupIds": ["<string>"],
"searchAttributeKey": "<string>",
"caseSensitive": False,
"dedupeCanonicalRoots": True,
"onlyCanonicalClustersWithDuplicates": True,
"teamId": "<string>",
"canonicalClusterOfEndpointId": "<string>"
}
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({
size: 123,
page: 123,
search: '<string>',
orderBy: '<string>',
hvaOnly: true,
onlyContained: true,
userId: '<string>',
showUnmanagedEndpoints: true,
operatingSystemCategories: [],
onlyLive: true,
integrationIds: ['<string>'],
groupIds: ['<string>'],
searchAttributeKey: '<string>',
caseSensitive: false,
dedupeCanonicalRoots: true,
onlyCanonicalClustersWithDuplicates: true,
teamId: '<string>',
canonicalClusterOfEndpointId: '<string>'
})
};
fetch('https://api.wirespeed.co/v1/endpoint/count', 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://api.wirespeed.co/v1/endpoint/count",
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([
'size' => 123,
'page' => 123,
'search' => '<string>',
'orderBy' => '<string>',
'hvaOnly' => true,
'onlyContained' => true,
'userId' => '<string>',
'showUnmanagedEndpoints' => true,
'operatingSystemCategories' => [
],
'onlyLive' => true,
'integrationIds' => [
'<string>'
],
'groupIds' => [
'<string>'
],
'searchAttributeKey' => '<string>',
'caseSensitive' => false,
'dedupeCanonicalRoots' => true,
'onlyCanonicalClustersWithDuplicates' => true,
'teamId' => '<string>',
'canonicalClusterOfEndpointId' => '<string>'
]),
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://api.wirespeed.co/v1/endpoint/count"
payload := strings.NewReader("{\n \"size\": 123,\n \"page\": 123,\n \"search\": \"<string>\",\n \"orderBy\": \"<string>\",\n \"hvaOnly\": true,\n \"onlyContained\": true,\n \"userId\": \"<string>\",\n \"showUnmanagedEndpoints\": true,\n \"operatingSystemCategories\": [],\n \"onlyLive\": true,\n \"integrationIds\": [\n \"<string>\"\n ],\n \"groupIds\": [\n \"<string>\"\n ],\n \"searchAttributeKey\": \"<string>\",\n \"caseSensitive\": false,\n \"dedupeCanonicalRoots\": true,\n \"onlyCanonicalClustersWithDuplicates\": true,\n \"teamId\": \"<string>\",\n \"canonicalClusterOfEndpointId\": \"<string>\"\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://api.wirespeed.co/v1/endpoint/count")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"size\": 123,\n \"page\": 123,\n \"search\": \"<string>\",\n \"orderBy\": \"<string>\",\n \"hvaOnly\": true,\n \"onlyContained\": true,\n \"userId\": \"<string>\",\n \"showUnmanagedEndpoints\": true,\n \"operatingSystemCategories\": [],\n \"onlyLive\": true,\n \"integrationIds\": [\n \"<string>\"\n ],\n \"groupIds\": [\n \"<string>\"\n ],\n \"searchAttributeKey\": \"<string>\",\n \"caseSensitive\": false,\n \"dedupeCanonicalRoots\": true,\n \"onlyCanonicalClustersWithDuplicates\": true,\n \"teamId\": \"<string>\",\n \"canonicalClusterOfEndpointId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.wirespeed.co/v1/endpoint/count")
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 \"size\": 123,\n \"page\": 123,\n \"search\": \"<string>\",\n \"orderBy\": \"<string>\",\n \"hvaOnly\": true,\n \"onlyContained\": true,\n \"userId\": \"<string>\",\n \"showUnmanagedEndpoints\": true,\n \"operatingSystemCategories\": [],\n \"onlyLive\": true,\n \"integrationIds\": [\n \"<string>\"\n ],\n \"groupIds\": [\n \"<string>\"\n ],\n \"searchAttributeKey\": \"<string>\",\n \"caseSensitive\": false,\n \"dedupeCanonicalRoots\": true,\n \"onlyCanonicalClustersWithDuplicates\": true,\n \"teamId\": \"<string>\",\n \"canonicalClusterOfEndpointId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"totalCount": 123
}{
"message": "<string>",
"statusCode": 123
}Authorizations
Team API key sent as a Bearer token. Create a key in Wirespeed under Settings → Team. See https://docs.wirespeed.co/api-reference/authentication.
Body
Field to filter Critical Asset automation by
name, OS, ip, edr_id, mdm_id, integration_source_id, custom_attribute asc, desc Only return Critical Assets
Only return currently contained endpoints
Filter by specific user ID
Include unmanaged endpoints in results
Filter by OS categories (supports multiple)
Windows, Windows Server, macOS, Linux, iOS, Android, ChromeOS, Network Device, Other Only return live/online endpoints
Filter by integration IDs (supports multiple)
Filter by group IDs (supports multiple). Pass the sentinel value "ungrouped" to filter endpoints with no group memberships.
Operator for combining multiple group filters. "and" = must be in ALL groups, "or" = must be in ANY group. Defaults to "or".
and, or Custom attribute key to match when filter is custom_attribute (dot-separated path e.g. "labels")
When true, text matching uses LIKE (case-sensitive) instead of ILIKE
When true, return only canonical representative rows (canonical_id IS NULL)
When true together with dedupeCanonicalRoots, return only canonical roots that have at least one merged duplicate from another source
Filter endpoints by team ID (for service providers)
When set, return only endpoint rows in the canonical cluster containing this id (root or child)
Response
Total count of endpoints matching the search criteria
Total number of endpoints matching the search criteria

