Journeys
A journey is a sequence of content (courses, handbooks, forms, checklists) employees work through — the onboarding flow, an optional offboarding flow, and custom journeys such as a leadership track. Journeys are assigned through the groups their content is targeted at, optionally gated by a days-after-hire trigger. Use these endpoints to list journeys and read each employee's status on them: when it was assigned, when it is due, when it was completed and whether it is overdue. Aggregated completion totals live under Academy Statistics.
Required scope: read:journeys.
Endpoints
/api/open/v1/journeysList journeys (paginated)
/api/open/v1/journeys/{id}Get a single journey
/api/open/v1/journeys/{id}/usersList the users a journey is assigned to, with their status
/api/open/v1/users/{id}/journeysList the journeys assigned to a user, with their status
List
curl "https://customer.monotree.com/api/open/v1/journeys?is_published=true&type=custom" \
-H "Authorization: Bearer mono_your_token_here"| Query param | Notes |
|---|---|
is_published | true returns published journeys only, false returns drafts only. Omit for all. |
type | onboarding, custom or offboarding. |
since | ISO 8601 — filter by created_at. |
page, per_page | Standard pagination — per_page max 50. |
Journeys are ordered onboarding first, then custom journeys in their CMS order, then offboarding.
Response
{
"data": {
"id": 7,
"title": "Leadership Track",
"description": "Everything a new shift lead needs in the first month.",
"type": "custom",
"is_locked": false,
"days_after_hire": 30,
"is_published": true,
"published_at": "2026-06-01T10:00:00+00:00",
"created_at": "2026-05-20T09:00:00+00:00",
"updated_at": "2026-06-01T10:00:00+00:00"
}
}| Field | Notes |
|---|---|
type | onboarding (the onboarding flow), custom, or offboarding. |
is_locked | Sequential journey — items must be completed in order. |
days_after_hire | When set, the journey only becomes available this many days after the employee's hire date. |
A journey's users
GET /journeys/{id}/users returns every user the journey is currently assigned to, with their user_state. Not paginated. A draft journey returns an empty list.
Who counts as assigned
- Real, active employees only — no kiosk, bot, shadow, deactivated, unregistered or already-terminated users. This is the same pool
/stats/academy/journeyscounts, so the two surfaces agree. - The onboarding flow is assigned to every such employee.
- Custom and offboarding journeys are assigned to the employees who can access at least one of the journey's items, restricted by the journey's own groups if it has any, and whose days-after-hire trigger date has been reached.
{
"data": [
{
"id": 501,
"name": "Jane Doe",
"email": "jane@example.com",
"avatar_url": null,
"user_state": {
"has_completed": false,
"assigned_at": "2026-08-01T09:00:00+00:00",
"due_at": "2026-08-15T09:00:00+00:00",
"completed_at": null,
"is_overdue": true
}
},
{
"id": 502,
"name": "Alex Doe",
"email": "alex@example.com",
"avatar_url": null,
"user_state": {
"has_completed": true,
"assigned_at": "2026-08-03T08:00:00+00:00",
"due_at": "2026-08-17T08:00:00+00:00",
"completed_at": "2026-08-10T14:22:00+00:00",
"is_overdue": false
}
}
]
}A user's journeys
GET /users/{id}/journeys returns the published journeys assigned to a user, with the same status fields flattened onto each journey. Returns 404 for kiosk, bot, shadow and deactivated users.
{
"data": [
{
"id": 3,
"title": "Onboarding",
"description": null,
"type": "onboarding",
"is_locked": true,
"days_after_hire": null,
"is_published": true,
"published_at": "2025-01-10T08:00:00+00:00",
"created_at": "2025-01-10T08:00:00+00:00",
"updated_at": "2026-05-02T11:30:00+00:00",
"has_completed": false,
"assigned_at": "2026-08-01T09:00:00+00:00",
"due_at": "2026-08-15T09:00:00+00:00",
"completed_at": null,
"is_overdue": true
},
{
"id": 7,
"title": "Leadership Track",
"description": "Everything a new shift lead needs in the first month.",
"type": "custom",
"is_locked": false,
"days_after_hire": 30,
"is_published": true,
"published_at": "2026-06-01T10:00:00+00:00",
"created_at": "2026-05-20T09:00:00+00:00",
"updated_at": "2026-06-01T10:00:00+00:00",
"has_completed": false,
"assigned_at": "2026-08-31T00:00:00+00:00",
"due_at": null,
"completed_at": null,
"is_overdue": false
}
]
}Status fields
| Field | Meaning |
|---|---|
has_completed | The user has completed the journey. |
assigned_at | When the journey became available to the user. Onboarding: registration (or the latest onboarding reset). Offboarding: the termination date. Other journeys: the later of the journey's publish date and the day it started applying to the user — their days-after-hire trigger date, else their hire date (registration if no hire date). |
due_at | The deadline, if the journey has one. Onboarding: assigned_at + the onboarding weeks limit; offboarding: termination date + the offboarding weeks limit (both CMS settings). null when no limit is configured, and always null for custom journeys. |
completed_at | When the user completed the journey, or null. |
is_overdue | true once due_at has passed without a completion. |