curl --request POST \
--url https://api.hubapi.com/events/2026-03/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-03/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-03/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-03/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-03/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-03/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-03/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>",
"propertyAspect": {
"aspect": "TIMERANGE_END",
"qualifier": "<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 custom event definition.
curl --request POST \
--url https://api.hubapi.com/events/2026-03/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-03/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-03/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-03/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-03/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-03/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-03/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>",
"propertyAspect": {
"aspect": "TIMERANGE_END",
"qualifier": "<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 to include default properties in the event type definition.
Human readable label for the event. Used in HubSpot UI
List of custom properties on event
Show child attributes
Show child attributes
Show child attributes
Show child attributes
A description of the event that will be shown as help text in HubSpot.
Internal event name, which must be used when referencing the event from this event definitions API. If a name is not supplied, one will be generated based on the label. The name value will also be used to automatically generate a fullyQualifiedName for the event definition, which you'll use when sending event completions to this event.
The object type to associate this event to. Can be one of CONTACT, COMPANY, DEAL, TICKET. If no primaryObject is supplied, we will default to associating the event to CONTACT objects.
Response
successful operation
A boolean indicating whether the event type is archived.
An array of association definitions that define the associations 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 of the event type.
An array of property objects that define the properties of 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.
A string used as a template for the details of the event type.
A string used as a template for the header of the event type.
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 specifying the tracking type of the event. Valid values include 'VISITED_URL', 'CLICKED_ELEMENT', 'CUSTOM_SCRIPT', and others.
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?