Journeys Enrollment
Tags: journeys, members
Enroll, unenroll, and re-enroll members in journeys
Endpoints
GET /api/v2/w/{workspace_uuid}/journeys/by-member/{member_id}- By MemberPOST /api/v2/w/{workspace_uuid}/journeys/{journey_id}/enroll- EnrollGET /api/v2/w/{workspace_uuid}/journeys/{journey_id}/enrollments/{member_journey_id}/status-log- Status LogGET /api/v2/w/{workspace_uuid}/journeys/{journey_id}/members- MembersDELETE /api/v2/w/{workspace_uuid}/journeys/{journey_id}/members/{member_id}- Delete MembersPOST /api/v2/w/{workspace_uuid}/journeys/{journey_id}/reenroll- ReenrollPOST /api/v2/w/{workspace_uuid}/journeys/{journey_id}/unenroll- Unenroll
By Member
GET /api/v2/w/{workspace_uuid}/journeys/by-member/{member_id}
Description:
Get journey enrollments for a member (most recent first).
Capped at 200 enrollments until server-side pagination is added in
a follow-up PR (tracked by #10014). The adjacent
/journeys/\{journey_id}/members endpoint uses the same ceiling.
Authorization: Requires scopes: journeys:read, members:read
Parameters:
member_id(Integer)
Response: List of MemberJourneyResponse
Enroll
POST /api/v2/w/{workspace_uuid}/journeys/{journey_id}/enroll
Description:
Enroll one or more members in a journey.
Authorization: Requires journeys:write scope
Parameters:
journey_id(Integer)request- See EnrollMemberRequest
Response: List of MemberJourneyResponse
Status Log
GET /api/v2/w/{workspace_uuid}/journeys/{journey_id}/enrollments/{member_journey_id}/status-log
Description:
Status history for one enrollment — the per-member journey timeline.
Answers "what did this member's journey actually do", which neither
Journey Health (per-Journey aggregate) nor Automations → Executions
(per-rule-execution) can. In particular it is where a step that completed
having emitted nothing shows up as zeroEmission: true with its
PHI-safe reason, instead of being indistinguishable from a step that sent
(GRA-7341, #22658).
Newest first. member_journey_id must belong to journey_id or the
response is 404 — the cross-journey guard, matching the ownership
pre-checks on GET /\{journey_id}/members.
zeroEmissionOnly=true narrows the page to the dropped-send rows. It is
what a per-step surface should ask for: "newest first" and "the rows that
matter" are different orderings, so on a busy enrollment the zero-emission
rows can all fall past page one and a caller rendering only what it loaded
would show nothing wrong.
PHI policy: identifiers, closed status codes, operator-authored step
names, and timestamps. JourneyStatusLog.reason is returned ONLY for
rows on the closed allowlist in
:mod:lib.services.journey_status_log_service (today: zero-emission rows,
whose text is a fixed template plus integer counts and rule ids). Every
other row reports reasonRedacted instead.
Authorization: Requires scopes: journeys:read, members:read
Parameters:
journey_id(Integer)member_journey_id(Integer)page(Integer) — min: 1pageSize(Integer) — min: 1, max: 500zeroEmissionOnly(Boolean)
Response: See JourneyStatusLogResponse
Members
GET /api/v2/w/{workspace_uuid}/journeys/{journey_id}/members
Description:
List enrolled members and their progress for a journey (paginated).
Authorization: Requires scopes: journeys:read, members:read
Parameters:
journey_id(Integer)page(Integer) — min: 1pageSize(Integer) — min: 1, max: 200search(String)status(String)enrolledAfter(datetime)enrolledBefore(datetime)currentTaskId(Integer)runtimeFailureEdgeId(Integer)memberJourneyId(Integer)
Response: See PaginatedResponse[MemberJourneyResponse]
Delete Members
DELETE /api/v2/w/{workspace_uuid}/journeys/{journey_id}/members/{member_id}
Description:
Hard-delete a canceled or completed enrollment so the member can be re-enrolled fresh.
Authorization: Requires journeys:admin scope
Parameters:
journey_id(Integer)member_id(Integer)
Reenroll
POST /api/v2/w/{workspace_uuid}/journeys/{journey_id}/reenroll
Description:
Re-enroll a canceled or completed member back to enrolled status.
Authorization: Requires journeys:write scope
Parameters:
journey_id(Integer)request- See ReenrollMemberRequest
Response: See MemberJourneyResponse
Unenroll
POST /api/v2/w/{workspace_uuid}/journeys/{journey_id}/unenroll
Description:
Unenroll one or more members from a journey.
Authorization: Requires journeys:write scope
Parameters:
journey_id(Integer)request- See UnenrollMemberRequest
Response: List of MemberJourneyResponse