curl --request GET \
--url https://inboxapp.com/api/v2/threads/count \
--header 'Authorization: Bearer <token>'import requests
url = "https://inboxapp.com/api/v2/threads/count"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://inboxapp.com/api/v2/threads/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://inboxapp.com/api/v2/threads/count",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://inboxapp.com/api/v2/threads/count"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://inboxapp.com/api/v2/threads/count")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://inboxapp.com/api/v2/threads/count")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"count": 0,
"capped": true
}{
"code": "invalidRequest",
"message": "<string>",
"details": {
"issues": [
{
"path": [
"<string>"
],
"message": "<string>"
}
]
},
"requestId": "<string>"
}{
"code": "unauthorized",
"message": "<string>",
"details": null,
"requestId": "<string>"
}{
"code": "platformNotAvailable",
"message": "<string>",
"details": {
"platform": "twitter"
},
"requestId": "<string>"
}{
"code": "viewNotFound",
"message": "<string>",
"details": null,
"requestId": "<string>"
}{
"code": "rateLimited",
"message": "<string>",
"details": {
"window": "minute",
"limit": 0,
"resetAt": "2026-09-14T10:32:00.000Z"
},
"requestId": "<string>"
}{
"code": "internal",
"message": "<string>",
"details": null,
"requestId": "<string>"
}{
"code": "searchUnavailable",
"message": "<string>",
"details": null,
"requestId": "<string>"
}Count threads
How many threads the filters match, as the search index counts them; a thread changed in the last moments may be counted as it was. Use it to size a folder before paging through it.
curl --request GET \
--url https://inboxapp.com/api/v2/threads/count \
--header 'Authorization: Bearer <token>'import requests
url = "https://inboxapp.com/api/v2/threads/count"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://inboxapp.com/api/v2/threads/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://inboxapp.com/api/v2/threads/count",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://inboxapp.com/api/v2/threads/count"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://inboxapp.com/api/v2/threads/count")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://inboxapp.com/api/v2/threads/count")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"count": 0,
"capped": true
}{
"code": "invalidRequest",
"message": "<string>",
"details": {
"issues": [
{
"path": [
"<string>"
],
"message": "<string>"
}
]
},
"requestId": "<string>"
}{
"code": "unauthorized",
"message": "<string>",
"details": null,
"requestId": "<string>"
}{
"code": "platformNotAvailable",
"message": "<string>",
"details": {
"platform": "twitter"
},
"requestId": "<string>"
}{
"code": "viewNotFound",
"message": "<string>",
"details": null,
"requestId": "<string>"
}{
"code": "rateLimited",
"message": "<string>",
"details": {
"window": "minute",
"limit": 0,
"resetAt": "2026-09-14T10:32:00.000Z"
},
"requestId": "<string>"
}{
"code": "internal",
"message": "<string>",
"details": null,
"requestId": "<string>"
}{
"code": "searchUnavailable",
"message": "<string>",
"details": null,
"requestId": "<string>"
}Query Parameters
Threads of these account links. Repeat the key to match any of several.
^[0-9a-z]+$Repeat the key to match any of several.
The platform. Every team can use twitter, linkedin, whatsapp; a team may have others enabled.
Threads with these contacts. With accountLinkId, finds the thread between an account and a contact. Repeat the key to match any of several.
^[0-9a-z]+$A view's id from List views: lists the threads that view lists, in place of folder. Every other filter narrows it. A cursor issued for a saved view is invalidCursor once the view changes.
1Defaults to inbox, threads that are neither archived nor requests. noReply is the inbox threads whose latest activity is inbound. requests holds unarchived threads where isRequest is true. archived includes requests. all spans every folder. Every other filter narrows the folder. Each folder is also a view: inbox, awaitingReply for noReply, requests, archived and all.
inbox, noReply, requests, archived, all Threads whose contact has one of these tags. Repeat the key to match any of several.
A tag, by ID or by name. Names match ignoring case and accents. When a value is one tag's ID and another's name, the ID wins.
Threads whose contact has one of these statuses. Repeat the key to match any of several.
A status, by ID or by name. Names match ignoring case and accents. When a value is one status's ID and another's name, the ID wins.
Threads whose assigneeId, the thread's own assignee or else its contact's, is one of these members. Repeat the key to match any of several.
^[0-9a-z]+$true keeps threads with no assignee, including through their contact. Not combinable with assigneeId.
Threads these campaigns sent a message in. Campaign sends archive the thread, so pair it with folder=archived or all. Repeat the key to match any of several.
^[0-9a-z]+$Was this page helpful?