The activity envelope
One activity as it travels to POST /v1/activities. Its features are checked against the activity's catalogue entry; the envelope is the same for every activity.
{
"activity_id": "0192f1a4-7c3e-7b21-9d0a-5e3f8c2a1b45",
"activity": "completed_order",
"ts": "2026-10-17T20:00:00+02:00",
"owner_ref": "evx:ee69a000-d48d-11ec-8515-8b933281c556",
"identifiers": [
{ "type": "email", "value": "ana@example.com", "role": "buyer" },
{ "type": "phone", "value": "06 24681357", "role": "buyer" }
],
"anonymous_customer_id": "evx_web_8f21c0",
"revenue": { "amount": "45.00", "currency": "EUR" },
"features": { "order_id": "…", "ticket_count": 2, "touch": { "utm": { "source": "newsletter" } } },
"geo": [{ "kind": "home", "role": "buyer", "city": "Amsterdam", "postal_code": "1012 AB", "country": "NL" }],
"link": "https://dashboard.eventix.io/orders/…",
"_source": "platform:weeztix@order-v10"
}
| Field | Required | Meaning |
|---|---|---|
activity_id | yes | A UUID. The idempotency key: the same id twice stores one activity. Derive it from what the activity is, so a retry can never double-count. |
activity | yes | The name in the catalogue: a core name such as issued_ticket, or an organiser's own custom.…. |
ts | yes | When it happened, RFC 3339 with an offset. The payment's move to paid, not the moment of sending. |
owner_ref | with a platform or group key | The organiser the activity belongs to, as <type>:<value>: evx: an Eventix company id, wzt: a Weeztix id, own: an owner id. With a single-owner key it is optional and must match. |
owner | no | With a platform key: { "name", "country" } registers an organiser on first mention. |
identifiers | no | Who the activity is about: a list of { type, value, role, namespace, confidence }. See identifiers. |
anonymous_customer_id | no | The visitor's anonymous id (evx_web_…), when the activity happened in a browser the SDK knows. It becomes a device identifier. |
revenue | only on revenue-bearing activities | { "amount": "45.00", "currency": "EUR" }: a decimal string, never a number. See revenue. |
features | depends on the activity | The activity's own fields, as its page lists them, with the touch block where the activity carries one. |
geo | no | Where the people on the activity live or were. See the geo block. |
link | no | A deep link to the record in the sending system, for support. |
_source | no | A platform sender's provenance, e.g. platform:weeztix@order-v10. Other senders get it from their key class. |
Anything the processor moves out of features (identifier and attribute fields) is not stored with them; what it stores is the features the catalogue declares, plus the touch block where the activity carries one.
A batch
The request body is { "batch": [ …activities… ] }, up to 500 KB, with optional writeKey (a browser key), traceparent (W3C trace context, when the header cannot be set) and debug (return the verdicts). The batch is accepted or refused as a whole; refusals concern the key, the owner, the limits or an activity that is not one. See sending activities.