Skip to main content

Tracking calls

Websites and apps send plain calls in the Segment format to the paths of the Segment HTTP API: POST /v1/batch ({"batch":[…]} or a single call) and POST /v1/page, /v1/track, /v1/identify, /v1/alias, /v1/group, /v1/screen. Any Segment or RudderStack SDK works with this host as its data-plane URL and a write key as its writeKey; a RudderStack webhook destination can post to /v1/batch with a server key. There is no separate key for tracking.

The edge completes a call before storing it (the type from the route, a messageId and timestamp if missing, the browser's user agent) and removes the IP. Every call is kept as it arrived, with what it became.

What a call becomes​

CallBecomes
pageviewed_page
the first call of a session (context.sessionStart)also started_session, with the campaign, click ids and consent as its touch
identifyidentified: email and phone from the traits, as a claim
track "X"the owner's rule for X; else the catalogue activity named X, if the key class may send it; else nothing (the call is kept raw)
alias, group, screennothing for now

What a call becomes goes through the processor like any activity, under the call's key class: a browser still cannot send revenue or verified identity. Activity ids are derived from the owner, the messageId and the activity, so a retried call stores nothing twice.

The message​

{
"type": "track",
"event": "subscribed_newsletter",
"messageId": "0192f1a4-7c3e-7b21-9d0a-5e3f8c2a1b45",
"anonymousId": "evx_web_8f21c0",
"timestamp": "2026-10-17T20:00:00+02:00",
"properties": { "email": "ana@example.com", "list": "summer-fest-2027" },
"context": {
"page": { "url": "https://summerfest.nl/", "path": "/", "title": "Summer Fest", "referrer": "" },
"campaign": { "source": "newsletter", "medium": "email", "name": "early-bird" },
"userAgent": "…",
"sessionId": "s_01M4XVBYC3FGXCPFRZEPGV20RZ",
"sessionStart": true,
"evx": { "click_ids": { "gclid": "Cj0KCQjw…" }, "consent": { "analytics": true, "ads": false }, "owner_ref": "evx:…" }
}
}

What the Segment format has no field for travels under context.evx: the click ids, the consent snapshot and, with a group key, the page's owner.

Rules​

An owner maps its own track names in call rules: track "Newsletter Signup" → subscribed_newsletter, with fields mapping features keys to paths in the call ({"email": "properties.email_address"}). A rule to an empty activity keeps a call raw on purpose. Rules are managed by support until the dashboard exists; after a rule changes, the owner's stored calls are transformed again, so history follows.

Answers​

With debug: true the answer lists, per call, its outcome (mapped, raw_only, partly_quarantined, quarantined, unreadable), the activities it became with the processor's verdict on each, and a note when it became fewer than one might expect.

Try it​

A page view with a session start, as the SDK sends it. Use a browser key (pk_…): it travels in the body.

Sends this request from your browser. The key and the endpoint are kept in this browser only.