Project API

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

POST/v1/events

Track behavior to power automations and segments. Identify the contact by email (auto-created if unknown) or contact_id.

Track an event

Body parameters

eventstringrequired

Event name, e.g. Purchased. Stored with a normalized key.

emailstringoptional

Identify the contact by email (auto-created if unknown).

contact_idstringoptional

Identify the contact by id instead of email.

propertiesobjectoptional

Arbitrary metadata (product_id, category, …).

valuenumberoptional

Monetary value for revenue tracking.

currencystringoptional

ISO currency code for value, e.g. usd.

quantityintegeroptional

Item quantity for the event (e.g. units purchased).

occurred_atstringoptional

ISO 8601 timestamp of when the event happened. Defaults to now.

attributebooleanoptional

false 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
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

200 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_iduuidoptional

The click or open that earned the credit.

campaign_iduuid | nulloptional

The campaign the email belonged to, when it was a campaign.

flow_iduuid | nulloptional

The automation the email belonged to, when it was one.

node_iduuid | nulloptional

The send step within that automation.

variant_iduuid | nulloptional

The A/B variant the contact received, when there was one.

streamstring | nulloptional

The sending stream of that email, e.g. marketing.

touchstringoptional

click or open.

touched_atstringoptional

When the click or open happened, ISO 8601.