Skip to main content
This feature is intended only for technology partners, and requires approval from HubSpot to use. To apply for app events access, or if you want to learn more about the functionality, please submit this in-app form.
After defining an event type schema and retrieving its fullyQualifiedName, you can send event occurrence data via the app events API. When sending event data, you’ll need to adhere to the schema you created earlier. Requests that don’t match the schema will fail validation and will not be captured by the app.
Please note: event occurrences are immutable. Once created, they cannot be updated or removed.

Sending event occurrences

To send a single event occurrence, make a POST request to /integrators/timeline/v4/events.In the request body, include the following:
  • The event data following the event type’s defined schema, along with the id of the CRM record to associate with the event occurrence.
  • The fullyQualifiedName value in a eventTypeName field. This value can either be your app’s uid defined in the top-level *-hsmeta.json file, or fullyQualifiedName returned from the /integrators/timeline/v4/types/projects API.

Fields marked with * are required.

CRM record association

Each event occurrence must be associated with a CRM record, with the CRM object type defined by the event type schema. The app events API includes multiple fields for associating event occurrence data with CRM records. For all supported CRM objects, it’s recommended to use the objectId field. However, there are some situations where you may want to use the other fields.
  • utk/email: if you don’t know the contact’s ID, use the utk and/or email field for identification. Providing both of these identifiers also enables you to create and update contacts. For example:
    • If utk matches an existing contact but the email doesn’t match, HubSpot will update the contact (by utk) with the new email address.
    • If no objectId is provided, the event occurrence will associate with an existing contact that matches the utk/email, or HubSpot will create a new contact if no match is found.
    • Note that the utk alone cannot create new contacts. You should always include email with utk to ensure proper association.
  • domain: for company association, you must provide the objectId, but you can also include domain to update the domain property of that company.
When the email field is provided with other identifiers (objectId, utk), HubSpot will always update the email property on the contact record. For example, if the contact’s email is test@hubspot.com and you send an occurrence with the objectId and email as test-updated@hubspot.com, the contact’s email address property will be updated to test-updated@hubspot.com. Below is the priority order for the CRM record association properties, with the lowest number being the highest priority:

Sending additional data

Beyond sending data to event properties and updating CRM properties via event occurrences, you can include additional data for timeline rendering via the extraData object.
The extraData object can only contain valid JSON. If the JSON is malformed, the occurrence will be rejected and you’ll receive an error response.
extraData field values can be accessed by the event type’s detailTemplate using {{extraData.fieldName}} syntax. All attribute levels of extraData are available through dot notation, such as {{extraData.person1.preferredName}}. For example, the templates below use the customerName and loginLocation property data, along with the surveyData field from extraData sent via the event occurrence. Screenshot showing what the rendering template example below looks like on the contact timeline.
Last modified on June 30, 2026