Events API
Track customer behavior to drive automations and segments.
View as Markdown ↗Project key. Acts in the project the key belongs to. An all-access key works too — name the project with an X-Project-Id header. How keys and scopes work.
Endpoint
/v1/eventsTrack behavior to power automations and segments. Identify the contact by email (auto-created if unknown) or contact_id.
Track an event
Body parameters
eventstringrequiredEvent name, e.g. Purchased. Stored with a normalized key.
emailstringoptionalIdentify the contact by email (auto-created if unknown).
contact_idstringoptionalIdentify the contact by id instead of email.
propertiesobjectoptionalArbitrary metadata (product_id, category, …).
valuenumberoptionalMonetary value for revenue tracking.
currencystringoptionalISO currency code for value, e.g. usd.
quantityintegeroptionalItem quantity for the event (e.g. units purchased).
occurred_atstringoptionalISO 8601 timestamp of when the event happened. Defaults to now.
attributebooleanoptionalfalse records the value without crediting it to an email: for a value that isn't a sale (a cart, a quote), or a sale Stripe already reports. Defaults to true.
Provide either email or contact_id.
curl -X POST https://emailbump.com/api/v1/events \
-H "Authorization: Bearer ebk_your_key" \
-H "Content-Type: application/json" \
-d '{
"email": "jamie@example.com",
"event": "Purchased",
"value": 49.0,
"currency": "usd",
"properties": { "product": "Widget" }
}'Response
{
"event": {
"id": "0f6a9d3e-5c1b-4f7a-9e2d-8b4c1a7e3f90",
"team_id": "111f9258-6b77-4edb-a9f3-14bc66118b14",
"contact_id": "7c2e41a8-93d5-4b0f-a6e1-2f8d5c9b0a34",
"name": "Purchased",
"key": "purchased",
"properties": { "product": "Widget" },
"value": 49.0,
"currency": "USD",
"quantity": null,
"occurred_at": "2026-09-28T15:04:05+00:00",
"created_at": "2026-09-28T15:04:05+00:00"
},
"contact_id": "7c2e41a8-93d5-4b0f-a6e1-2f8d5c9b0a34",
"attribution": {
"email_event_id": "c41d8e2f-0b7a-4c96-8f13-5e2a9d6b7c01",
"campaign_id": "5a9f3c1e-2d84-4b7f-9e60-a1c3d5e7f902",
"flow_id": null,
"node_id": null,
"variant_id": null,
"stream": "marketing",
"touch": "click",
"touched_at": "2026-09-26T09:12:44+00:00"
}
}attribution is null when no email earned the event — it had no value, or the contact didn't click or open a campaign or automation email within the window.
Revenue attribution
An event with a value above zero (and no "attribute": false) is credited to the last campaign or automation email the contact clicked within your attribution window, or, if they clicked nothing and the project counts opens, the last one they opened. Machine opens never count, and transactional email never earns credit. The window is measured back from occurred_at, and is 5 days unless you change it under Settings → Revenue attribution. The full rules are in Revenue attribution, and the Revenue API reads what was credited.
attribution fields
email_event_iduuidoptionalThe click or open that earned the credit.
campaign_iduuid | nulloptionalThe campaign the email belonged to, when it was a campaign.
flow_iduuid | nulloptionalThe automation the email belonged to, when it was one.
node_iduuid | nulloptionalThe send step within that automation.
variant_iduuid | nulloptionalThe A/B variant the contact received, when there was one.
streamstring | nulloptionalThe sending stream of that email, e.g. marketing.
touchstringoptionalclick or open.
touched_atstringoptionalWhen the click or open happened, ISO 8601.