Events describe actions your [customers](🔗) perform or actions that result in an update to their customer record such as viewing your web page or visiting your store in New York.
## Composing events
Events are composed using a two-tier connection including a **type** and **action**. You can set additional metadata via fields on the event.
The event **type** is a categorical name associated with the event.
The event **action** is the activity a user did within that event type.
For example:
order and product would be event **types**
purchase, return or add_to_cart would be **actions**
At minimum, events require an event type and an identifier to associate the event with a customer. The `event()
` method automatically passes the VUID (cookie ID) to ODP. You can include additional identifiers, like email or phone number which will associate that cooke ID with the other identifiers. Refer to [Overview of customer identity and resolution](🔗) to learn more.
Important
All ODP events are immutable, **meaning they cannot be changed once uploaded to ODP.**
## Standard events
A standard event is an event that has a predefined event type and action. Using standard events makes using ODP simpler for common use cases.
Reference and examples:
[ODP Web SDK](🔗)
[ODP REST API](🔗)
[ODP React Native SDK](🔗)
### Account event
Set the event type to `account
` to track your users actions for login, logout, register and update.
`type ` | `action ` |
account | login |
account | logout |
account | register |
account | update |
### Pageview event
Set the event type to `pageview
` to track which pages your user visits.
`type ` | `page ` |
pageview | /products/12345 |
Note
The Web SDK will automatically populate the `
page
` field when event type is `pageview
`.
### Wishlist
Set the event type to `product
` to track a user adding or removing an item from a wishlist.
`type ` | `action ` |
product | add_to_wishlist |
product | remove_from_wishlist |
### Navigation events
Set the event type to `navigation
` to track what your user's search.
`type ` | `action ` | `search_term ` |
navigation | search | cameras |
navigation | sort | |
navigation | filter | |
## Custom events
A custom event is where you create the event type and action and choose additional fields to use.
Custom events display on the customer profile (**Customers > Profiles**) in ODP.
Note
See how to [Create custom fields](🔗). You must select **Events** from the **Object Containing New Field** drop-down list.
### Example
`type ` | `action ` | `venue_name ` |
venue | visited | TD Garden |
Reference:
[ODP Web SDK](🔗)
[ODP REST API](🔗)
[ODP React Native SDK](🔗)
## Active events
Warning
Use this only for the rare case where you have an event that is not triggered by a customer. Abuse of this functionality may result in a loss of data.
An active event is helpful for events like campaign sends, subscription and support ticket events generated by an agent where the customer was not the direct source of the event.
This field lets ODP determine if an event was active or not. If it is set to `true
`, then that is considered customer activity. This means that **the event will impact the calculation of Monthly Active Users (MAUs)**. It also may exclude reporting from certain engagements, like Customer Lifecycle, when appropriate.
### Automatic active events
Caution
If the field is left blank, the default value is `
true
`, meaning it is assumed that the event is active.
Field Display Name | Field Name | Field Type | Field Description |
Is Active Event? | active_event | True / False boolean | Indicates whether this event should contribute to Monthly Active User (MAU) calculations. Is false if the event is not triggered directly by the customer. Examples include campaign sends and support tickets being closed. If not set, is set to “true”, making the event active. |
`type ` | `action ` |
customer_discovered | |
campaign | |
consent | |
reachability | |
list | |
any action not open or click | |
push | any action not open or click |
Some events are set to `inactive
` by default (`active_event
` = `false
`).
Note
If needed, a developer can override by including the field on the event payload.