curl --request POST \
--url https://api.hubapi.com/crm/associations/2026-09/{fromObjectType}/{toObjectType}/batch/create \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"inputs": [
{
"from": {
"id": "<string>"
},
"to": {
"id": "<string>"
},
"types": [
{
"associationTypeId": 123
}
]
}
]
}
'import requests
url = "https://api.hubapi.com/crm/associations/2026-09/{fromObjectType}/{toObjectType}/batch/create"
payload = { "inputs": [
{
"from": { "id": "<string>" },
"to": { "id": "<string>" },
"types": [{ "associationTypeId": 123 }]
}
] }
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: [
{
from: {id: '<string>'},
to: {id: '<string>'},
types: [{associationTypeId: 123}]
}
]
})
};
fetch('https://api.hubapi.com/crm/associations/2026-09/{fromObjectType}/{toObjectType}/batch/create', 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/associations/2026-09/{fromObjectType}/{toObjectType}/batch/create",
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' => [
[
'from' => [
'id' => '<string>'
],
'to' => [
'id' => '<string>'
],
'types' => [
[
'associationTypeId' => 123
]
]
]
]
]),
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/associations/2026-09/{fromObjectType}/{toObjectType}/batch/create"
payload := strings.NewReader("{\n \"inputs\": [\n {\n \"from\": {\n \"id\": \"<string>\"\n },\n \"to\": {\n \"id\": \"<string>\"\n },\n \"types\": [\n {\n \"associationTypeId\": 123\n }\n ]\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/associations/2026-09/{fromObjectType}/{toObjectType}/batch/create")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"inputs\": [\n {\n \"from\": {\n \"id\": \"<string>\"\n },\n \"to\": {\n \"id\": \"<string>\"\n },\n \"types\": [\n {\n \"associationTypeId\": 123\n }\n ]\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hubapi.com/crm/associations/2026-09/{fromObjectType}/{toObjectType}/batch/create")
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 \"from\": {\n \"id\": \"<string>\"\n },\n \"to\": {\n \"id\": \"<string>\"\n },\n \"types\": [\n {\n \"associationTypeId\": 123\n }\n ]\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"completedAt": "2023-11-07T05:31:56Z",
"results": [
{
"fromObjectId": "<string>",
"fromObjectTypeId": "<string>",
"labels": [
"<string>"
],
"toObjectId": "<string>",
"toObjectTypeId": "<string>"
}
],
"startedAt": "2023-11-07T05:31:56Z",
"status": "CANCELED",
"links": {},
"requestedAt": "2023-11-07T05:31:56Z"
}{
"completedAt": "2023-11-07T05:31:56Z",
"results": [
{
"fromObjectId": "<string>",
"fromObjectTypeId": "<string>",
"labels": [
"<string>"
],
"toObjectId": "<string>",
"toObjectTypeId": "<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"
}
}Associate records (labeled)
Créer en lot des associations pour les objets
curl --request POST \
--url https://api.hubapi.com/crm/associations/2026-09/{fromObjectType}/{toObjectType}/batch/create \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"inputs": [
{
"from": {
"id": "<string>"
},
"to": {
"id": "<string>"
},
"types": [
{
"associationTypeId": 123
}
]
}
]
}
'import requests
url = "https://api.hubapi.com/crm/associations/2026-09/{fromObjectType}/{toObjectType}/batch/create"
payload = { "inputs": [
{
"from": { "id": "<string>" },
"to": { "id": "<string>" },
"types": [{ "associationTypeId": 123 }]
}
] }
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: [
{
from: {id: '<string>'},
to: {id: '<string>'},
types: [{associationTypeId: 123}]
}
]
})
};
fetch('https://api.hubapi.com/crm/associations/2026-09/{fromObjectType}/{toObjectType}/batch/create', 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/associations/2026-09/{fromObjectType}/{toObjectType}/batch/create",
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' => [
[
'from' => [
'id' => '<string>'
],
'to' => [
'id' => '<string>'
],
'types' => [
[
'associationTypeId' => 123
]
]
]
]
]),
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/associations/2026-09/{fromObjectType}/{toObjectType}/batch/create"
payload := strings.NewReader("{\n \"inputs\": [\n {\n \"from\": {\n \"id\": \"<string>\"\n },\n \"to\": {\n \"id\": \"<string>\"\n },\n \"types\": [\n {\n \"associationTypeId\": 123\n }\n ]\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/associations/2026-09/{fromObjectType}/{toObjectType}/batch/create")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"inputs\": [\n {\n \"from\": {\n \"id\": \"<string>\"\n },\n \"to\": {\n \"id\": \"<string>\"\n },\n \"types\": [\n {\n \"associationTypeId\": 123\n }\n ]\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hubapi.com/crm/associations/2026-09/{fromObjectType}/{toObjectType}/batch/create")
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 \"from\": {\n \"id\": \"<string>\"\n },\n \"to\": {\n \"id\": \"<string>\"\n },\n \"types\": [\n {\n \"associationTypeId\": 123\n }\n ]\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"completedAt": "2023-11-07T05:31:56Z",
"results": [
{
"fromObjectId": "<string>",
"fromObjectTypeId": "<string>",
"labels": [
"<string>"
],
"toObjectId": "<string>",
"toObjectTypeId": "<string>"
}
],
"startedAt": "2023-11-07T05:31:56Z",
"status": "CANCELED",
"links": {},
"requestedAt": "2023-11-07T05:31:56Z"
}{
"completedAt": "2023-11-07T05:31:56Z",
"results": [
{
"fromObjectId": "<string>",
"fromObjectTypeId": "<string>",
"labels": [
"<string>"
],
"toObjectId": "<string>",
"toObjectTypeId": "<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
Autorisations
The access token received from the authorization server in the OAuth 2.0 flow.
Paramètres de chemin
Le type d'objet source pour les associations.
Le type d'objet cible pour les associations.
Corps
Un tableau d'objets PublicAssociationMultiPost, chacun spécifiant les détails d'une association à créer. Cela inclut les objets source et cible ainsi que les types d'associations à appliquer.
Show child attributes
Show child attributes
Réponse
successful operation
L'horodatage du moment où le traitement du lot a été terminé, au format ISO 8601.
Un tableau de résultats pour l'opération par lots, chacun représentant un ensemble d'étiquettes entre une paire d'objets.
Show child attributes
Show child attributes
L'horodatage du moment où le traitement du lot a commencé, au format ISO 8601.
Statut de la demande de traitement par lots : « EN ATTENTE », « TRAITEMENT », « ANNULÉ » ou « TERMINÉ ».
CANCELED, COMPLETE, PENDING, PROCESSING Un objet contenant des liens pertinents relatifs à la demande de lot.
Show child attributes
Show child attributes
L'horodatage du moment où la requête de lot a été faite initialement, au format ISO 8601.