visitors

Follow one visitor

The full journey of a single visitor: every page, every event with its properties, scroll depth, payments and exact durations. Pseudonymous throughout, and the same key you already have in your CSV exports.

GET/api/v1/sites/{id}/visitors
Recent journeys, most valuable first.
ParamTypeDescription
goalstringEvent that qualifies a journey. Default: purchase.
rangestring7d, 30d, 90d… Default follows your dashboard.
limitnumber1 to 200. Default 50.
GET/api/v1/sites/{id}/visitors/{uid}
One journey, in full.
ParamTypeDescription
uidreqstringEither the visitorId from a CSV export (12 hex characters), or a raw reference captured with window.datalenk.ref.

Coming from a CSV export

Every row of an export carries a visitorId. Paste it into this endpoint as-is, with no transformation: the short hash and the raw reference both resolve to the same journey. That is the bridge between an aggregate export and one person's path through your site.

# a row from events.csv ends with: …,49,USD,,a3f9c1d20e7b

curl "https://datalenk.com/api/v1/sites/3/visitors/a3f9c1d20e7b" \
  -H "Authorization: Bearer dlk_live_…"

Event properties

Each custom event in the timeline carries the properties you sent with it. If your affiliate clicks ship a merchant, a placement or a product id, you get them here, in the order the visitor produced them.

{
  "data": {
    "name": "Quiet Otter",
    "channel": "Organic Search",
    "pageviews": 4,
    "events": 2,
    "revenue": 0,
    "timeline": [
      { "type": "pageview", "pathname": "/best-road-bikes", "at": "2026-08-15T09:12:04Z" },
      { "type": "event", "event_name": "affiliate_click", "at": "2026-08-15T09:14:41Z",
        "props": { "merchant": "decathlon", "placement": "featured_card", "product_id": "bike-123" } }
    ]
  }
}

What is never returned

No IP address, no raw session or user id, no email. The display name ("Quiet Otter") is generated from the pseudonymous key and identifies nobody. A journey is a path through your site, not a person.