curl --request POST \
--url https://api.hubapi.com/communication-preferences/v4/statuses/batch/write \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"inputs": [
{
"channel": "EMAIL",
"subscriberIdString": "<string>",
"subscriptionId": 123,
"legalBasisExplanation": "<string>"
}
]
}
'import requests
url = "https://api.hubapi.com/communication-preferences/v4/statuses/batch/write"
payload = { "inputs": [
{
"channel": "EMAIL",
"subscriberIdString": "<string>",
"subscriptionId": 123,
"legalBasisExplanation": "<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: [
{
channel: 'EMAIL',
subscriberIdString: '<string>',
subscriptionId: 123,
legalBasisExplanation: '<string>'
}
]
})
};
fetch('https://api.hubapi.com/communication-preferences/v4/statuses/batch/write', 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/v4/statuses/batch/write",
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' => [
[
'channel' => 'EMAIL',
'subscriberIdString' => '<string>',
'subscriptionId' => 123,
'legalBasisExplanation' => '<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/v4/statuses/batch/write"
payload := strings.NewReader("{\n \"inputs\": [\n {\n \"channel\": \"EMAIL\",\n \"subscriberIdString\": \"<string>\",\n \"subscriptionId\": 123,\n \"legalBasisExplanation\": \"<string>\"\n }\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/v4/statuses/batch/write")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"inputs\": [\n {\n \"channel\": \"EMAIL\",\n \"subscriberIdString\": \"<string>\",\n \"subscriptionId\": 123,\n \"legalBasisExplanation\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hubapi.com/communication-preferences/v4/statuses/batch/write")
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 {\n \"channel\": \"EMAIL\",\n \"subscriberIdString\": \"<string>\",\n \"subscriptionId\": 123,\n \"legalBasisExplanation\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"completedAt": "2023-11-07T05:31:56Z",
"results": [
{
"channel": "EMAIL",
"source": "<string>",
"subscriberIdString": "<string>",
"subscriptionId": 123,
"timestamp": "2023-11-07T05:31:56Z",
"businessUnitId": 123,
"legalBasisExplanation": "<string>",
"subscriptionName": "<string>"
}
],
"startedAt": "2023-11-07T05:31:56Z",
"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 update subscription status
Update the subscription status for a set of contacts.
curl --request POST \
--url https://api.hubapi.com/communication-preferences/v4/statuses/batch/write \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"inputs": [
{
"channel": "EMAIL",
"subscriberIdString": "<string>",
"subscriptionId": 123,
"legalBasisExplanation": "<string>"
}
]
}
'import requests
url = "https://api.hubapi.com/communication-preferences/v4/statuses/batch/write"
payload = { "inputs": [
{
"channel": "EMAIL",
"subscriberIdString": "<string>",
"subscriptionId": 123,
"legalBasisExplanation": "<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: [
{
channel: 'EMAIL',
subscriberIdString: '<string>',
subscriptionId: 123,
legalBasisExplanation: '<string>'
}
]
})
};
fetch('https://api.hubapi.com/communication-preferences/v4/statuses/batch/write', 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/v4/statuses/batch/write",
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' => [
[
'channel' => 'EMAIL',
'subscriberIdString' => '<string>',
'subscriptionId' => 123,
'legalBasisExplanation' => '<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/v4/statuses/batch/write"
payload := strings.NewReader("{\n \"inputs\": [\n {\n \"channel\": \"EMAIL\",\n \"subscriberIdString\": \"<string>\",\n \"subscriptionId\": 123,\n \"legalBasisExplanation\": \"<string>\"\n }\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/v4/statuses/batch/write")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"inputs\": [\n {\n \"channel\": \"EMAIL\",\n \"subscriberIdString\": \"<string>\",\n \"subscriptionId\": 123,\n \"legalBasisExplanation\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hubapi.com/communication-preferences/v4/statuses/batch/write")
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 {\n \"channel\": \"EMAIL\",\n \"subscriberIdString\": \"<string>\",\n \"subscriptionId\": 123,\n \"legalBasisExplanation\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"completedAt": "2023-11-07T05:31:56Z",
"results": [
{
"channel": "EMAIL",
"source": "<string>",
"subscriberIdString": "<string>",
"subscriptionId": 123,
"timestamp": "2023-11-07T05:31:56Z",
"businessUnitId": 123,
"legalBasisExplanation": "<string>",
"subscriptionName": "<string>"
}
],
"startedAt": "2023-11-07T05:31:56Z",
"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
An array of PublicStatusRequest objects, each representing the subscription status details for a specific subscriber. This property is required.
Show child attributes
Show child attributes
Response
successful operation
The date and time when the batch operation was completed.
An array containing the results of the batch operation.
Show child attributes
Show child attributes
The date and time when the batch operation started.
The current status of the batch operation, which can be PENDING, PROCESSING, CANCELED, or COMPLETE.
CANCELED, COMPLETE, PENDING, PROCESSING An array of error objects detailing any issues encountered.
Show child attributes
Show child attributes
URLs linking to related resources or documentation.
Show child attributes
Show child attributes
The number of errors encountered during the batch operation.
The date and time when the request was made.
Was this page helpful?