FullVision
Entities

Journeys

gethttps://data.fullvision.io/journeys

This endpoint returns what a person actually did, in order — every pageview, on-site interaction, product event, Stripe payment and checkout, oldest first. It is the only surface in the API that returns a timeline.

Use it when a number surprises you and you need to read the sequence behind it: how one customer got from their first landing page to their first payment, or what a whole cohort of new signups did in their first month.

The question it answers: what happened, in what order?

journey_id is the person_id — there is no separate journey id. Follow the journey_id pointer that People returns on every row.

Two forms: one person, or a cohort

  • Pass journey_id or q (never both) and you get one person's timeline. No date window is required — you get their history.
  • Omit both and you get a cohort: people selected by the same filters as People, each returned with their own timeline. Here the event window (from + to) is required, because it is the only thing that limits how much of the event history gets read.

FullVision rejects an identifier that matches several people rather than guessing.

The two date axes — this is the thing people get wrong

There are two independent windows on this endpoint, and they answer different questions. Mixing them up is the most common way to get an empty or misleading response.

ParameterWhat it doesWhen you'd use it
from + toBounds which events come back — the window on when each event happened. Required in the cohort form; optional when you address one person.You want July's activity for these people, whoever they are and whenever they signed up.
created_from / created_toBounds which people are in the cohort — the window on when each person first appeared, not on their events. Cohort form only.You want the people who first appeared in July, and then you want to see everything they have done since.

Set both together for the usual cohort question: created_from=2026-07-01& created_to=2026-07-31&from=2026-07-01&to=2026-08-31 reads as "July's new people, and what they did through August".

What comes back

BlockWhat it isWhen you'd read it
personThe same person row People returns — email, your own user id for them (external_id), Stripe customer id, first-touch channel and source.You need to know whose timeline you are reading.
eventsThe timeline itself, oldest first. Each event carries event_type (pageview, event, payment or checkout), an event_subtype, event_at, and whatever that kind of event has: page URL, referrer and UTM tags for web events; amounts, currency and plan for payments.You are reconstructing the path — what they read, what they submitted, when they paid.
events_truncatedtrue when this person's timeline was cut at events_limit.Before you conclude "that is all they did" — see the note below.
cohort / cohort_truncatedThe cohort's paging state (has_more, next_cursor) and a flag saying the whole-cohort event cap was reached.You are walking a cohort and need to know whether you have all of it.

Event rows carry personal data: each journey wraps the person row (email, external_id, Stripe customer id) and every event carries the pages that person visited plus the traits you have stored about them. /journeys, People and Form Report's submissions block are the only surfaces that return personal data. This endpoint requires the customer:read scope.

Check the truncation flags before concluding anything from a timeline. events_truncated: true means this person had more events than events_limit allowed, and cohort_truncated: true means the cohort hit the overall event cap, so people late in the response may carry fewer events than events_limit would otherwise permit. Either flag means you are looking at a prefix of the history, not the whole of it. FullVision reports both rather than hiding them — raise events_limit (max 500) or narrow the window.

Addressing one person

ParameterWhat it doesWhen you'd use it
journey_idThe exact person_id, as returned in People's journey_id. Omit for the cohort form.You already have the person from a People call and want their timeline next.
qAny identifier — email address, cus_… Stripe customer id, person or visitor UUID, or the user id from your own system. Pass this or journey_id, never both.A customer emails support and you want their history without looking their id up first.

Selecting a cohort

These filters are identical to People's, so a cohort you built there transfers here unchanged.

ParameterWhat it doesWhen you'd use it
created_viastripe, form or events — which kind of record first identified each person.You want the journeys of people a form captured, not people who appeared straight in Stripe.
origin_detailThe secondary value of that first record, read according to created_via: a form id, an event name, or a plan name.You want the timelines of everyone acquired through one specific form.
first_touch_channelOne of the nine channel buckets (Organic Search, AI, Organic Social, Paid Search, Paid Social, Email, Direct, Referral, Non-attributed).AI-sourced people convert well and you want to read what their path actually looks like.
first_touch_sourceThe concrete source behind that channel — Google, LinkedIn, ChatGPT, Direct, and so on.You want to compare the paths of ChatGPT arrivals against Google arrivals.
paidtrue keeps only people with a payment-bearing Stripe event; false keeps only those without one.You want to see what paying customers did differently from the ones who never converted.
has_emailtrue keeps only people with a non-empty email address.You are pulling journeys you intend to follow up on personally.
current_planPlan name from each person's most recent payment-bearing Stripe record.You are investigating why Starter customers never reach the feature that drives upgrades.
limitPeople per page (default 20, max 100 — deliberately lower than the reports' 1000, because every person here carries up to 500 events).You are walking a cohort and want fewer round trips without a huge response.
starting_afterReturns the people after this cursor — pass back cohort.next_cursor.You are paging through the whole cohort: keep going until cohort.has_more is false.
events_limitEvents kept per person (default 200, max 500).A power user has thousands of pageviews and you only need the start of their path.

This endpoint rejects fields: a journey is its timeline, so there is nothing separable to subtract.

Authorization

AuthorizationBearer <token>

API key as Bearer token

In: header

Query Parameters

journey_id?string

Exact person_id, as returned by People's journey_id. Omit for the cohort group form.

q?string

Any identifier — email, cus_* id, person/visitor UUID, external id. Pass this OR journey_id, never both.

limit?integer

Group form only: number of people to return (default 20, max 100). Ignored when the addressing key is supplied. Lower than the other reports' 1000 on purpose — every returned person carries up to 500 events.

Range1 <= value <= 100
events_limit?integer

Per-person event cap (default 200, max 500).

Range1 <= value <= 500
starting_after?string

Return rows after this cursor (from next_cursor).

created_from?string

Group form: select people created on/after this date. Distinct from from, which is the EVENT window.

Match^\d{4}-\d{2}-\d{2}$
created_to?string

Group form: select people created on/before this date.

Match^\d{4}-\d{2}-\d{2}$
created_via?string

Creation-mode bucket of the person's earliest record.

Value in

  • "stripe"
  • "form"
  • "events"
origin_detail?string

Secondary value of the first-touch record, scoped by created_via.

first_touch_channel?string

First-touch channel bucket.

Value in

  • "Organic Search"
  • "AI"
  • "Organic Social"
  • "Paid Search"
  • "Paid Social"
  • "Email"
  • "Direct"
  • "Referral"
  • "Non-attributed"
first_touch_source?string

Granular classified first-touch source.

paid?string

true = has a payment-bearing Stripe event.

Value in

  • "true"
  • "false"
has_email?string

true = the person has a non-empty email.

Value in

  • "true"
  • "false"
current_plan?string

Plan name of the latest payment-bearing Stripe record.

range?string

Preset date range. Canonical names (last_30_days, last_7_days, last_3_months, last_6_months, last_year, all_time, …) and dashboard short keys (30d, 7d, 3m, 6m, 1y, all) are both accepted. Mutually exclusive with from/to.

Value in

  • "last_7_days"
  • "last_14_days"
  • "last_28_days"
  • "last_30_days"
  • "last_90_days"
  • "current_month"
  • "this_month"
  • "last_3_months"
  • "last_6_months"
  • "last_year"
  • "all_time"
  • "7d"
  • "14d"
  • "28d"
  • "30d"
  • "90d"
  • "3m"
  • "6m"
  • "1y"
  • "all"
from?string

Custom start date (YYYY-MM-DD). Ignored if range is set.

Match^\d{4}-\d{2}-\d{2}$
to?string

Custom end date (YYYY-MM-DD). Ignored if range is set.

Match^\d{4}-\d{2}-\d{2}$

Responses

One person's timeline (addressed) or the criteria-filtered cohort of timelines

get/journeys
curl -X GET "https://data.fullvision.io/journeys?created_via=form&from=2026-07-01&to=2026-07-31"
Example Responses
{  "journey_id": "string",  "person": {},  "events": [    {}  ],  "events_truncated": true,  "is_cached": true,  "age_s": 0,  "last_refresh": "string"}
application/json