# People and journeys

Open **Today’s path** beside a live activity row, or expand **Visitors on the
 globe** and choose a visitor. Anonymous journeys cover the current UTC day:
identities rotate at midnight, so yesterday’s anonymous visitor is a different
identity. Locations are no finer than city.

The **People** card lives beside product activity. Expand it to load the 20
most recently active identified users in the selected reporting period. Search
by the exact opaque user id your application supplies, or use **Recent people**
inside an event to find people who did it. Traffic filters do not narrow this
list. No search by email is available.

Call `window.analytiics.identify(user.id)` after sign-in, using an opaque id,
to connect browser activity with server events for that same user. Identified
journeys show all retained activity, across days and devices, independently of
the dashboard reporting period. Pre-sign-in events attach only if that
anonymous id has exactly one observed user in the project’s retained history.
Browser activity before sign-in is not shown when the device was shared.
Explicitly identified users never merge. A server-only customer has a timeline
but no browser visits until the browser identifies them.

Each session can collapse. Events appear newest first; **Load more** continues
through history. Server events without a session appear under **From your
servers**. Amounts include refunds and remain separate per currency. The drawer
header’s revenue covers retained history, while People totals cover the selected
period. Session summaries include only the selected person’s eligible events;
a shared session cannot reveal another user’s pages. Times are shown in UTC.

The selected person is in the dashboard URL as `?person=user:customer_1042`
or `?person=visitor:<anonymous-id>`. Reload and browser Back preserve the
selection. Only the current project owner can read it, even if the dashboard
is published. This is an event timeline, not a recording of the screen.

**Event properties must not carry personal data:** no email addresses, names,
addresses, or text written by your users. Keep these out of your manifest and
instrumentation. Properties are shown verbatim as text, not HTML. Page paths,
referrers and outbound URL labels omit query strings and fragments. Retention
is the same as for the underlying events.

## Read from an agent

Use the session token from `analytiics login`, never a project write key:

- `GET /api/projects/{slug}/people?range=7d&user_id=customer_1042` returns
  `{ people: [...] }`. Omit `user_id` for recent people; add
  `event=subscription_started` for people who did an event.
- `GET /api/projects/{slug}/journeys?person=user:customer_1042` returns
  `person`, `day`, `events`, `sessions`, `summary`, and
  `next`. Pass `next` unchanged as the URL-encoded `before`
  parameter for another page. Default page size is 200, maximum 500.

Owner checks run before every read, including cached answers. A non-owner
receives the same 404 as a missing project. 429 means wait for `Retry-After`;
503 means analytics are temporarily unavailable, not that the user has no
activity. Visitor cursors expire at midnight UTC. Keep person links and API
responses private. No cross-project view exists.

Try [the sample dashboard](/p/demo) with invented people and activity.
