A trigger is what enrols a person into the journey. Every journey needs at least one, and the trigger you choose decides what the journey can ever know about the person: everything downstream reads facts that the trigger, or a data driver under it, produced.
A Shopify order.created trigger arrives with the order, its value, and its line
items. A page.view trigger arrives with an anonymous visitor. Both are correct
triggers; only one can support a rule about spend. Read the trigger's Produces
list before promising a decision.
Starts the journey when an outside system posts to a URL Xenia generates for this node. Use it for your own backend, a form, or a tool with no Xenia connector.
Pair it with a Webhook Response node and the journey becomes a synchronous API: the caller waits, the journey decides, the response node answers.
Configure
Required: an authorization token. The panel also gives you the URL and a copyable cURL command, so you can test the trigger before wiring anything to it.
Produces
One variable per declared body parameter, with the type you gave it.
Watch out
Starts the journey on a clock: once, on a repeat, or on a cron expression. This is the trigger for batch work, such as a weekly digest or a dated campaign.
Configure
Required: a schedule mode. One-time mode also requires the date and time; cron mode also requires the expression.
Produces
{{trigger_timestamp}}, {{trigger_timezone}}.
Watch out
Starts the journey when a named event arrives from the web tracker or the events API. Use it for on-site and in-app behaviour you already track.
Not shown in Shopify-billed workspaces.
Configure
Required: the event name.
Produces
{{event_name}}, {{event_type}}, {{event_timestamp}}, {{email}},
{{visitor_id}}, {{customer_id}}, {{device_id}}, {{user_id}}, {{url}},
{{referrer}}, and the campaign attribution the event carried: {{utm_source}},
{{utm_medium}}, {{utm_campaign}}, {{utm_content}}, {{utm_id}}. Plus one
variable per declared custom parameter.
Watch out
Starts the journey on a store or storefront event, with the customer already identified and the order or cart attached. Needs a connected Shopify store.
Configure
Required: the store and the event type.
Events
Produces
{{shopDomain}} and {{eventType}} always, and then a set that depends entirely on
the event:
Watch out
checkout.started may arrive with an empty email, because a guest has not
necessarily typed one yet. Guard any send that depends on it, and give a recovery
journey a wait of at least fifteen minutes before the first send, since checkout
data does not arrive instantly.page.view the visitor is anonymous: no email, no phone, no name, and a customer
id only when they happen to be logged in. Sort them on what the page view does
carry, and end each path on a
Shopify Variant or a
Shopify Popup.page.view trigger. With this node set to any other event, every Shopify Variant on
the canvas is an error and the journey will not publish.A storefront A/B test is this node on page.view, a
Multivariant Split under it, and one Shopify
Variant on each of the split's paths. Set the split's persistence on and key it to
payload.visitorId, or the same visitor is re-rolled on every page view and the
result measures nothing.
Starts the journey when someone submits a Meta Lead Ad form, on submission rather than on a later sync. Needs a connected Meta account.
Not shown in Shopify-billed workspaces.
Configure
Required: the connector.
Produces
{{lead.id}}, {{lead.created_time}}, {{lead.form_id}}, and one lead. prefixed
variable per fetched form question.
Watch out
Starts the journey when a HubSpot contact, deal, or company changes. Needs a connected HubSpot account.
Configure
Required: the connector and the event type.
Event types are contact.creation, contact.propertyChange, contact.deletion,
deal.creation, deal.propertyChange, company.creation, and
company.propertyChange.
Produces
{{eventType}}, {{portalId}}, {{objectId}}, {{subscriptionType}},
{{objectTypeId}}, {{propertyName}}, {{propertyValue}}, {{changeSource}}, plus
enrichment that depends on the object:
{{email}}, {{customer_email}}, {{firstName}},
{{lastName}}, {{phone}}, {{lifecycleStage}}, {{leadStatus}}.{{company_name}}, {{company_domain}}, {{city}},
{{region}}, {{country}}, {{industry}}, {{company_type}},
{{lifecycleStage}}, {{phone}}.Watch out
deal.* event makes no properties testable, so a deal journey knows the deal
changed and nothing about the person. Add a lookup before any node that needs an
address, and do not plan a branch on deal fields.contact.deletion runs no enrichment, so the contact properties are absent rather
than empty.propertyChange event fires on every change unless you name the property to
filter on.Starts the journey when a storefront or app calls the personalization resolve API for a content key, and the journey decides what fills that slot. See Personalization API for the developer side.
Not shown in Shopify-billed workspaces.
Configure
Required: the content key.
Produces
Thirteen fields arrive on every call with no setup: {{path}}, {{query}},
{{deviceId}}, {{visitorId}}, {{customerId}}, {{email}}, {{url}},
{{referrer}}, {{utmSource}}, {{utmMedium}}, {{utmCampaign}},
{{utmContent}}, {{utmId}}. Plus one variable per declared custom parameter.
Watch out
{{query}} is one flat object, not a variable per query-string key.