curl --request POST \
--url https://api.hubapi.com/events/2026-09/event-definitions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"includeDefaultProperties": true,
"label": "<string>",
"propertyDefinitions": [
{
"label": "<string>",
"type": "<string>",
"description": "<string>",
"name": "<string>",
"options": [
{
"displayOrder": 123,
"hidden": true,
"label": "<string>",
"value": "<string>",
"description": "<string>"
}
]
}
],
"description": "<string>",
"name": "<string>",
"primaryObject": "<string>"
}
'import requests
url = "https://api.hubapi.com/events/2026-09/event-definitions"
payload = {
"includeDefaultProperties": True,
"label": "<string>",
"propertyDefinitions": [
{
"label": "<string>",
"type": "<string>",
"description": "<string>",
"name": "<string>",
"options": [
{
"displayOrder": 123,
"hidden": True,
"label": "<string>",
"value": "<string>",
"description": "<string>"
}
]
}
],
"description": "<string>",
"name": "<string>",
"primaryObject": "<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({
includeDefaultProperties: true,
label: '<string>',
propertyDefinitions: [
{
label: '<string>',
type: '<string>',
description: '<string>',
name: '<string>',
options: [
{
displayOrder: 123,
hidden: true,
label: '<string>',
value: '<string>',
description: '<string>'
}
]
}
],
description: '<string>',
name: '<string>',
primaryObject: '<string>'
})
};
fetch('https://api.hubapi.com/events/2026-09/event-definitions', 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/events/2026-09/event-definitions",
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([
'includeDefaultProperties' => true,
'label' => '<string>',
'propertyDefinitions' => [
[
'label' => '<string>',
'type' => '<string>',
'description' => '<string>',
'name' => '<string>',
'options' => [
[
'displayOrder' => 123,
'hidden' => true,
'label' => '<string>',
'value' => '<string>',
'description' => '<string>'
]
]
]
],
'description' => '<string>',
'name' => '<string>',
'primaryObject' => '<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/events/2026-09/event-definitions"
payload := strings.NewReader("{\n \"includeDefaultProperties\": true,\n \"label\": \"<string>\",\n \"propertyDefinitions\": [\n {\n \"label\": \"<string>\",\n \"type\": \"<string>\",\n \"description\": \"<string>\",\n \"name\": \"<string>\",\n \"options\": [\n {\n \"displayOrder\": 123,\n \"hidden\": true,\n \"label\": \"<string>\",\n \"value\": \"<string>\",\n \"description\": \"<string>\"\n }\n ]\n }\n ],\n \"description\": \"<string>\",\n \"name\": \"<string>\",\n \"primaryObject\": \"<string>\"\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/events/2026-09/event-definitions")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"includeDefaultProperties\": true,\n \"label\": \"<string>\",\n \"propertyDefinitions\": [\n {\n \"label\": \"<string>\",\n \"type\": \"<string>\",\n \"description\": \"<string>\",\n \"name\": \"<string>\",\n \"options\": [\n {\n \"displayOrder\": 123,\n \"hidden\": true,\n \"label\": \"<string>\",\n \"value\": \"<string>\",\n \"description\": \"<string>\"\n }\n ]\n }\n ],\n \"description\": \"<string>\",\n \"name\": \"<string>\",\n \"primaryObject\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hubapi.com/events/2026-09/event-definitions")
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 \"includeDefaultProperties\": true,\n \"label\": \"<string>\",\n \"propertyDefinitions\": [\n {\n \"label\": \"<string>\",\n \"type\": \"<string>\",\n \"description\": \"<string>\",\n \"name\": \"<string>\",\n \"options\": [\n {\n \"displayOrder\": 123,\n \"hidden\": true,\n \"label\": \"<string>\",\n \"value\": \"<string>\",\n \"description\": \"<string>\"\n }\n ]\n }\n ],\n \"description\": \"<string>\",\n \"name\": \"<string>\",\n \"primaryObject\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"archived": true,
"associations": [
{
"allowsCustomLabels": true,
"cardinality": "ONE_TO_MANY",
"category": "HUBSPOT_DEFINED",
"fromObjectTypeId": "<string>",
"hasAllAssociatedObjects": true,
"hasCascadingDeletes": true,
"hasUserEnforcedMaxFromObjectIds": true,
"hasUserEnforcedMaxToObjectIds": true,
"hidden": true,
"id": 123,
"inverseAllowsCustomLabels": true,
"inverseCardinality": "ONE_TO_MANY",
"inverseHasAllAssociatedObjects": true,
"inverseId": 123,
"inverseName": "<string>",
"isDefault": true,
"isInversePrimary": true,
"isPrimary": true,
"maxFromObjectIds": 123,
"maxToObjectIds": 123,
"name": "<string>",
"portalUniqueIdentifier": "<string>",
"readOnly": true,
"toObjectTypeId": "<string>",
"fromObjectType": "ABANDONED_CART",
"hiddenReason": "DEFAULT",
"inverseLabel": "<string>",
"label": "<string>",
"toObjectType": "ABANDONED_CART"
}
],
"fullyQualifiedName": "<string>",
"id": "<string>",
"labels": {
"singular": "<string>",
"plural": "<string>"
},
"name": "<string>",
"objectTypeId": "<string>",
"properties": [
{
"description": "<string>",
"fieldType": "<string>",
"groupName": "<string>",
"label": "<string>",
"name": "<string>",
"options": [
{
"hidden": true,
"label": "<string>",
"value": "<string>",
"description": "<string>",
"displayOrder": 123
}
],
"type": "<string>",
"archived": true,
"archivedAt": "2023-11-07T05:31:56Z",
"calculated": true,
"calculationFormula": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"createdUserId": "<string>",
"currencyPropertyName": "<string>",
"dataSensitivity": "highly_sensitive",
"dateDisplayHint": "absolute",
"displayOrder": 123,
"externalOptions": true,
"formField": true,
"hasUniqueValue": true,
"hidden": false,
"hubspotDefined": true,
"modificationMetadata": {
"archivable": true,
"readOnlyDefinition": true,
"readOnlyValue": true,
"readOnlyOptions": true
},
"numberDisplayHint": "currency",
"referencedObjectType": "<string>",
"sensitiveDataCategories": [
"<string>"
],
"showCurrencySymbol": true,
"textDisplayHint": "domain_name",
"updatedAt": "2023-11-07T05:31:56Z",
"updatedUserId": "<string>"
}
],
"comboEventRules": {
"composingRules": [
{
"count": 123,
"eventTypeId": "<string>",
"propertyFilters": [
{
"filterType": "PROPERTY",
"operation": {
"includeObjectsWithNoValueSet": true,
"operationType": "<string>",
"operator": "HAS_EVER_BEEN_EQUAL_TO",
"operatorName": "<string>",
"propertyType": "bool",
"value": true,
"defaultValue": "<string>",
"renderSpec": "<string>"
},
"property": "<string>",
"context": {
"objectTypeId": "<string>"
},
"filterInsightsId": 123,
"frameworkFilterId": 123
}
],
"lookbackWindowDays": 123
}
],
"operationType": "AND",
"ruleBranches": "<array>"
},
"createdAt": "2023-11-07T05:31:56Z",
"createdUserId": 123,
"customMatchingId": {
"primaryObjectRule": {
"eventPropertyName": "<string>",
"targetObjectPropertyName": "<string>"
}
},
"description": "<string>",
"detailTemplate": "<string>",
"headerTemplate": "<string>",
"primaryObject": "<string>",
"primaryObjectId": "<string>",
"trackingType": "APP_EVENT",
"updatedAt": "2023-11-07T05:31:56Z",
"updatedUserId": 123
}{
"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 an event definition
Create a new behavioral event definition in your HubSpot account. This endpoint allows you to define the structure and properties of a new behavioral event, which can then be used to track specific user actions or behaviors. The request body must include the necessary event details and property definitions.
curl --request POST \
--url https://api.hubapi.com/events/2026-09/event-definitions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"includeDefaultProperties": true,
"label": "<string>",
"propertyDefinitions": [
{
"label": "<string>",
"type": "<string>",
"description": "<string>",
"name": "<string>",
"options": [
{
"displayOrder": 123,
"hidden": true,
"label": "<string>",
"value": "<string>",
"description": "<string>"
}
]
}
],
"description": "<string>",
"name": "<string>",
"primaryObject": "<string>"
}
'import requests
url = "https://api.hubapi.com/events/2026-09/event-definitions"
payload = {
"includeDefaultProperties": True,
"label": "<string>",
"propertyDefinitions": [
{
"label": "<string>",
"type": "<string>",
"description": "<string>",
"name": "<string>",
"options": [
{
"displayOrder": 123,
"hidden": True,
"label": "<string>",
"value": "<string>",
"description": "<string>"
}
]
}
],
"description": "<string>",
"name": "<string>",
"primaryObject": "<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({
includeDefaultProperties: true,
label: '<string>',
propertyDefinitions: [
{
label: '<string>',
type: '<string>',
description: '<string>',
name: '<string>',
options: [
{
displayOrder: 123,
hidden: true,
label: '<string>',
value: '<string>',
description: '<string>'
}
]
}
],
description: '<string>',
name: '<string>',
primaryObject: '<string>'
})
};
fetch('https://api.hubapi.com/events/2026-09/event-definitions', 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/events/2026-09/event-definitions",
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([
'includeDefaultProperties' => true,
'label' => '<string>',
'propertyDefinitions' => [
[
'label' => '<string>',
'type' => '<string>',
'description' => '<string>',
'name' => '<string>',
'options' => [
[
'displayOrder' => 123,
'hidden' => true,
'label' => '<string>',
'value' => '<string>',
'description' => '<string>'
]
]
]
],
'description' => '<string>',
'name' => '<string>',
'primaryObject' => '<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/events/2026-09/event-definitions"
payload := strings.NewReader("{\n \"includeDefaultProperties\": true,\n \"label\": \"<string>\",\n \"propertyDefinitions\": [\n {\n \"label\": \"<string>\",\n \"type\": \"<string>\",\n \"description\": \"<string>\",\n \"name\": \"<string>\",\n \"options\": [\n {\n \"displayOrder\": 123,\n \"hidden\": true,\n \"label\": \"<string>\",\n \"value\": \"<string>\",\n \"description\": \"<string>\"\n }\n ]\n }\n ],\n \"description\": \"<string>\",\n \"name\": \"<string>\",\n \"primaryObject\": \"<string>\"\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/events/2026-09/event-definitions")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"includeDefaultProperties\": true,\n \"label\": \"<string>\",\n \"propertyDefinitions\": [\n {\n \"label\": \"<string>\",\n \"type\": \"<string>\",\n \"description\": \"<string>\",\n \"name\": \"<string>\",\n \"options\": [\n {\n \"displayOrder\": 123,\n \"hidden\": true,\n \"label\": \"<string>\",\n \"value\": \"<string>\",\n \"description\": \"<string>\"\n }\n ]\n }\n ],\n \"description\": \"<string>\",\n \"name\": \"<string>\",\n \"primaryObject\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hubapi.com/events/2026-09/event-definitions")
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 \"includeDefaultProperties\": true,\n \"label\": \"<string>\",\n \"propertyDefinitions\": [\n {\n \"label\": \"<string>\",\n \"type\": \"<string>\",\n \"description\": \"<string>\",\n \"name\": \"<string>\",\n \"options\": [\n {\n \"displayOrder\": 123,\n \"hidden\": true,\n \"label\": \"<string>\",\n \"value\": \"<string>\",\n \"description\": \"<string>\"\n }\n ]\n }\n ],\n \"description\": \"<string>\",\n \"name\": \"<string>\",\n \"primaryObject\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"archived": true,
"associations": [
{
"allowsCustomLabels": true,
"cardinality": "ONE_TO_MANY",
"category": "HUBSPOT_DEFINED",
"fromObjectTypeId": "<string>",
"hasAllAssociatedObjects": true,
"hasCascadingDeletes": true,
"hasUserEnforcedMaxFromObjectIds": true,
"hasUserEnforcedMaxToObjectIds": true,
"hidden": true,
"id": 123,
"inverseAllowsCustomLabels": true,
"inverseCardinality": "ONE_TO_MANY",
"inverseHasAllAssociatedObjects": true,
"inverseId": 123,
"inverseName": "<string>",
"isDefault": true,
"isInversePrimary": true,
"isPrimary": true,
"maxFromObjectIds": 123,
"maxToObjectIds": 123,
"name": "<string>",
"portalUniqueIdentifier": "<string>",
"readOnly": true,
"toObjectTypeId": "<string>",
"fromObjectType": "ABANDONED_CART",
"hiddenReason": "DEFAULT",
"inverseLabel": "<string>",
"label": "<string>",
"toObjectType": "ABANDONED_CART"
}
],
"fullyQualifiedName": "<string>",
"id": "<string>",
"labels": {
"singular": "<string>",
"plural": "<string>"
},
"name": "<string>",
"objectTypeId": "<string>",
"properties": [
{
"description": "<string>",
"fieldType": "<string>",
"groupName": "<string>",
"label": "<string>",
"name": "<string>",
"options": [
{
"hidden": true,
"label": "<string>",
"value": "<string>",
"description": "<string>",
"displayOrder": 123
}
],
"type": "<string>",
"archived": true,
"archivedAt": "2023-11-07T05:31:56Z",
"calculated": true,
"calculationFormula": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"createdUserId": "<string>",
"currencyPropertyName": "<string>",
"dataSensitivity": "highly_sensitive",
"dateDisplayHint": "absolute",
"displayOrder": 123,
"externalOptions": true,
"formField": true,
"hasUniqueValue": true,
"hidden": false,
"hubspotDefined": true,
"modificationMetadata": {
"archivable": true,
"readOnlyDefinition": true,
"readOnlyValue": true,
"readOnlyOptions": true
},
"numberDisplayHint": "currency",
"referencedObjectType": "<string>",
"sensitiveDataCategories": [
"<string>"
],
"showCurrencySymbol": true,
"textDisplayHint": "domain_name",
"updatedAt": "2023-11-07T05:31:56Z",
"updatedUserId": "<string>"
}
],
"comboEventRules": {
"composingRules": [
{
"count": 123,
"eventTypeId": "<string>",
"propertyFilters": [
{
"filterType": "PROPERTY",
"operation": {
"includeObjectsWithNoValueSet": true,
"operationType": "<string>",
"operator": "HAS_EVER_BEEN_EQUAL_TO",
"operatorName": "<string>",
"propertyType": "bool",
"value": true,
"defaultValue": "<string>",
"renderSpec": "<string>"
},
"property": "<string>",
"context": {
"objectTypeId": "<string>"
},
"filterInsightsId": 123,
"frameworkFilterId": 123
}
],
"lookbackWindowDays": 123
}
],
"operationType": "AND",
"ruleBranches": "<array>"
},
"createdAt": "2023-11-07T05:31:56Z",
"createdUserId": 123,
"customMatchingId": {
"primaryObjectRule": {
"eventPropertyName": "<string>",
"targetObjectPropertyName": "<string>"
}
},
"description": "<string>",
"detailTemplate": "<string>",
"headerTemplate": "<string>",
"primaryObject": "<string>",
"primaryObjectId": "<string>",
"trackingType": "APP_EVENT",
"updatedAt": "2023-11-07T05:31:56Z",
"updatedUserId": 123
}{
"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
A boolean indicating whether default properties should be included.
A string representing the label of the event type.
An array of property definitions, each represented by an ExternalBehavioralEventPropertyCreate object.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
A string providing a description of the event type.
A string representing the name of the event type.
A string indicating the primary object associated with the event type.
Response
successful operation
A boolean indicating whether the event type is archived.
An array of association definitions related to the event type.
Show child attributes
Show child attributes
A string representing the fully qualified name of the event type.
A string representing the unique identifier of the event type.
Show child attributes
Show child attributes
A string representing the name of the event type.
A string representing the object type ID associated with the event type.
An array of property objects associated with the event type.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
A string representing the date and time when the event type was created, in ISO 8601 format.
An integer representing the ID of the user who created the event type.
Show child attributes
Show child attributes
A string providing a description of the event type.
The rendering template for the body of the CRM timeline activity card.
The rendering template for the header of the CRM timeline activity card.
A string representing the primary object associated with the event type.
A string representing the ID of the primary object associated with the event type.
A string indicating the tracking type of the event. Valid values include 'VISITED_URL', 'CLICKED_ELEMENT', 'CUSTOM_SCRIPT', 'MANUAL', 'IMPORT', 'PROPERTY_CHANGE', 'COMBO_EVENT'.
APP_EVENT, AUTOCAPTURE_EVENT, CLICKED_ELEMENT, COMBO_EVENT, CUSTOM_SCRIPT, CUSTOM_SIGNAL, IMPORT, MANUAL, POLLING, PROPERTY_CHANGE, VISITED_URL, WEBHOOK A string representing the date and time when the event type was last updated, in ISO 8601 format.
An integer representing the ID of the user who last updated the event type.
Was this page helpful?