curl --request POST \
--url https://api.hubapi.com/crm/lists/2026-09-beta/records/memberships/batch/read \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"inputs": [
{
"objectTypeId": "<string>",
"recordId": "<string>"
}
]
}
'import requests
url = "https://api.hubapi.com/crm/lists/2026-09-beta/records/memberships/batch/read"
payload = { "inputs": [
{
"objectTypeId": "<string>",
"recordId": "<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: [{objectTypeId: '<string>', recordId: '<string>'}]})
};
fetch('https://api.hubapi.com/crm/lists/2026-09-beta/records/memberships/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/crm/lists/2026-09-beta/records/memberships/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' => [
[
'objectTypeId' => '<string>',
'recordId' => '<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/crm/lists/2026-09-beta/records/memberships/batch/read"
payload := strings.NewReader("{\n \"inputs\": [\n {\n \"objectTypeId\": \"<string>\",\n \"recordId\": \"<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/crm/lists/2026-09-beta/records/memberships/batch/read")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"inputs\": [\n {\n \"objectTypeId\": \"<string>\",\n \"recordId\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hubapi.com/crm/lists/2026-09-beta/records/memberships/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 {\n \"objectTypeId\": \"<string>\",\n \"recordId\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"completedAt": "2023-11-07T05:31:56Z",
"results": [
{
"objectTypeId": "<string>",
"recordId": "<string>",
"recordListMemberships": [
{
"firstAddedTimestamp": "2023-11-07T05:31:56Z",
"lastAddedTimestamp": "2023-11-07T05:31:56Z",
"listId": "<string>",
"listVersion": 123,
"isPublicList": true
}
]
}
],
"startedAt": "2023-11-07T05:31:56Z",
"links": {},
"requestedAt": "2023-11-07T05:31:56Z"
}{
"completedAt": "2023-11-07T05:31:56Z",
"results": [
{
"objectTypeId": "<string>",
"recordId": "<string>",
"recordListMemberships": [
{
"firstAddedTimestamp": "2023-11-07T05:31:56Z",
"lastAddedTimestamp": "2023-11-07T05:31:56Z",
"listId": "<string>",
"listVersion": 123,
"isPublicList": true
}
]
}
],
"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 read memberships
Retrieve batch membership information for records within specified lists. This endpoint is useful for obtaining membership details in bulk, allowing for efficient data retrieval when dealing with multiple records.
curl --request POST \
--url https://api.hubapi.com/crm/lists/2026-09-beta/records/memberships/batch/read \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"inputs": [
{
"objectTypeId": "<string>",
"recordId": "<string>"
}
]
}
'import requests
url = "https://api.hubapi.com/crm/lists/2026-09-beta/records/memberships/batch/read"
payload = { "inputs": [
{
"objectTypeId": "<string>",
"recordId": "<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: [{objectTypeId: '<string>', recordId: '<string>'}]})
};
fetch('https://api.hubapi.com/crm/lists/2026-09-beta/records/memberships/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/crm/lists/2026-09-beta/records/memberships/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' => [
[
'objectTypeId' => '<string>',
'recordId' => '<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/crm/lists/2026-09-beta/records/memberships/batch/read"
payload := strings.NewReader("{\n \"inputs\": [\n {\n \"objectTypeId\": \"<string>\",\n \"recordId\": \"<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/crm/lists/2026-09-beta/records/memberships/batch/read")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"inputs\": [\n {\n \"objectTypeId\": \"<string>\",\n \"recordId\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hubapi.com/crm/lists/2026-09-beta/records/memberships/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 {\n \"objectTypeId\": \"<string>\",\n \"recordId\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"completedAt": "2023-11-07T05:31:56Z",
"results": [
{
"objectTypeId": "<string>",
"recordId": "<string>",
"recordListMemberships": [
{
"firstAddedTimestamp": "2023-11-07T05:31:56Z",
"lastAddedTimestamp": "2023-11-07T05:31:56Z",
"listId": "<string>",
"listVersion": 123,
"isPublicList": true
}
]
}
],
"startedAt": "2023-11-07T05:31:56Z",
"links": {},
"requestedAt": "2023-11-07T05:31:56Z"
}{
"completedAt": "2023-11-07T05:31:56Z",
"results": [
{
"objectTypeId": "<string>",
"recordId": "<string>",
"recordListMemberships": [
{
"firstAddedTimestamp": "2023-11-07T05:31:56Z",
"lastAddedTimestamp": "2023-11-07T05:31:56Z",
"listId": "<string>",
"listVersion": 123,
"isPublicList": true
}
]
}
],
"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 record ID inputs. Each element is a string representing a unique record ID to be processed in the batch operation.
Show child attributes
Show child attributes
Response
successful operation
The date and time when the batch operation was completed, in ISO 8601 format.
An array of results from the batch operation, each containing record IDs and their associated memberships.
Show child attributes
Show child attributes
The date and time when the batch operation started, in ISO 8601 format.
The current status of the batch operation. Valid values include 'PENDING', 'PROCESSING', 'CANCELED', and 'COMPLETE'.
CANCELED, COMPLETE, PENDING, PROCESSING An object containing additional links related to the batch operation.
Show child attributes
Show child attributes
The date and time when the batch operation was requested, in ISO 8601 format.
Was this page helpful?