Batch retrieve subscription statuses
curl --request POST \
--url https://api.hubapi.com/communication-preferences/2026-03/statuses/batch/read \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"inputs": [
"<string>"
]
}
'import requests
url = "https://api.hubapi.com/communication-preferences/2026-03/statuses/batch/read"
payload = { "inputs": ["<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({inputs: ['<string>']})
};
fetch('https://api.hubapi.com/communication-preferences/2026-03/statuses/batch/read', 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.hubapi.com/communication-preferences/2026-03/statuses/batch/read",
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([
'inputs' => [
'<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.hubapi.com/communication-preferences/2026-03/statuses/batch/read"
payload := strings.NewReader("{\n \"inputs\": [\n \"<string>\"\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://api.hubapi.com/communication-preferences/2026-03/statuses/batch/read")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"inputs\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hubapi.com/communication-preferences/2026-03/statuses/batch/read")
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 \"inputs\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"completedAt": "2023-11-07T05:31:56Z",
"results": [
{
"statuses": [
{
"channel": "EMAIL",
"source": "<string>",
"status": "NOT_SPECIFIED",
"subscriberIdString": "<string>",
"subscriptionId": 123,
"timestamp": "2023-11-07T05:31:56Z",
"businessUnitId": 123,
"legalBasis": "CONSENT_WITH_NOTICE",
"legalBasisExplanation": "<string>",
"setStatusSuccessReason": "NO_STATUS_CHANGE",
"subscriptionName": "<string>"
}
],
"subscriberIdString": "<string>"
}
],
"startedAt": "2023-11-07T05:31:56Z",
"status": "CANCELED",
"links": {},
"requestedAt": "2023-11-07T05:31:56Z"
}{
"completedAt": "2023-11-07T05:31:56Z",
"results": [
{
"statuses": [
{
"channel": "EMAIL",
"source": "<string>",
"status": "NOT_SPECIFIED",
"subscriberIdString": "<string>",
"subscriptionId": 123,
"timestamp": "2023-11-07T05:31:56Z",
"businessUnitId": 123,
"legalBasis": "CONSENT_WITH_NOTICE",
"legalBasisExplanation": "<string>",
"setStatusSuccessReason": "NO_STATUS_CHANGE",
"subscriptionName": "<string>"
}
],
"subscriberIdString": "<string>"
}
],
"startedAt": "2023-11-07T05:31:56Z",
"status": "CANCELED",
"errors": [
{
"category": "<string>",
"context": {},
"errors": [
{
"message": "<string>",
"code": "<string>",
"context": "{missingScopes=[scope1, scope2]}",
"in": "<string>",
"subCategory": "<string>"
}
],
"links": {},
"message": "<string>",
"status": "<string>",
"id": "<string>",
"subCategory": {}
}
],
"links": {},
"numErrors": 123,
"requestedAt": "2023-11-07T05:31:56Z"
}{
"message": "Invalid input (details will vary based on the error)",
"correlationId": "aeb5f871-7f07-4993-9211-075dc63e7cbf",
"category": "VALIDATION_ERROR",
"links": {
"knowledge-base": "https://www.hubspot.com/products/service/knowledge-base"
}
}Batch
Batch retrieve subscription statuses
Batch retrieve subscription statuses for a set of contacts.
POST
/
communication-preferences
/
2026-03
/
statuses
/
batch
/
read
Batch retrieve subscription statuses
curl --request POST \
--url https://api.hubapi.com/communication-preferences/2026-03/statuses/batch/read \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"inputs": [
"<string>"
]
}
'import requests
url = "https://api.hubapi.com/communication-preferences/2026-03/statuses/batch/read"
payload = { "inputs": ["<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({inputs: ['<string>']})
};
fetch('https://api.hubapi.com/communication-preferences/2026-03/statuses/batch/read', 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.hubapi.com/communication-preferences/2026-03/statuses/batch/read",
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([
'inputs' => [
'<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.hubapi.com/communication-preferences/2026-03/statuses/batch/read"
payload := strings.NewReader("{\n \"inputs\": [\n \"<string>\"\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://api.hubapi.com/communication-preferences/2026-03/statuses/batch/read")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"inputs\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hubapi.com/communication-preferences/2026-03/statuses/batch/read")
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 \"inputs\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"completedAt": "2023-11-07T05:31:56Z",
"results": [
{
"statuses": [
{
"channel": "EMAIL",
"source": "<string>",
"status": "NOT_SPECIFIED",
"subscriberIdString": "<string>",
"subscriptionId": 123,
"timestamp": "2023-11-07T05:31:56Z",
"businessUnitId": 123,
"legalBasis": "CONSENT_WITH_NOTICE",
"legalBasisExplanation": "<string>",
"setStatusSuccessReason": "NO_STATUS_CHANGE",
"subscriptionName": "<string>"
}
],
"subscriberIdString": "<string>"
}
],
"startedAt": "2023-11-07T05:31:56Z",
"status": "CANCELED",
"links": {},
"requestedAt": "2023-11-07T05:31:56Z"
}{
"completedAt": "2023-11-07T05:31:56Z",
"results": [
{
"statuses": [
{
"channel": "EMAIL",
"source": "<string>",
"status": "NOT_SPECIFIED",
"subscriberIdString": "<string>",
"subscriptionId": 123,
"timestamp": "2023-11-07T05:31:56Z",
"businessUnitId": 123,
"legalBasis": "CONSENT_WITH_NOTICE",
"legalBasisExplanation": "<string>",
"setStatusSuccessReason": "NO_STATUS_CHANGE",
"subscriptionName": "<string>"
}
],
"subscriberIdString": "<string>"
}
],
"startedAt": "2023-11-07T05:31:56Z",
"status": "CANCELED",
"errors": [
{
"category": "<string>",
"context": {},
"errors": [
{
"message": "<string>",
"code": "<string>",
"context": "{missingScopes=[scope1, scope2]}",
"in": "<string>",
"subCategory": "<string>"
}
],
"links": {},
"message": "<string>",
"status": "<string>",
"id": "<string>",
"subCategory": {}
}
],
"links": {},
"numErrors": 123,
"requestedAt": "2023-11-07T05:31:56Z"
}{
"message": "Invalid input (details will vary based on the error)",
"correlationId": "aeb5f871-7f07-4993-9211-075dc63e7cbf",
"category": "VALIDATION_ERROR",
"links": {
"knowledge-base": "https://www.hubspot.com/products/service/knowledge-base"
}
}Supported products
Supported products
Required Scopes
Required Scopes
Authorizations
The access token received from the authorization server in the OAuth 2.0 flow.
Body
application/json
A list of strings representing the inputs for batch operations.
Response
successful operation
The date and time when the batch process was completed.
The array of results from the batch process, each containing subscription status information.
Show child attributes
Show child attributes
The date and time when the batch process began.
The current status of the batch process, with possible values: PENDING, PROCESSING, CANCELED, COMPLETE.
Available options:
CANCELED, COMPLETE, PENDING, PROCESSING A collection of related links associated with the batch response.
Show child attributes
Show child attributes
The date and time when the batch request was made.
Last modified on September 9, 2026
Was this page helpful?