curl --request POST \
--url https://api.hubapi.com/crm/objects/2026-09/projects/batch/create \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"inputs": [
{
"associations": [
{
"to": {
"id": "<string>"
},
"types": [
{
"associationTypeId": 123
}
]
}
],
"properties": {},
"objectWriteTraceId": "<string>"
}
]
}
'import requests
url = "https://api.hubapi.com/crm/objects/2026-09/projects/batch/create"
payload = { "inputs": [
{
"associations": [
{
"to": { "id": "<string>" },
"types": [{ "associationTypeId": 123 }]
}
],
"properties": {},
"objectWriteTraceId": "<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: [
{
associations: [{to: {id: '<string>'}, types: [{associationTypeId: 123}]}],
properties: {},
objectWriteTraceId: '<string>'
}
]
})
};
fetch('https://api.hubapi.com/crm/objects/2026-09/projects/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/objects/2026-09/projects/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' => [
[
'associations' => [
[
'to' => [
'id' => '<string>'
],
'types' => [
[
'associationTypeId' => 123
]
]
]
],
'properties' => [
],
'objectWriteTraceId' => '<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/objects/2026-09/projects/batch/create"
payload := strings.NewReader("{\n \"inputs\": [\n {\n \"associations\": [\n {\n \"to\": {\n \"id\": \"<string>\"\n },\n \"types\": [\n {\n \"associationTypeId\": 123\n }\n ]\n }\n ],\n \"properties\": {},\n \"objectWriteTraceId\": \"<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/objects/2026-09/projects/batch/create")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"inputs\": [\n {\n \"associations\": [\n {\n \"to\": {\n \"id\": \"<string>\"\n },\n \"types\": [\n {\n \"associationTypeId\": 123\n }\n ]\n }\n ],\n \"properties\": {},\n \"objectWriteTraceId\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hubapi.com/crm/objects/2026-09/projects/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 \"associations\": [\n {\n \"to\": {\n \"id\": \"<string>\"\n },\n \"types\": [\n {\n \"associationTypeId\": 123\n }\n ]\n }\n ],\n \"properties\": {},\n \"objectWriteTraceId\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"completedAt": "2023-11-07T05:31:56Z",
"results": [
{
"archived": true,
"createdAt": "2023-11-07T05:31:56Z",
"id": "<string>",
"properties": {},
"updatedAt": "2023-11-07T05:31:56Z",
"archivedAt": "2023-11-07T05:31:56Z",
"objectWriteTraceId": "<string>",
"propertiesWithHistory": {},
"url": "<string>",
"warnings": [
{
"category": "<string>",
"context": {},
"message": "<string>"
}
]
}
],
"startedAt": "2023-11-07T05:31:56Z",
"status": "CANCELED",
"links": {},
"requestedAt": "2023-11-07T05:31:56Z"
}{
"completedAt": "2023-11-07T05:31:56Z",
"results": [
{
"archived": true,
"createdAt": "2023-11-07T05:31:56Z",
"id": "<string>",
"properties": {},
"updatedAt": "2023-11-07T05:31:56Z",
"archivedAt": "2023-11-07T05:31:56Z",
"objectWriteTraceId": "<string>",
"propertiesWithHistory": {},
"url": "<string>",
"warnings": [
{
"category": "<string>",
"context": {},
"message": "<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"
}
}Create a batch of projects
Create a batch of CRM objects with specified properties in HubSpot. This endpoint allows you to create multiple objects in a single request, making it efficient for bulk operations. The response includes the created objects along with their IDs. Use this endpoint to streamline the creation of large datasets within your CRM.
curl --request POST \
--url https://api.hubapi.com/crm/objects/2026-09/projects/batch/create \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"inputs": [
{
"associations": [
{
"to": {
"id": "<string>"
},
"types": [
{
"associationTypeId": 123
}
]
}
],
"properties": {},
"objectWriteTraceId": "<string>"
}
]
}
'import requests
url = "https://api.hubapi.com/crm/objects/2026-09/projects/batch/create"
payload = { "inputs": [
{
"associations": [
{
"to": { "id": "<string>" },
"types": [{ "associationTypeId": 123 }]
}
],
"properties": {},
"objectWriteTraceId": "<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: [
{
associations: [{to: {id: '<string>'}, types: [{associationTypeId: 123}]}],
properties: {},
objectWriteTraceId: '<string>'
}
]
})
};
fetch('https://api.hubapi.com/crm/objects/2026-09/projects/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/objects/2026-09/projects/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' => [
[
'associations' => [
[
'to' => [
'id' => '<string>'
],
'types' => [
[
'associationTypeId' => 123
]
]
]
],
'properties' => [
],
'objectWriteTraceId' => '<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/objects/2026-09/projects/batch/create"
payload := strings.NewReader("{\n \"inputs\": [\n {\n \"associations\": [\n {\n \"to\": {\n \"id\": \"<string>\"\n },\n \"types\": [\n {\n \"associationTypeId\": 123\n }\n ]\n }\n ],\n \"properties\": {},\n \"objectWriteTraceId\": \"<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/objects/2026-09/projects/batch/create")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"inputs\": [\n {\n \"associations\": [\n {\n \"to\": {\n \"id\": \"<string>\"\n },\n \"types\": [\n {\n \"associationTypeId\": 123\n }\n ]\n }\n ],\n \"properties\": {},\n \"objectWriteTraceId\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hubapi.com/crm/objects/2026-09/projects/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 \"associations\": [\n {\n \"to\": {\n \"id\": \"<string>\"\n },\n \"types\": [\n {\n \"associationTypeId\": 123\n }\n ]\n }\n ],\n \"properties\": {},\n \"objectWriteTraceId\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"completedAt": "2023-11-07T05:31:56Z",
"results": [
{
"archived": true,
"createdAt": "2023-11-07T05:31:56Z",
"id": "<string>",
"properties": {},
"updatedAt": "2023-11-07T05:31:56Z",
"archivedAt": "2023-11-07T05:31:56Z",
"objectWriteTraceId": "<string>",
"propertiesWithHistory": {},
"url": "<string>",
"warnings": [
{
"category": "<string>",
"context": {},
"message": "<string>"
}
]
}
],
"startedAt": "2023-11-07T05:31:56Z",
"status": "CANCELED",
"links": {},
"requestedAt": "2023-11-07T05:31:56Z"
}{
"completedAt": "2023-11-07T05:31:56Z",
"results": [
{
"archived": true,
"createdAt": "2023-11-07T05:31:56Z",
"id": "<string>",
"properties": {},
"updatedAt": "2023-11-07T05:31:56Z",
"archivedAt": "2023-11-07T05:31:56Z",
"objectWriteTraceId": "<string>",
"propertiesWithHistory": {},
"url": "<string>",
"warnings": [
{
"category": "<string>",
"context": {},
"message": "<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
Represents a batch input for creating multiple simple public objects in a single request. This component is used to streamline the process of adding new objects to a HubSpot account by allowing multiple entries to be created at once.
An array of SimplePublicObjectBatchInputForCreate objects, each containing the properties and associations needed to create a CRM object.
Show child attributes
Show child attributes
Response
successful operation
A public object batch response object
The date and time when the batch operation was completed, in ISO 8601 format.
An array of SimplePublicObject items representing the results of the batch operation.
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 A map of link names to associated URIs for additional information 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?