curl --request POST \
--url https://api.hubapi.com/integrators/timeline/v3/{appId}/event-templates \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"objectType": "<string>",
"tokens": [
{
"label": "<string>",
"name": "<string>",
"options": [
{
"label": "<string>",
"value": "<string>"
}
],
"createdAt": "2023-11-07T05:31:56Z",
"objectPropertyName": "<string>",
"updatedAt": "2023-11-07T05:31:56Z"
}
],
"detailTemplate": "<string>",
"headerTemplate": "<string>"
}
'import requests
url = "https://api.hubapi.com/integrators/timeline/v3/{appId}/event-templates"
payload = {
"name": "<string>",
"objectType": "<string>",
"tokens": [
{
"label": "<string>",
"name": "<string>",
"options": [
{
"label": "<string>",
"value": "<string>"
}
],
"createdAt": "2023-11-07T05:31:56Z",
"objectPropertyName": "<string>",
"updatedAt": "2023-11-07T05:31:56Z"
}
],
"detailTemplate": "<string>",
"headerTemplate": "<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({
name: '<string>',
objectType: '<string>',
tokens: [
{
label: '<string>',
name: '<string>',
options: [{label: '<string>', value: '<string>'}],
createdAt: '2023-11-07T05:31:56Z',
objectPropertyName: '<string>',
updatedAt: '2023-11-07T05:31:56Z'
}
],
detailTemplate: '<string>',
headerTemplate: '<string>'
})
};
fetch('https://api.hubapi.com/integrators/timeline/v3/{appId}/event-templates', 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/integrators/timeline/v3/{appId}/event-templates",
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([
'name' => '<string>',
'objectType' => '<string>',
'tokens' => [
[
'label' => '<string>',
'name' => '<string>',
'options' => [
[
'label' => '<string>',
'value' => '<string>'
]
],
'createdAt' => '2023-11-07T05:31:56Z',
'objectPropertyName' => '<string>',
'updatedAt' => '2023-11-07T05:31:56Z'
]
],
'detailTemplate' => '<string>',
'headerTemplate' => '<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/integrators/timeline/v3/{appId}/event-templates"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"objectType\": \"<string>\",\n \"tokens\": [\n {\n \"label\": \"<string>\",\n \"name\": \"<string>\",\n \"options\": [\n {\n \"label\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"createdAt\": \"2023-11-07T05:31:56Z\",\n \"objectPropertyName\": \"<string>\",\n \"updatedAt\": \"2023-11-07T05:31:56Z\"\n }\n ],\n \"detailTemplate\": \"<string>\",\n \"headerTemplate\": \"<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/integrators/timeline/v3/{appId}/event-templates")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"objectType\": \"<string>\",\n \"tokens\": [\n {\n \"label\": \"<string>\",\n \"name\": \"<string>\",\n \"options\": [\n {\n \"label\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"createdAt\": \"2023-11-07T05:31:56Z\",\n \"objectPropertyName\": \"<string>\",\n \"updatedAt\": \"2023-11-07T05:31:56Z\"\n }\n ],\n \"detailTemplate\": \"<string>\",\n \"headerTemplate\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hubapi.com/integrators/timeline/v3/{appId}/event-templates")
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 \"name\": \"<string>\",\n \"objectType\": \"<string>\",\n \"tokens\": [\n {\n \"label\": \"<string>\",\n \"name\": \"<string>\",\n \"options\": [\n {\n \"label\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"createdAt\": \"2023-11-07T05:31:56Z\",\n \"objectPropertyName\": \"<string>\",\n \"updatedAt\": \"2023-11-07T05:31:56Z\"\n }\n ],\n \"detailTemplate\": \"<string>\",\n \"headerTemplate\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"name": "<string>",
"objectType": "<string>",
"tokens": [
{
"label": "<string>",
"name": "<string>",
"options": [
{
"label": "<string>",
"value": "<string>"
}
],
"createdAt": "2023-11-07T05:31:56Z",
"objectPropertyName": "<string>",
"updatedAt": "2023-11-07T05:31:56Z"
}
],
"createdAt": "2023-11-07T05:31:56Z",
"detailTemplate": "<string>",
"headerTemplate": "<string>",
"updatedAt": "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 an event template
Event templates define the general structure for a custom timeline event, and enable you to send event data to HubSpot. A template includes formatted copy for its heading and details, as well as any custom property definitions. A single app can include up to 750 event templates.
v1 and v3 timeline events APIs are only available for app partners with existing v1/v3 timeline events defined in their public app. - If your app doesn’t include any timeline events yet, requests to this endpoint will fail. Instead, you can get started on latest version of the developer platform. Note that you’ll need to request approval before you can define app events for your app. Learn more in the app events overview.
- If your app includes a
v1/v3timeline event, learn how to migrate it to the developer platform. You don’t need to request approval before migrating existing event types.
curl --request POST \
--url https://api.hubapi.com/integrators/timeline/v3/{appId}/event-templates \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"objectType": "<string>",
"tokens": [
{
"label": "<string>",
"name": "<string>",
"options": [
{
"label": "<string>",
"value": "<string>"
}
],
"createdAt": "2023-11-07T05:31:56Z",
"objectPropertyName": "<string>",
"updatedAt": "2023-11-07T05:31:56Z"
}
],
"detailTemplate": "<string>",
"headerTemplate": "<string>"
}
'import requests
url = "https://api.hubapi.com/integrators/timeline/v3/{appId}/event-templates"
payload = {
"name": "<string>",
"objectType": "<string>",
"tokens": [
{
"label": "<string>",
"name": "<string>",
"options": [
{
"label": "<string>",
"value": "<string>"
}
],
"createdAt": "2023-11-07T05:31:56Z",
"objectPropertyName": "<string>",
"updatedAt": "2023-11-07T05:31:56Z"
}
],
"detailTemplate": "<string>",
"headerTemplate": "<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({
name: '<string>',
objectType: '<string>',
tokens: [
{
label: '<string>',
name: '<string>',
options: [{label: '<string>', value: '<string>'}],
createdAt: '2023-11-07T05:31:56Z',
objectPropertyName: '<string>',
updatedAt: '2023-11-07T05:31:56Z'
}
],
detailTemplate: '<string>',
headerTemplate: '<string>'
})
};
fetch('https://api.hubapi.com/integrators/timeline/v3/{appId}/event-templates', 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/integrators/timeline/v3/{appId}/event-templates",
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([
'name' => '<string>',
'objectType' => '<string>',
'tokens' => [
[
'label' => '<string>',
'name' => '<string>',
'options' => [
[
'label' => '<string>',
'value' => '<string>'
]
],
'createdAt' => '2023-11-07T05:31:56Z',
'objectPropertyName' => '<string>',
'updatedAt' => '2023-11-07T05:31:56Z'
]
],
'detailTemplate' => '<string>',
'headerTemplate' => '<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/integrators/timeline/v3/{appId}/event-templates"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"objectType\": \"<string>\",\n \"tokens\": [\n {\n \"label\": \"<string>\",\n \"name\": \"<string>\",\n \"options\": [\n {\n \"label\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"createdAt\": \"2023-11-07T05:31:56Z\",\n \"objectPropertyName\": \"<string>\",\n \"updatedAt\": \"2023-11-07T05:31:56Z\"\n }\n ],\n \"detailTemplate\": \"<string>\",\n \"headerTemplate\": \"<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/integrators/timeline/v3/{appId}/event-templates")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"objectType\": \"<string>\",\n \"tokens\": [\n {\n \"label\": \"<string>\",\n \"name\": \"<string>\",\n \"options\": [\n {\n \"label\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"createdAt\": \"2023-11-07T05:31:56Z\",\n \"objectPropertyName\": \"<string>\",\n \"updatedAt\": \"2023-11-07T05:31:56Z\"\n }\n ],\n \"detailTemplate\": \"<string>\",\n \"headerTemplate\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hubapi.com/integrators/timeline/v3/{appId}/event-templates")
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 \"name\": \"<string>\",\n \"objectType\": \"<string>\",\n \"tokens\": [\n {\n \"label\": \"<string>\",\n \"name\": \"<string>\",\n \"options\": [\n {\n \"label\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"createdAt\": \"2023-11-07T05:31:56Z\",\n \"objectPropertyName\": \"<string>\",\n \"updatedAt\": \"2023-11-07T05:31:56Z\"\n }\n ],\n \"detailTemplate\": \"<string>\",\n \"headerTemplate\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"name": "<string>",
"objectType": "<string>",
"tokens": [
{
"label": "<string>",
"name": "<string>",
"options": [
{
"label": "<string>",
"value": "<string>"
}
],
"createdAt": "2023-11-07T05:31:56Z",
"objectPropertyName": "<string>",
"updatedAt": "2023-11-07T05:31:56Z"
}
],
"createdAt": "2023-11-07T05:31:56Z",
"detailTemplate": "<string>",
"headerTemplate": "<string>",
"updatedAt": "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
Authorizations
The access token received from the authorization server in the OAuth 2.0 flow.
Path Parameters
Body
The template name.
The type of CRM object this template is for. [Contacts, companies, tickets, and deals] are supported.
A collection of tokens that can be used as custom properties on the event and to create fully fledged CRM objects.
Show child attributes
Show child attributes
This uses Markdown syntax with Handlebars and event-specific data to render HTML on a timeline when you expand the details.
This uses Markdown syntax with Handlebars and event-specific data to render HTML on a timeline as a header.
Response
successful operation
The template ID.
The template name.
The type of CRM object this template is for. [Contacts, companies, tickets, and deals] are supported.
A collection of tokens that can be used as custom properties on the event and to create fully fledged CRM objects.
Show child attributes
Show child attributes
The date and time that the Event Template was created, as an ISO 8601 timestamp. Will be null if the template was created before Feb 18th, 2020.
This uses Markdown syntax with Handlebars and event-specific data to render HTML on a timeline when you expand the details.
This uses Markdown syntax with Handlebars and event-specific data to render HTML on a timeline as a header.
The date and time that the Event Template was last updated, as an ISO 8601 timestamp. Will be null if the template was created before Feb 18th, 2020.
Was this page helpful?