schemas
JourneyTemplate
{
"type": "object",
"description": "A reusable definition of a lifecycle event: phases, steps, roles and when things unlock and fall due.",
"properties": {
"id": {
"type": "string",
"readOnly": true,
"example": "JT-0001"
},
"name": {
"type": "string",
"example": "New hire onboarding"
},
"journey_type": {
"type": "string",
"enum": [
"onboarding",
"offboarding",
"job_change",
"leave",
"return_to_work",
"relocation",
"custom"
],
"example": "onboarding",
"description": "What kind of lifecycle event: onboarding (anchored on the start_date), offboarding (last_working_day), job_change (effective_date), leave (leave_start_date), return_to_work (return_date), relocation (effective_date) or custom (effective_date). Defaults to custom; any other value is stored as custom with a warning."
},
"description": {
"type": "string",
"example": "Everything between the signed offer and the 90-day review."
},
"anchor": {
"type": "string",
"enum": [
"start_date",
"last_working_day",
"leave_start_date",
"return_date",
"effective_date"
],
"example": "start_date",
"description": "The date every offset hangs off. Defaults by journey_type (onboarding: start_date, offboarding: last_working_day, leave: leave_start_date, return_to_work: return_date, otherwise effective_date)."
},
"trigger": {
"type": "object",
"description": "How journeys of this template start. manual: someone starts them. hris_event: an HR event (hire, termination, job_change) with lead_days before the anchor. catalog_form: the subject submits a form. agent_chat: an assistant starts them.",
"properties": {
"kind": {
"type": "string",
"enum": [
"manual",
"hris_event",
"catalog_form",
"agent_chat"
],
"example": "hris_event",
"description": "One of manual, hris_event, catalog_form, agent_chat."
},
"event": {
"type": "string",
"nullable": true,
"example": "hire"
},
"lead_days": {
"type": "integer",
"nullable": true,
"example": 14
}
}
},
"phases": {
"type": "array",
"items": {
"type": "object",
"description": "A phase groups steps and decides when they become available. Steps may be nested here (steps: [...]) or listed flat on the template with a phase key.",
"required": [
"name"
],
"properties": {
"key": {
"type": "string",
"example": "pre_start",
"description": "Stable key; derived from the name when omitted."
},
"name": {
"type": "string",
"example": "Before start"
},
"order": {
"type": "integer",
"example": 1,
"description": "Display and evaluation order; defaults to position."
},
"unlock": {
"type": "object",
"description": "When the phase opens. immediate: when the journey starts. offset: offset_days from the journey's anchor date (negative is before it). after_phase: when every task in after_phase is done or skipped. condition: when the phase before it is complete.",
"properties": {
"kind": {
"type": "string",
"enum": [
"immediate",
"offset",
"after_phase",
"condition"
],
"example": "offset",
"description": "One of immediate, offset, after_phase, condition."
},
"offset_days": {
"type": "integer",
"example": -14,
"description": "Days from the anchor date (offset unlocks)."
},
"after_phase": {
"type": "string",
"example": "pre_start",
"description": "Phase key whose completion opens this phase (after_phase unlocks)."
}
}
},
"visible_to": {
"type": "array",
"items": {
"type": "string",
"enum": [
"subject",
"manager",
"buddy",
"hr",
"it",
"facilities",
"payroll",
"security",
"system"
]
},
"description": "Roles that see this phase (subject, manager, buddy, hr, it, facilities, payroll, security, system); empty means everyone."
},
"steps": {
"type": "array",
"items": {
"type": "object",
"description": "One step of a template; every journey started from the template gets one task per step.",
"required": [
"title"
],
"properties": {
"key": {
"type": "string",
"example": "sign_paperwork",
"description": "Stable key, unique in the template; derived from the title when omitted. Other steps reference it in depends_on."
},
"phase": {
"type": "string",
"example": "pre_start",
"description": "Key of the phase the step belongs to (defaults to the first phase)."
},
"title": {
"type": "string",
"example": "Sign offer letter, NDA and policy acknowledgements"
},
"description": {
"type": "string",
"example": "Three documents in one signing session."
},
"kind": {
"type": "string",
"enum": [
"todo",
"form",
"esign",
"document",
"content",
"learning",
"survey",
"approval",
"automated",
"status_check",
"meeting",
"link"
],
"example": "esign",
"description": "What kind of work it is: todo, form, esign, document, content, learning, survey, approval, automated, status_check, meeting, link (any other value is stored as todo with a warning). automated steps run by themselves when they unlock; status_check steps wait in processing until complete is called; form steps carry form and are finished with submit-tasks; link steps carry link; everything else is done by a person with complete-tasks."
},
"assignee_role": {
"type": "string",
"enum": [
"subject",
"manager",
"buddy",
"hr",
"it",
"facilities",
"payroll",
"security",
"system"
],
"example": "manager",
"description": "Who does the step. subject is the person the journey is for; manager and buddy are named when the journey starts; hr, it, facilities, payroll and security resolve to people on the identity roster; system is an automation."
},
"due": {
"type": "object",
"description": "When the task is due. journey_anchor: offset_days from the anchor date (start date, last working day, ...). phase_unlock: offset_days after the phase opens. assignment: offset_days after the task becomes ready. Defaults to the day the phase opens.",
"properties": {
"anchor": {
"type": "string",
"enum": [
"journey_anchor",
"phase_unlock",
"assignment"
],
"example": "journey_anchor",
"description": "One of journey_anchor, phase_unlock, assignment."
},
"offset_days": {
"type": "integer",
"example": -7
}
}
},
"depends_on": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"confirm_details"
],
"description": "Step keys that must be done or skipped before this one unlocks."
},
"required": {
"type": "boolean",
"example": true,
"description": "Optional steps can be skipped without a warning."
},
"payload": {
"type": "object",
"nullable": true,
"additionalProperties": true,
"description": "Kind-specific detail (a form name, document ids, a course list)."
},
"system": {
"type": "string",
"enum": [
"identity",
"access",
"itsm",
"hris",
"lms",
"chat",
"calendar",
"pages",
"mail",
"expense",
"people"
],
"example": "itsm",
"description": "The suite app that processes the step: identity (accounts, SSO), access (app access grants), itsm (laptop, badge, catalog items), hris (payroll, benefits, employment facts, signatures), lms (training), chat (channels, welcome posts), calendar (meetings), pages (guides, agendas, policies), mail (out of office, forwarding), expense, or people for a purely human to-do with no system behind it. When omitted it defaults from kind and title: automated steps go to identity, or access when the title mentions access, roles, apps, entitlements, groups or permissions; meeting to calendar; learning to lms; link and content to pages; form, esign and survey to hris; everything else to people."
},
"form": {
"type": "object",
"nullable": true,
"description": "The mini-form a form step collects. submit-tasks validates values against these fields, stores the submission on the task and completes it.",
"properties": {
"fields": {
"type": "array",
"items": {
"type": "object",
"description": "One field of a form step. Give a key or a label (the other is derived).",
"properties": {
"key": {
"type": "string",
"example": "legal_name",
"description": "Stable key the submission's values are keyed by; derived from the label when omitted."
},
"label": {
"type": "string",
"example": "Legal name"
},
"type": {
"type": "string",
"enum": [
"text",
"textarea",
"select",
"date",
"number",
"email",
"checkbox"
],
"example": "text",
"description": "text, textarea, select (needs options), date (YYYY-MM-DD), number, email or checkbox. Defaults to text."
},
"required": {
"type": "boolean",
"example": true
},
"options": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"14-inch",
"16-inch"
],
"description": "The choices of a select field."
},
"placeholder": {
"type": "string",
"nullable": true,
"example": "As it appears on your ID"
}
}
}
},
"submit_label": {
"type": "string",
"nullable": true,
"example": "Save details",
"description": "Label for the submit control; the UI defaults it."
}
}
},
"link": {
"type": "object",
"nullable": true,
"description": "The page a link step opens (url required). Starting or completing the task records opened_at.",
"properties": {
"url": {
"type": "string",
"example": "https://intranet.example.com/first-day"
},
"label": {
"type": "string",
"example": "Open the first-day agenda",
"description": "Defaults to the step title."
}
}
},
"promoted_from": {
"type": "string",
"nullable": true,
"example": "set_up_vpn_access",
"description": "The ad hoc group (normalized title, from get-insights-templates) this step was promoted from. Set it when adding the step so the step library and insights show the step as promoted."
}
}
},
"description": "Steps of this phase, as an alternative to listing them flat with a phase key. Stored flat either way."
}
}
}
},
"steps": {
"type": "array",
"items": {
"type": "object",
"description": "One step of a template; every journey started from the template gets one task per step.",
"required": [
"title"
],
"properties": {
"key": {
"type": "string",
"example": "sign_paperwork",
"description": "Stable key, unique in the template; derived from the title when omitted. Other steps reference it in depends_on."
},
"phase": {
"type": "string",
"example": "pre_start",
"description": "Key of the phase the step belongs to (defaults to the first phase)."
},
"title": {
"type": "string",
"example": "Sign offer letter, NDA and policy acknowledgements"
},
"description": {
"type": "string",
"example": "Three documents in one signing session."
},
"kind": {
"type": "string",
"enum": [
"todo",
"form",
"esign",
"document",
"content",
"learning",
"survey",
"approval",
"automated",
"status_check",
"meeting",
"link"
],
"example": "esign",
"description": "What kind of work it is: todo, form, esign, document, content, learning, survey, approval, automated, status_check, meeting, link (any other value is stored as todo with a warning). automated steps run by themselves when they unlock; status_check steps wait in processing until complete is called; form steps carry form and are finished with submit-tasks; link steps carry link; everything else is done by a person with complete-tasks."
},
"assignee_role": {
"type": "string",
"enum": [
"subject",
"manager",
"buddy",
"hr",
"it",
"facilities",
"payroll",
"security",
"system"
],
"example": "manager",
"description": "Who does the step. subject is the person the journey is for; manager and buddy are named when the journey starts; hr, it, facilities, payroll and security resolve to people on the identity roster; system is an automation."
},
"due": {
"type": "object",
"description": "When the task is due. journey_anchor: offset_days from the anchor date (start date, last working day, ...). phase_unlock: offset_days after the phase opens. assignment: offset_days after the task becomes ready. Defaults to the day the phase opens.",
"properties": {
"anchor": {
"type": "string",
"enum": [
"journey_anchor",
"phase_unlock",
"assignment"
],
"example": "journey_anchor",
"description": "One of journey_anchor, phase_unlock, assignment."
},
"offset_days": {
"type": "integer",
"example": -7
}
}
},
"depends_on": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"confirm_details"
],
"description": "Step keys that must be done or skipped before this one unlocks."
},
"required": {
"type": "boolean",
"example": true,
"description": "Optional steps can be skipped without a warning."
},
"payload": {
"type": "object",
"nullable": true,
"additionalProperties": true,
"description": "Kind-specific detail (a form name, document ids, a course list)."
},
"system": {
"type": "string",
"enum": [
"identity",
"access",
"itsm",
"hris",
"lms",
"chat",
"calendar",
"pages",
"mail",
"expense",
"people"
],
"example": "itsm",
"description": "The suite app that processes the step: identity (accounts, SSO), access (app access grants), itsm (laptop, badge, catalog items), hris (payroll, benefits, employment facts, signatures), lms (training), chat (channels, welcome posts), calendar (meetings), pages (guides, agendas, policies), mail (out of office, forwarding), expense, or people for a purely human to-do with no system behind it. When omitted it defaults from kind and title: automated steps go to identity, or access when the title mentions access, roles, apps, entitlements, groups or permissions; meeting to calendar; learning to lms; link and content to pages; form, esign and survey to hris; everything else to people."
},
"form": {
"type": "object",
"nullable": true,
"description": "The mini-form a form step collects. submit-tasks validates values against these fields, stores the submission on the task and completes it.",
"properties": {
"fields": {
"type": "array",
"items": {
"type": "object",
"description": "One field of a form step. Give a key or a label (the other is derived).",
"properties": {
"key": {
"type": "string",
"example": "legal_name",
"description": "Stable key the submission's values are keyed by; derived from the label when omitted."
},
"label": {
"type": "string",
"example": "Legal name"
},
"type": {
"type": "string",
"enum": [
"text",
"textarea",
"select",
"date",
"number",
"email",
"checkbox"
],
"example": "text",
"description": "text, textarea, select (needs options), date (YYYY-MM-DD), number, email or checkbox. Defaults to text."
},
"required": {
"type": "boolean",
"example": true
},
"options": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"14-inch",
"16-inch"
],
"description": "The choices of a select field."
},
"placeholder": {
"type": "string",
"nullable": true,
"example": "As it appears on your ID"
}
}
}
},
"submit_label": {
"type": "string",
"nullable": true,
"example": "Save details",
"description": "Label for the submit control; the UI defaults it."
}
}
},
"link": {
"type": "object",
"nullable": true,
"description": "The page a link step opens (url required). Starting or completing the task records opened_at.",
"properties": {
"url": {
"type": "string",
"example": "https://intranet.example.com/first-day"
},
"label": {
"type": "string",
"example": "Open the first-day agenda",
"description": "Defaults to the step title."
}
}
},
"promoted_from": {
"type": "string",
"nullable": true,
"example": "set_up_vpn_access",
"description": "The ad hoc group (normalized title, from get-insights-templates) this step was promoted from. Set it when adding the step so the step library and insights show the step as promoted."
}
}
},
"description": "Flat list of steps, each naming its phase. Steps nested under phases are accepted too."
},
"status": {
"type": "string",
"enum": [
"draft",
"published",
"retired"
],
"example": "published",
"description": "draft, published or retired. Only published templates can start journeys. Set with publish-templates; retire with update."
},
"version": {
"type": "integer",
"readOnly": true,
"example": 2,
"description": "Bumped by publish-templates when a published template changed."
},
"roles": {
"type": "array",
"readOnly": true,
"items": {
"type": "string"
},
"example": [
"subject",
"manager",
"buddy",
"hr",
"it",
"system"
],
"description": "Every assignee_role the steps use, in display order."
},
"counts": {
"type": "object",
"readOnly": true,
"properties": {
"phases": {
"type": "integer",
"example": 5
},
"steps": {
"type": "integer",
"example": 29
},
"by_role": {
"type": "object",
"additionalProperties": {
"type": "integer"
},
"example": {
"subject": 14,
"manager": 8
}
}
}
},
"warnings": {
"type": "array",
"readOnly": true,
"items": {
"type": "string"
},
"description": "What normalization repaired or doubts about the design (a dropped dependency, a step due before its phase opens). Empty when clean."
},
"has_unpublished_changes": {
"type": "boolean",
"readOnly": true,
"example": false,
"description": "True when a published template was edited since its last publish. New journeys keep starting from the published version (published_snapshot) until it is published again."
},
"published_snapshot": {
"type": "object",
"nullable": true,
"readOnly": true,
"description": "The phases and steps as last published, kept while has_unpublished_changes is true: what start-journeys uses until the edit is published. Null otherwise.",
"properties": {
"phases": {
"type": "array",
"items": {
"type": "object",
"description": "A phase groups steps and decides when they become available. Steps may be nested here (steps: [...]) or listed flat on the template with a phase key.",
"required": [
"name"
],
"properties": {
"key": {
"type": "string",
"example": "pre_start",
"description": "Stable key; derived from the name when omitted."
},
"name": {
"type": "string",
"example": "Before start"
},
"order": {
"type": "integer",
"example": 1,
"description": "Display and evaluation order; defaults to position."
},
"unlock": {
"type": "object",
"description": "When the phase opens. immediate: when the journey starts. offset: offset_days from the journey's anchor date (negative is before it). after_phase: when every task in after_phase is done or skipped. condition: when the phase before it is complete.",
"properties": {
"kind": {
"type": "string",
"enum": [
"immediate",
"offset",
"after_phase",
"condition"
],
"example": "offset",
"description": "One of immediate, offset, after_phase, condition."
},
"offset_days": {
"type": "integer",
"example": -14,
"description": "Days from the anchor date (offset unlocks)."
},
"after_phase": {
"type": "string",
"example": "pre_start",
"description": "Phase key whose completion opens this phase (after_phase unlocks)."
}
}
},
"visible_to": {
"type": "array",
"items": {
"type": "string",
"enum": [
"subject",
"manager",
"buddy",
"hr",
"it",
"facilities",
"payroll",
"security",
"system"
]
},
"description": "Roles that see this phase (subject, manager, buddy, hr, it, facilities, payroll, security, system); empty means everyone."
},
"steps": {
"type": "array",
"items": {
"type": "object",
"description": "One step of a template; every journey started from the template gets one task per step.",
"required": [
"title"
],
"properties": {
"key": {
"type": "string",
"example": "sign_paperwork",
"description": "Stable key, unique in the template; derived from the title when omitted. Other steps reference it in depends_on."
},
"phase": {
"type": "string",
"example": "pre_start",
"description": "Key of the phase the step belongs to (defaults to the first phase)."
},
"title": {
"type": "string",
"example": "Sign offer letter, NDA and policy acknowledgements"
},
"description": {
"type": "string",
"example": "Three documents in one signing session."
},
"kind": {
"type": "string",
"enum": [
"todo",
"form",
"esign",
"document",
"content",
"learning",
"survey",
"approval",
"automated",
"status_check",
"meeting",
"link"
],
"example": "esign",
"description": "What kind of work it is: todo, form, esign, document, content, learning, survey, approval, automated, status_check, meeting, link (any other value is stored as todo with a warning). automated steps run by themselves when they unlock; status_check steps wait in processing until complete is called; form steps carry form and are finished with submit-tasks; link steps carry link; everything else is done by a person with complete-tasks."
},
"assignee_role": {
"type": "string",
"enum": [
"subject",
"manager",
"buddy",
"hr",
"it",
"facilities",
"payroll",
"security",
"system"
],
"example": "manager",
"description": "Who does the step. subject is the person the journey is for; manager and buddy are named when the journey starts; hr, it, facilities, payroll and security resolve to people on the identity roster; system is an automation."
},
"due": {
"type": "object",
"description": "When the task is due. journey_anchor: offset_days from the anchor date (start date, last working day, ...). phase_unlock: offset_days after the phase opens. assignment: offset_days after the task becomes ready. Defaults to the day the phase opens.",
"properties": {
"anchor": {
"type": "string",
"enum": [
"journey_anchor",
"phase_unlock",
"assignment"
],
"example": "journey_anchor",
"description": "One of journey_anchor, phase_unlock, assignment."
},
"offset_days": {
"type": "integer",
"example": -7
}
}
},
"depends_on": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"confirm_details"
],
"description": "Step keys that must be done or skipped before this one unlocks."
},
"required": {
"type": "boolean",
"example": true,
"description": "Optional steps can be skipped without a warning."
},
"payload": {
"type": "object",
"nullable": true,
"additionalProperties": true,
"description": "Kind-specific detail (a form name, document ids, a course list)."
},
"system": {
"type": "string",
"enum": [
"identity",
"access",
"itsm",
"hris",
"lms",
"chat",
"calendar",
"pages",
"mail",
"expense",
"people"
],
"example": "itsm",
"description": "The suite app that processes the step: identity (accounts, SSO), access (app access grants), itsm (laptop, badge, catalog items), hris (payroll, benefits, employment facts, signatures), lms (training), chat (channels, welcome posts), calendar (meetings), pages (guides, agendas, policies), mail (out of office, forwarding), expense, or people for a purely human to-do with no system behind it. When omitted it defaults from kind and title: automated steps go to identity, or access when the title mentions access, roles, apps, entitlements, groups or permissions; meeting to calendar; learning to lms; link and content to pages; form, esign and survey to hris; everything else to people."
},
"form": {
"type": "object",
"nullable": true,
"description": "The mini-form a form step collects. submit-tasks validates values against these fields, stores the submission on the task and completes it.",
"properties": {
"fields": {
"type": "array",
"items": {
"type": "object",
"description": "One field of a form step. Give a key or a label (the other is derived).",
"properties": {
"key": {
"type": "string",
"example": "legal_name",
"description": "Stable key the submission's values are keyed by; derived from the label when omitted."
},
"label": {
"type": "string",
"example": "Legal name"
},
"type": {
"type": "string",
"enum": [
"text",
"textarea",
"select",
"date",
"number",
"email",
"checkbox"
],
"example": "text",
"description": "text, textarea, select (needs options), date (YYYY-MM-DD), number, email or checkbox. Defaults to text."
},
"required": {
"type": "boolean",
"example": true
},
"options": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"14-inch",
"16-inch"
],
"description": "The choices of a select field."
},
"placeholder": {
"type": "string",
"nullable": true,
"example": "As it appears on your ID"
}
}
}
},
"submit_label": {
"type": "string",
"nullable": true,
"example": "Save details",
"description": "Label for the submit control; the UI defaults it."
}
}
},
"link": {
"type": "object",
"nullable": true,
"description": "The page a link step opens (url required). Starting or completing the task records opened_at.",
"properties": {
"url": {
"type": "string",
"example": "https://intranet.example.com/first-day"
},
"label": {
"type": "string",
"example": "Open the first-day agenda",
"description": "Defaults to the step title."
}
}
},
"promoted_from": {
"type": "string",
"nullable": true,
"example": "set_up_vpn_access",
"description": "The ad hoc group (normalized title, from get-insights-templates) this step was promoted from. Set it when adding the step so the step library and insights show the step as promoted."
}
}
},
"description": "Steps of this phase, as an alternative to listing them flat with a phase key. Stored flat either way."
}
}
}
},
"steps": {
"type": "array",
"items": {
"type": "object",
"description": "One step of a template; every journey started from the template gets one task per step.",
"required": [
"title"
],
"properties": {
"key": {
"type": "string",
"example": "sign_paperwork",
"description": "Stable key, unique in the template; derived from the title when omitted. Other steps reference it in depends_on."
},
"phase": {
"type": "string",
"example": "pre_start",
"description": "Key of the phase the step belongs to (defaults to the first phase)."
},
"title": {
"type": "string",
"example": "Sign offer letter, NDA and policy acknowledgements"
},
"description": {
"type": "string",
"example": "Three documents in one signing session."
},
"kind": {
"type": "string",
"enum": [
"todo",
"form",
"esign",
"document",
"content",
"learning",
"survey",
"approval",
"automated",
"status_check",
"meeting",
"link"
],
"example": "esign",
"description": "What kind of work it is: todo, form, esign, document, content, learning, survey, approval, automated, status_check, meeting, link (any other value is stored as todo with a warning). automated steps run by themselves when they unlock; status_check steps wait in processing until complete is called; form steps carry form and are finished with submit-tasks; link steps carry link; everything else is done by a person with complete-tasks."
},
"assignee_role": {
"type": "string",
"enum": [
"subject",
"manager",
"buddy",
"hr",
"it",
"facilities",
"payroll",
"security",
"system"
],
"example": "manager",
"description": "Who does the step. subject is the person the journey is for; manager and buddy are named when the journey starts; hr, it, facilities, payroll and security resolve to people on the identity roster; system is an automation."
},
"due": {
"type": "object",
"description": "When the task is due. journey_anchor: offset_days from the anchor date (start date, last working day, ...). phase_unlock: offset_days after the phase opens. assignment: offset_days after the task becomes ready. Defaults to the day the phase opens.",
"properties": {
"anchor": {
"type": "string",
"enum": [
"journey_anchor",
"phase_unlock",
"assignment"
],
"example": "journey_anchor",
"description": "One of journey_anchor, phase_unlock, assignment."
},
"offset_days": {
"type": "integer",
"example": -7
}
}
},
"depends_on": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"confirm_details"
],
"description": "Step keys that must be done or skipped before this one unlocks."
},
"required": {
"type": "boolean",
"example": true,
"description": "Optional steps can be skipped without a warning."
},
"payload": {
"type": "object",
"nullable": true,
"additionalProperties": true,
"description": "Kind-specific detail (a form name, document ids, a course list)."
},
"system": {
"type": "string",
"enum": [
"identity",
"access",
"itsm",
"hris",
"lms",
"chat",
"calendar",
"pages",
"mail",
"expense",
"people"
],
"example": "itsm",
"description": "The suite app that processes the step: identity (accounts, SSO), access (app access grants), itsm (laptop, badge, catalog items), hris (payroll, benefits, employment facts, signatures), lms (training), chat (channels, welcome posts), calendar (meetings), pages (guides, agendas, policies), mail (out of office, forwarding), expense, or people for a purely human to-do with no system behind it. When omitted it defaults from kind and title: automated steps go to identity, or access when the title mentions access, roles, apps, entitlements, groups or permissions; meeting to calendar; learning to lms; link and content to pages; form, esign and survey to hris; everything else to people."
},
"form": {
"type": "object",
"nullable": true,
"description": "The mini-form a form step collects. submit-tasks validates values against these fields, stores the submission on the task and completes it.",
"properties": {
"fields": {
"type": "array",
"items": {
"type": "object",
"description": "One field of a form step. Give a key or a label (the other is derived).",
"properties": {
"key": {
"type": "string",
"example": "legal_name",
"description": "Stable key the submission's values are keyed by; derived from the label when omitted."
},
"label": {
"type": "string",
"example": "Legal name"
},
"type": {
"type": "string",
"enum": [
"text",
"textarea",
"select",
"date",
"number",
"email",
"checkbox"
],
"example": "text",
"description": "text, textarea, select (needs options), date (YYYY-MM-DD), number, email or checkbox. Defaults to text."
},
"required": {
"type": "boolean",
"example": true
},
"options": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"14-inch",
"16-inch"
],
"description": "The choices of a select field."
},
"placeholder": {
"type": "string",
"nullable": true,
"example": "As it appears on your ID"
}
}
}
},
"submit_label": {
"type": "string",
"nullable": true,
"example": "Save details",
"description": "Label for the submit control; the UI defaults it."
}
}
},
"link": {
"type": "object",
"nullable": true,
"description": "The page a link step opens (url required). Starting or completing the task records opened_at.",
"properties": {
"url": {
"type": "string",
"example": "https://intranet.example.com/first-day"
},
"label": {
"type": "string",
"example": "Open the first-day agenda",
"description": "Defaults to the step title."
}
}
},
"promoted_from": {
"type": "string",
"nullable": true,
"example": "set_up_vpn_access",
"description": "The ad hoc group (normalized title, from get-insights-templates) this step was promoted from. Set it when adding the step so the step library and insights show the step as promoted."
}
}
}
}
}
},
"published_at": {
"type": "string",
"format": "date-time",
"nullable": true,
"readOnly": true
},
"createdAt": {
"type": "string",
"format": "date-time",
"readOnly": true
},
"updatedAt": {
"type": "string",
"format": "date-time",
"readOnly": true
}
}
}
TemplateSpec
{
"type": "object",
"description": "A whole template in one call. Phases and steps may be omitted and added later with add-steps; a template with no phases gets one called main.",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"example": "New hire onboarding"
},
"journey_type": {
"type": "string",
"enum": [
"onboarding",
"offboarding",
"job_change",
"leave",
"return_to_work",
"relocation",
"custom"
],
"example": "onboarding",
"description": "What kind of lifecycle event: onboarding (anchored on the start_date), offboarding (last_working_day), job_change (effective_date), leave (leave_start_date), return_to_work (return_date), relocation (effective_date) or custom (effective_date). Defaults to custom; any other value is stored as custom with a warning."
},
"description": {
"type": "string",
"example": "Everything between the signed offer and the 90-day review."
},
"anchor": {
"type": "string",
"enum": [
"start_date",
"last_working_day",
"leave_start_date",
"return_date",
"effective_date"
],
"example": "start_date",
"description": "The date every offset hangs off. Defaults by journey_type (onboarding: start_date, offboarding: last_working_day, leave: leave_start_date, return_to_work: return_date, otherwise effective_date)."
},
"trigger": {
"type": "object",
"description": "How journeys of this template start. manual: someone starts them. hris_event: an HR event (hire, termination, job_change) with lead_days before the anchor. catalog_form: the subject submits a form. agent_chat: an assistant starts them.",
"properties": {
"kind": {
"type": "string",
"enum": [
"manual",
"hris_event",
"catalog_form",
"agent_chat"
],
"example": "hris_event",
"description": "One of manual, hris_event, catalog_form, agent_chat."
},
"event": {
"type": "string",
"nullable": true,
"example": "hire"
},
"lead_days": {
"type": "integer",
"nullable": true,
"example": 14
}
}
},
"phases": {
"type": "array",
"items": {
"type": "object",
"description": "A phase groups steps and decides when they become available. Steps may be nested here (steps: [...]) or listed flat on the template with a phase key.",
"required": [
"name"
],
"properties": {
"key": {
"type": "string",
"example": "pre_start",
"description": "Stable key; derived from the name when omitted."
},
"name": {
"type": "string",
"example": "Before start"
},
"order": {
"type": "integer",
"example": 1,
"description": "Display and evaluation order; defaults to position."
},
"unlock": {
"type": "object",
"description": "When the phase opens. immediate: when the journey starts. offset: offset_days from the journey's anchor date (negative is before it). after_phase: when every task in after_phase is done or skipped. condition: when the phase before it is complete.",
"properties": {
"kind": {
"type": "string",
"enum": [
"immediate",
"offset",
"after_phase",
"condition"
],
"example": "offset",
"description": "One of immediate, offset, after_phase, condition."
},
"offset_days": {
"type": "integer",
"example": -14,
"description": "Days from the anchor date (offset unlocks)."
},
"after_phase": {
"type": "string",
"example": "pre_start",
"description": "Phase key whose completion opens this phase (after_phase unlocks)."
}
}
},
"visible_to": {
"type": "array",
"items": {
"type": "string",
"enum": [
"subject",
"manager",
"buddy",
"hr",
"it",
"facilities",
"payroll",
"security",
"system"
]
},
"description": "Roles that see this phase (subject, manager, buddy, hr, it, facilities, payroll, security, system); empty means everyone."
},
"steps": {
"type": "array",
"items": {
"type": "object",
"description": "One step of a template; every journey started from the template gets one task per step.",
"required": [
"title"
],
"properties": {
"key": {
"type": "string",
"example": "sign_paperwork",
"description": "Stable key, unique in the template; derived from the title when omitted. Other steps reference it in depends_on."
},
"phase": {
"type": "string",
"example": "pre_start",
"description": "Key of the phase the step belongs to (defaults to the first phase)."
},
"title": {
"type": "string",
"example": "Sign offer letter, NDA and policy acknowledgements"
},
"description": {
"type": "string",
"example": "Three documents in one signing session."
},
"kind": {
"type": "string",
"enum": [
"todo",
"form",
"esign",
"document",
"content",
"learning",
"survey",
"approval",
"automated",
"status_check",
"meeting",
"link"
],
"example": "esign",
"description": "What kind of work it is: todo, form, esign, document, content, learning, survey, approval, automated, status_check, meeting, link (any other value is stored as todo with a warning). automated steps run by themselves when they unlock; status_check steps wait in processing until complete is called; form steps carry form and are finished with submit-tasks; link steps carry link; everything else is done by a person with complete-tasks."
},
"assignee_role": {
"type": "string",
"enum": [
"subject",
"manager",
"buddy",
"hr",
"it",
"facilities",
"payroll",
"security",
"system"
],
"example": "manager",
"description": "Who does the step. subject is the person the journey is for; manager and buddy are named when the journey starts; hr, it, facilities, payroll and security resolve to people on the identity roster; system is an automation."
},
"due": {
"type": "object",
"description": "When the task is due. journey_anchor: offset_days from the anchor date (start date, last working day, ...). phase_unlock: offset_days after the phase opens. assignment: offset_days after the task becomes ready. Defaults to the day the phase opens.",
"properties": {
"anchor": {
"type": "string",
"enum": [
"journey_anchor",
"phase_unlock",
"assignment"
],
"example": "journey_anchor",
"description": "One of journey_anchor, phase_unlock, assignment."
},
"offset_days": {
"type": "integer",
"example": -7
}
}
},
"depends_on": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"confirm_details"
],
"description": "Step keys that must be done or skipped before this one unlocks."
},
"required": {
"type": "boolean",
"example": true,
"description": "Optional steps can be skipped without a warning."
},
"payload": {
"type": "object",
"nullable": true,
"additionalProperties": true,
"description": "Kind-specific detail (a form name, document ids, a course list)."
},
"system": {
"type": "string",
"enum": [
"identity",
"access",
"itsm",
"hris",
"lms",
"chat",
"calendar",
"pages",
"mail",
"expense",
"people"
],
"example": "itsm",
"description": "The suite app that processes the step: identity (accounts, SSO), access (app access grants), itsm (laptop, badge, catalog items), hris (payroll, benefits, employment facts, signatures), lms (training), chat (channels, welcome posts), calendar (meetings), pages (guides, agendas, policies), mail (out of office, forwarding), expense, or people for a purely human to-do with no system behind it. When omitted it defaults from kind and title: automated steps go to identity, or access when the title mentions access, roles, apps, entitlements, groups or permissions; meeting to calendar; learning to lms; link and content to pages; form, esign and survey to hris; everything else to people."
},
"form": {
"type": "object",
"nullable": true,
"description": "The mini-form a form step collects. submit-tasks validates values against these fields, stores the submission on the task and completes it.",
"properties": {
"fields": {
"type": "array",
"items": {
"type": "object",
"description": "One field of a form step. Give a key or a label (the other is derived).",
"properties": {
"key": {
"type": "string",
"example": "legal_name",
"description": "Stable key the submission's values are keyed by; derived from the label when omitted."
},
"label": {
"type": "string",
"example": "Legal name"
},
"type": {
"type": "string",
"enum": [
"text",
"textarea",
"select",
"date",
"number",
"email",
"checkbox"
],
"example": "text",
"description": "text, textarea, select (needs options), date (YYYY-MM-DD), number, email or checkbox. Defaults to text."
},
"required": {
"type": "boolean",
"example": true
},
"options": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"14-inch",
"16-inch"
],
"description": "The choices of a select field."
},
"placeholder": {
"type": "string",
"nullable": true,
"example": "As it appears on your ID"
}
}
}
},
"submit_label": {
"type": "string",
"nullable": true,
"example": "Save details",
"description": "Label for the submit control; the UI defaults it."
}
}
},
"link": {
"type": "object",
"nullable": true,
"description": "The page a link step opens (url required). Starting or completing the task records opened_at.",
"properties": {
"url": {
"type": "string",
"example": "https://intranet.example.com/first-day"
},
"label": {
"type": "string",
"example": "Open the first-day agenda",
"description": "Defaults to the step title."
}
}
},
"promoted_from": {
"type": "string",
"nullable": true,
"example": "set_up_vpn_access",
"description": "The ad hoc group (normalized title, from get-insights-templates) this step was promoted from. Set it when adding the step so the step library and insights show the step as promoted."
}
}
},
"description": "Steps of this phase, as an alternative to listing them flat with a phase key. Stored flat either way."
}
}
}
},
"steps": {
"type": "array",
"items": {
"type": "object",
"description": "One step of a template; every journey started from the template gets one task per step.",
"required": [
"title"
],
"properties": {
"key": {
"type": "string",
"example": "sign_paperwork",
"description": "Stable key, unique in the template; derived from the title when omitted. Other steps reference it in depends_on."
},
"phase": {
"type": "string",
"example": "pre_start",
"description": "Key of the phase the step belongs to (defaults to the first phase)."
},
"title": {
"type": "string",
"example": "Sign offer letter, NDA and policy acknowledgements"
},
"description": {
"type": "string",
"example": "Three documents in one signing session."
},
"kind": {
"type": "string",
"enum": [
"todo",
"form",
"esign",
"document",
"content",
"learning",
"survey",
"approval",
"automated",
"status_check",
"meeting",
"link"
],
"example": "esign",
"description": "What kind of work it is: todo, form, esign, document, content, learning, survey, approval, automated, status_check, meeting, link (any other value is stored as todo with a warning). automated steps run by themselves when they unlock; status_check steps wait in processing until complete is called; form steps carry form and are finished with submit-tasks; link steps carry link; everything else is done by a person with complete-tasks."
},
"assignee_role": {
"type": "string",
"enum": [
"subject",
"manager",
"buddy",
"hr",
"it",
"facilities",
"payroll",
"security",
"system"
],
"example": "manager",
"description": "Who does the step. subject is the person the journey is for; manager and buddy are named when the journey starts; hr, it, facilities, payroll and security resolve to people on the identity roster; system is an automation."
},
"due": {
"type": "object",
"description": "When the task is due. journey_anchor: offset_days from the anchor date (start date, last working day, ...). phase_unlock: offset_days after the phase opens. assignment: offset_days after the task becomes ready. Defaults to the day the phase opens.",
"properties": {
"anchor": {
"type": "string",
"enum": [
"journey_anchor",
"phase_unlock",
"assignment"
],
"example": "journey_anchor",
"description": "One of journey_anchor, phase_unlock, assignment."
},
"offset_days": {
"type": "integer",
"example": -7
}
}
},
"depends_on": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"confirm_details"
],
"description": "Step keys that must be done or skipped before this one unlocks."
},
"required": {
"type": "boolean",
"example": true,
"description": "Optional steps can be skipped without a warning."
},
"payload": {
"type": "object",
"nullable": true,
"additionalProperties": true,
"description": "Kind-specific detail (a form name, document ids, a course list)."
},
"system": {
"type": "string",
"enum": [
"identity",
"access",
"itsm",
"hris",
"lms",
"chat",
"calendar",
"pages",
"mail",
"expense",
"people"
],
"example": "itsm",
"description": "The suite app that processes the step: identity (accounts, SSO), access (app access grants), itsm (laptop, badge, catalog items), hris (payroll, benefits, employment facts, signatures), lms (training), chat (channels, welcome posts), calendar (meetings), pages (guides, agendas, policies), mail (out of office, forwarding), expense, or people for a purely human to-do with no system behind it. When omitted it defaults from kind and title: automated steps go to identity, or access when the title mentions access, roles, apps, entitlements, groups or permissions; meeting to calendar; learning to lms; link and content to pages; form, esign and survey to hris; everything else to people."
},
"form": {
"type": "object",
"nullable": true,
"description": "The mini-form a form step collects. submit-tasks validates values against these fields, stores the submission on the task and completes it.",
"properties": {
"fields": {
"type": "array",
"items": {
"type": "object",
"description": "One field of a form step. Give a key or a label (the other is derived).",
"properties": {
"key": {
"type": "string",
"example": "legal_name",
"description": "Stable key the submission's values are keyed by; derived from the label when omitted."
},
"label": {
"type": "string",
"example": "Legal name"
},
"type": {
"type": "string",
"enum": [
"text",
"textarea",
"select",
"date",
"number",
"email",
"checkbox"
],
"example": "text",
"description": "text, textarea, select (needs options), date (YYYY-MM-DD), number, email or checkbox. Defaults to text."
},
"required": {
"type": "boolean",
"example": true
},
"options": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"14-inch",
"16-inch"
],
"description": "The choices of a select field."
},
"placeholder": {
"type": "string",
"nullable": true,
"example": "As it appears on your ID"
}
}
}
},
"submit_label": {
"type": "string",
"nullable": true,
"example": "Save details",
"description": "Label for the submit control; the UI defaults it."
}
}
},
"link": {
"type": "object",
"nullable": true,
"description": "The page a link step opens (url required). Starting or completing the task records opened_at.",
"properties": {
"url": {
"type": "string",
"example": "https://intranet.example.com/first-day"
},
"label": {
"type": "string",
"example": "Open the first-day agenda",
"description": "Defaults to the step title."
}
}
},
"promoted_from": {
"type": "string",
"nullable": true,
"example": "set_up_vpn_access",
"description": "The ad hoc group (normalized title, from get-insights-templates) this step was promoted from. Set it when adding the step so the step library and insights show the step as promoted."
}
}
},
"description": "Flat list of steps, each naming its phase. Steps nested under phases are accepted too."
}
}
}
StepsUpsertRequest
{
"type": "object",
"description": "Steps to add or change, by key. At least one step must be given, either here or nested under phases[].steps.",
"properties": {
"steps": {
"type": "array",
"items": {
"type": "object",
"description": "A step to add or change, named by key. For a key the template already has, only the fields given change (title is not required); a new key adds a step (title required) to the phase named, or the first phase.",
"required": [
"key"
],
"properties": {
"key": {
"type": "string",
"example": "sign_paperwork",
"description": "Stable key, unique in the template; derived from the title when omitted. Other steps reference it in depends_on."
},
"phase": {
"type": "string",
"example": "pre_start",
"description": "Key of the phase the step belongs to (defaults to the first phase)."
},
"title": {
"type": "string",
"example": "Sign offer letter, NDA and policy acknowledgements"
},
"description": {
"type": "string",
"example": "Three documents in one signing session."
},
"kind": {
"type": "string",
"enum": [
"todo",
"form",
"esign",
"document",
"content",
"learning",
"survey",
"approval",
"automated",
"status_check",
"meeting",
"link"
],
"example": "esign",
"description": "What kind of work it is: todo, form, esign, document, content, learning, survey, approval, automated, status_check, meeting, link (any other value is stored as todo with a warning). automated steps run by themselves when they unlock; status_check steps wait in processing until complete is called; form steps carry form and are finished with submit-tasks; link steps carry link; everything else is done by a person with complete-tasks."
},
"assignee_role": {
"type": "string",
"enum": [
"subject",
"manager",
"buddy",
"hr",
"it",
"facilities",
"payroll",
"security",
"system"
],
"example": "manager",
"description": "Who does the step. subject is the person the journey is for; manager and buddy are named when the journey starts; hr, it, facilities, payroll and security resolve to people on the identity roster; system is an automation."
},
"due": {
"type": "object",
"description": "When the task is due. journey_anchor: offset_days from the anchor date (start date, last working day, ...). phase_unlock: offset_days after the phase opens. assignment: offset_days after the task becomes ready. Defaults to the day the phase opens.",
"properties": {
"anchor": {
"type": "string",
"enum": [
"journey_anchor",
"phase_unlock",
"assignment"
],
"example": "journey_anchor",
"description": "One of journey_anchor, phase_unlock, assignment."
},
"offset_days": {
"type": "integer",
"example": -7
}
}
},
"depends_on": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"confirm_details"
],
"description": "Step keys that must be done or skipped before this one unlocks."
},
"required": {
"type": "boolean",
"example": true,
"description": "Optional steps can be skipped without a warning."
},
"payload": {
"type": "object",
"nullable": true,
"additionalProperties": true,
"description": "Kind-specific detail (a form name, document ids, a course list)."
},
"system": {
"type": "string",
"enum": [
"identity",
"access",
"itsm",
"hris",
"lms",
"chat",
"calendar",
"pages",
"mail",
"expense",
"people"
],
"example": "itsm",
"description": "The suite app that processes the step: identity (accounts, SSO), access (app access grants), itsm (laptop, badge, catalog items), hris (payroll, benefits, employment facts, signatures), lms (training), chat (channels, welcome posts), calendar (meetings), pages (guides, agendas, policies), mail (out of office, forwarding), expense, or people for a purely human to-do with no system behind it. When omitted it defaults from kind and title: automated steps go to identity, or access when the title mentions access, roles, apps, entitlements, groups or permissions; meeting to calendar; learning to lms; link and content to pages; form, esign and survey to hris; everything else to people."
},
"form": {
"type": "object",
"nullable": true,
"description": "The mini-form a form step collects. submit-tasks validates values against these fields, stores the submission on the task and completes it.",
"properties": {
"fields": {
"type": "array",
"items": {
"type": "object",
"description": "One field of a form step. Give a key or a label (the other is derived).",
"properties": {
"key": {
"type": "string",
"example": "legal_name",
"description": "Stable key the submission's values are keyed by; derived from the label when omitted."
},
"label": {
"type": "string",
"example": "Legal name"
},
"type": {
"type": "string",
"enum": [
"text",
"textarea",
"select",
"date",
"number",
"email",
"checkbox"
],
"example": "text",
"description": "text, textarea, select (needs options), date (YYYY-MM-DD), number, email or checkbox. Defaults to text."
},
"required": {
"type": "boolean",
"example": true
},
"options": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"14-inch",
"16-inch"
],
"description": "The choices of a select field."
},
"placeholder": {
"type": "string",
"nullable": true,
"example": "As it appears on your ID"
}
}
}
},
"submit_label": {
"type": "string",
"nullable": true,
"example": "Save details",
"description": "Label for the submit control; the UI defaults it."
}
}
},
"link": {
"type": "object",
"nullable": true,
"description": "The page a link step opens (url required). Starting or completing the task records opened_at.",
"properties": {
"url": {
"type": "string",
"example": "https://intranet.example.com/first-day"
},
"label": {
"type": "string",
"example": "Open the first-day agenda",
"description": "Defaults to the step title."
}
}
},
"promoted_from": {
"type": "string",
"nullable": true,
"example": "set_up_vpn_access",
"description": "The ad hoc group (normalized title, from get-insights-templates) this step was promoted from. Set it when adding the step so the step library and insights show the step as promoted."
}
}
},
"description": "Steps to add or change. A step whose key already exists is patched with the fields given (title is not required for a patch); any other key is added (title required)."
},
"phases": {
"type": "array",
"items": {
"type": "object",
"description": "A phase to add or change, named by key. For a key the template already has, only the fields given change (name is not required); a new key adds a phase (name required). Steps nested under it are added to it.",
"required": [
"key"
],
"properties": {
"key": {
"type": "string",
"example": "pre_start",
"description": "Stable key; derived from the name when omitted."
},
"name": {
"type": "string",
"example": "Before start"
},
"order": {
"type": "integer",
"example": 1,
"description": "Display and evaluation order; defaults to position."
},
"unlock": {
"type": "object",
"description": "When the phase opens. immediate: when the journey starts. offset: offset_days from the journey's anchor date (negative is before it). after_phase: when every task in after_phase is done or skipped. condition: when the phase before it is complete.",
"properties": {
"kind": {
"type": "string",
"enum": [
"immediate",
"offset",
"after_phase",
"condition"
],
"example": "offset",
"description": "One of immediate, offset, after_phase, condition."
},
"offset_days": {
"type": "integer",
"example": -14,
"description": "Days from the anchor date (offset unlocks)."
},
"after_phase": {
"type": "string",
"example": "pre_start",
"description": "Phase key whose completion opens this phase (after_phase unlocks)."
}
}
},
"visible_to": {
"type": "array",
"items": {
"type": "string",
"enum": [
"subject",
"manager",
"buddy",
"hr",
"it",
"facilities",
"payroll",
"security",
"system"
]
},
"description": "Roles that see this phase (subject, manager, buddy, hr, it, facilities, payroll, security, system); empty means everyone."
},
"steps": {
"type": "array",
"items": {
"type": "object",
"description": "One step of a template; every journey started from the template gets one task per step.",
"required": [
"title"
],
"properties": {
"key": {
"type": "string",
"example": "sign_paperwork",
"description": "Stable key, unique in the template; derived from the title when omitted. Other steps reference it in depends_on."
},
"phase": {
"type": "string",
"example": "pre_start",
"description": "Key of the phase the step belongs to (defaults to the first phase)."
},
"title": {
"type": "string",
"example": "Sign offer letter, NDA and policy acknowledgements"
},
"description": {
"type": "string",
"example": "Three documents in one signing session."
},
"kind": {
"type": "string",
"enum": [
"todo",
"form",
"esign",
"document",
"content",
"learning",
"survey",
"approval",
"automated",
"status_check",
"meeting",
"link"
],
"example": "esign",
"description": "What kind of work it is: todo, form, esign, document, content, learning, survey, approval, automated, status_check, meeting, link (any other value is stored as todo with a warning). automated steps run by themselves when they unlock; status_check steps wait in processing until complete is called; form steps carry form and are finished with submit-tasks; link steps carry link; everything else is done by a person with complete-tasks."
},
"assignee_role": {
"type": "string",
"enum": [
"subject",
"manager",
"buddy",
"hr",
"it",
"facilities",
"payroll",
"security",
"system"
],
"example": "manager",
"description": "Who does the step. subject is the person the journey is for; manager and buddy are named when the journey starts; hr, it, facilities, payroll and security resolve to people on the identity roster; system is an automation."
},
"due": {
"type": "object",
"description": "When the task is due. journey_anchor: offset_days from the anchor date (start date, last working day, ...). phase_unlock: offset_days after the phase opens. assignment: offset_days after the task becomes ready. Defaults to the day the phase opens.",
"properties": {
"anchor": {
"type": "string",
"enum": [
"journey_anchor",
"phase_unlock",
"assignment"
],
"example": "journey_anchor",
"description": "One of journey_anchor, phase_unlock, assignment."
},
"offset_days": {
"type": "integer",
"example": -7
}
}
},
"depends_on": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"confirm_details"
],
"description": "Step keys that must be done or skipped before this one unlocks."
},
"required": {
"type": "boolean",
"example": true,
"description": "Optional steps can be skipped without a warning."
},
"payload": {
"type": "object",
"nullable": true,
"additionalProperties": true,
"description": "Kind-specific detail (a form name, document ids, a course list)."
},
"system": {
"type": "string",
"enum": [
"identity",
"access",
"itsm",
"hris",
"lms",
"chat",
"calendar",
"pages",
"mail",
"expense",
"people"
],
"example": "itsm",
"description": "The suite app that processes the step: identity (accounts, SSO), access (app access grants), itsm (laptop, badge, catalog items), hris (payroll, benefits, employment facts, signatures), lms (training), chat (channels, welcome posts), calendar (meetings), pages (guides, agendas, policies), mail (out of office, forwarding), expense, or people for a purely human to-do with no system behind it. When omitted it defaults from kind and title: automated steps go to identity, or access when the title mentions access, roles, apps, entitlements, groups or permissions; meeting to calendar; learning to lms; link and content to pages; form, esign and survey to hris; everything else to people."
},
"form": {
"type": "object",
"nullable": true,
"description": "The mini-form a form step collects. submit-tasks validates values against these fields, stores the submission on the task and completes it.",
"properties": {
"fields": {
"type": "array",
"items": {
"type": "object",
"description": "One field of a form step. Give a key or a label (the other is derived).",
"properties": {
"key": {
"type": "string",
"example": "legal_name",
"description": "Stable key the submission's values are keyed by; derived from the label when omitted."
},
"label": {
"type": "string",
"example": "Legal name"
},
"type": {
"type": "string",
"enum": [
"text",
"textarea",
"select",
"date",
"number",
"email",
"checkbox"
],
"example": "text",
"description": "text, textarea, select (needs options), date (YYYY-MM-DD), number, email or checkbox. Defaults to text."
},
"required": {
"type": "boolean",
"example": true
},
"options": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"14-inch",
"16-inch"
],
"description": "The choices of a select field."
},
"placeholder": {
"type": "string",
"nullable": true,
"example": "As it appears on your ID"
}
}
}
},
"submit_label": {
"type": "string",
"nullable": true,
"example": "Save details",
"description": "Label for the submit control; the UI defaults it."
}
}
},
"link": {
"type": "object",
"nullable": true,
"description": "The page a link step opens (url required). Starting or completing the task records opened_at.",
"properties": {
"url": {
"type": "string",
"example": "https://intranet.example.com/first-day"
},
"label": {
"type": "string",
"example": "Open the first-day agenda",
"description": "Defaults to the step title."
}
}
},
"promoted_from": {
"type": "string",
"nullable": true,
"example": "set_up_vpn_access",
"description": "The ad hoc group (normalized title, from get-insights-templates) this step was promoted from. Set it when adding the step so the step library and insights show the step as promoted."
}
}
},
"description": "Steps of this phase, as an alternative to listing them flat with a phase key. Stored flat either way."
}
}
},
"description": "Phases to add or change at the same time, matched by key. Steps nested under a phase (steps: [...]) are added to that phase."
}
}
}
StepsUpsertResult
{
"allOf": [
{
"$ref": "#/components/schemas/JourneyTemplate"
},
{
"type": "object",
"properties": {
"created": {
"type": "array",
"items": {
"type": "string"
},
"description": "Keys of the steps added"
},
"updated": {
"type": "array",
"items": {
"type": "string"
},
"description": "Keys of the steps changed"
}
}
}
]
}
PreviewRequest
{
"type": "object",
"properties": {
"anchor_date": {
"type": "string",
"format": "date",
"example": "2026-11-17",
"description": "Date the journey would be anchored on; when given every row carries a due_date."
},
"as_role": {
"type": "string",
"example": "manager",
"description": "Only the rows for this role (subject, manager, buddy, hr, it, facilities, payroll, security, system) or all."
}
}
}
TemplatePreview
{
"type": "object",
"properties": {
"template_id": {
"type": "string",
"example": "JT-0001"
},
"name": {
"type": "string"
},
"version": {
"type": "integer"
},
"status": {
"type": "string"
},
"anchor": {
"type": "string",
"enum": [
"start_date",
"last_working_day",
"leave_start_date",
"return_date",
"effective_date"
]
},
"anchor_date": {
"type": "string",
"format": "date",
"nullable": true
},
"as_role": {
"type": "string",
"nullable": true
},
"rows": {
"type": "array",
"description": "One row per step, grouped by role in display order, then by due offset: the timeline a chat can render as a table.",
"items": {
"type": "object",
"properties": {
"role": {
"type": "string"
},
"phase": {
"type": "string"
},
"phase_key": {
"type": "string"
},
"step_key": {
"type": "string"
},
"title": {
"type": "string"
},
"kind": {
"type": "string",
"enum": [
"todo",
"form",
"esign",
"document",
"content",
"learning",
"survey",
"approval",
"automated",
"status_check",
"meeting",
"link"
]
},
"required": {
"type": "boolean"
},
"due_offset_days": {
"type": "integer",
"nullable": true,
"description": "Days from the anchor, when known up front"
},
"due_label": {
"type": "string",
"example": "start -7d"
},
"due_date": {
"type": "string",
"format": "date",
"nullable": true
},
"unlock_date": {
"type": "string",
"format": "date",
"nullable": true
},
"depends_on": {
"type": "array",
"items": {
"type": "string"
}
},
"system": {
"type": "string",
"enum": [
"identity",
"access",
"itsm",
"hris",
"lms",
"chat",
"calendar",
"pages",
"mail",
"expense",
"people"
]
},
"form_field_count": {
"type": "integer",
"nullable": true,
"description": "How many fields a form step collects; null for steps without a form."
},
"link_url": {
"type": "string",
"nullable": true
}
}
}
},
"by_role": {
"type": "object",
"additionalProperties": {
"type": "integer"
}
},
"span_days": {
"type": "integer",
"description": "Days between the earliest and latest due offset"
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
PublishRequest
{
"type": "object",
"properties": {
"apply_to_active": {
"type": "boolean",
"example": true,
"description": "Also add any step not yet present to every active journey of this template: ready when its phase is already open (or locked behind its dependencies), locked when the phase is still to come. Each added task records added_by_version."
}
}
}
PublishResult
{
"allOf": [
{
"$ref": "#/components/schemas/JourneyTemplate"
},
{
"type": "object",
"properties": {
"applied_to": {
"type": "integer",
"description": "Active journeys the new version was applied to"
},
"tasks_added": {
"type": "integer",
"description": "Tasks added across those journeys"
}
}
}
]
}
CloneRequest
{
"type": "object",
"properties": {
"name": {
"type": "string",
"example": "Contractor onboarding",
"description": "Name for the copy; defaults to \"Copy of <name>\"."
}
}
}
SeedSamplesRequest
{
"type": "object",
"properties": {
"force": {
"type": "boolean",
"example": false,
"description": "Clear this app's templates, journeys, tasks, activity and start claims first and write the sample world even when some are already there."
}
}
}
SeedSamplesResult
{
"type": "object",
"properties": {
"seeded": {
"type": "boolean",
"readOnly": true,
"description": "true when the sample world was written; false when any of this app's collections already held a record and force was not set (nothing changed)."
},
"templates": {
"type": "integer",
"readOnly": true,
"example": 4
},
"journeys": {
"type": "integer",
"readOnly": true,
"example": 8
},
"tasks": {
"type": "integer",
"readOnly": true
},
"activity": {
"type": "integer",
"readOnly": true
},
"start_claims": {
"type": "integer",
"readOnly": true,
"description": "Start claims held; 0 after a seed, since they name journeys the seed replaced."
}
}
}
Journey
{
"type": "object",
"description": "One person's run of a template: dated tasks, progress and health. Started with create-journeys.",
"properties": {
"id": {
"type": "string",
"readOnly": true,
"example": "JNY-0001"
},
"template_id": {
"type": "string",
"readOnly": true,
"example": "JT-0001"
},
"template_name": {
"type": "string",
"readOnly": true,
"example": "New hire onboarding"
},
"template_version": {
"type": "integer",
"readOnly": true,
"example": 2,
"description": "The template version the journey's tasks follow; publish with apply_to_active raises it."
},
"template_snapshot": {
"type": "object",
"nullable": true,
"readOnly": true,
"description": "The phases (with unlock rules) and step definitions this journey runs on: copied from the template when the journey started and replaced only by publish-templates with apply_to_active, so editing or deleting the template never changes a journey under way. Returned by get-journeys; list rows leave it out.",
"properties": {
"phases": {
"type": "array",
"items": {
"type": "object",
"description": "A phase groups steps and decides when they become available. Steps may be nested here (steps: [...]) or listed flat on the template with a phase key.",
"required": [
"name"
],
"properties": {
"key": {
"type": "string",
"example": "pre_start",
"description": "Stable key; derived from the name when omitted."
},
"name": {
"type": "string",
"example": "Before start"
},
"order": {
"type": "integer",
"example": 1,
"description": "Display and evaluation order; defaults to position."
},
"unlock": {
"type": "object",
"description": "When the phase opens. immediate: when the journey starts. offset: offset_days from the journey's anchor date (negative is before it). after_phase: when every task in after_phase is done or skipped. condition: when the phase before it is complete.",
"properties": {
"kind": {
"type": "string",
"enum": [
"immediate",
"offset",
"after_phase",
"condition"
],
"example": "offset",
"description": "One of immediate, offset, after_phase, condition."
},
"offset_days": {
"type": "integer",
"example": -14,
"description": "Days from the anchor date (offset unlocks)."
},
"after_phase": {
"type": "string",
"example": "pre_start",
"description": "Phase key whose completion opens this phase (after_phase unlocks)."
}
}
},
"visible_to": {
"type": "array",
"items": {
"type": "string",
"enum": [
"subject",
"manager",
"buddy",
"hr",
"it",
"facilities",
"payroll",
"security",
"system"
]
},
"description": "Roles that see this phase (subject, manager, buddy, hr, it, facilities, payroll, security, system); empty means everyone."
},
"steps": {
"type": "array",
"items": {
"type": "object",
"description": "One step of a template; every journey started from the template gets one task per step.",
"required": [
"title"
],
"properties": {
"key": {
"type": "string",
"example": "sign_paperwork",
"description": "Stable key, unique in the template; derived from the title when omitted. Other steps reference it in depends_on."
},
"phase": {
"type": "string",
"example": "pre_start",
"description": "Key of the phase the step belongs to (defaults to the first phase)."
},
"title": {
"type": "string",
"example": "Sign offer letter, NDA and policy acknowledgements"
},
"description": {
"type": "string",
"example": "Three documents in one signing session."
},
"kind": {
"type": "string",
"enum": [
"todo",
"form",
"esign",
"document",
"content",
"learning",
"survey",
"approval",
"automated",
"status_check",
"meeting",
"link"
],
"example": "esign",
"description": "What kind of work it is: todo, form, esign, document, content, learning, survey, approval, automated, status_check, meeting, link (any other value is stored as todo with a warning). automated steps run by themselves when they unlock; status_check steps wait in processing until complete is called; form steps carry form and are finished with submit-tasks; link steps carry link; everything else is done by a person with complete-tasks."
},
"assignee_role": {
"type": "string",
"enum": [
"subject",
"manager",
"buddy",
"hr",
"it",
"facilities",
"payroll",
"security",
"system"
],
"example": "manager",
"description": "Who does the step. subject is the person the journey is for; manager and buddy are named when the journey starts; hr, it, facilities, payroll and security resolve to people on the identity roster; system is an automation."
},
"due": {
"type": "object",
"description": "When the task is due. journey_anchor: offset_days from the anchor date (start date, last working day, ...). phase_unlock: offset_days after the phase opens. assignment: offset_days after the task becomes ready. Defaults to the day the phase opens.",
"properties": {
"anchor": {
"type": "string",
"enum": [
"journey_anchor",
"phase_unlock",
"assignment"
],
"example": "journey_anchor",
"description": "One of journey_anchor, phase_unlock, assignment."
},
"offset_days": {
"type": "integer",
"example": -7
}
}
},
"depends_on": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"confirm_details"
],
"description": "Step keys that must be done or skipped before this one unlocks."
},
"required": {
"type": "boolean",
"example": true,
"description": "Optional steps can be skipped without a warning."
},
"payload": {
"type": "object",
"nullable": true,
"additionalProperties": true,
"description": "Kind-specific detail (a form name, document ids, a course list)."
},
"system": {
"type": "string",
"enum": [
"identity",
"access",
"itsm",
"hris",
"lms",
"chat",
"calendar",
"pages",
"mail",
"expense",
"people"
],
"example": "itsm",
"description": "The suite app that processes the step: identity (accounts, SSO), access (app access grants), itsm (laptop, badge, catalog items), hris (payroll, benefits, employment facts, signatures), lms (training), chat (channels, welcome posts), calendar (meetings), pages (guides, agendas, policies), mail (out of office, forwarding), expense, or people for a purely human to-do with no system behind it. When omitted it defaults from kind and title: automated steps go to identity, or access when the title mentions access, roles, apps, entitlements, groups or permissions; meeting to calendar; learning to lms; link and content to pages; form, esign and survey to hris; everything else to people."
},
"form": {
"type": "object",
"nullable": true,
"description": "The mini-form a form step collects. submit-tasks validates values against these fields, stores the submission on the task and completes it.",
"properties": {
"fields": {
"type": "array",
"items": {
"type": "object",
"description": "One field of a form step. Give a key or a label (the other is derived).",
"properties": {
"key": {
"type": "string",
"example": "legal_name",
"description": "Stable key the submission's values are keyed by; derived from the label when omitted."
},
"label": {
"type": "string",
"example": "Legal name"
},
"type": {
"type": "string",
"enum": [
"text",
"textarea",
"select",
"date",
"number",
"email",
"checkbox"
],
"example": "text",
"description": "text, textarea, select (needs options), date (YYYY-MM-DD), number, email or checkbox. Defaults to text."
},
"required": {
"type": "boolean",
"example": true
},
"options": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"14-inch",
"16-inch"
],
"description": "The choices of a select field."
},
"placeholder": {
"type": "string",
"nullable": true,
"example": "As it appears on your ID"
}
}
}
},
"submit_label": {
"type": "string",
"nullable": true,
"example": "Save details",
"description": "Label for the submit control; the UI defaults it."
}
}
},
"link": {
"type": "object",
"nullable": true,
"description": "The page a link step opens (url required). Starting or completing the task records opened_at.",
"properties": {
"url": {
"type": "string",
"example": "https://intranet.example.com/first-day"
},
"label": {
"type": "string",
"example": "Open the first-day agenda",
"description": "Defaults to the step title."
}
}
},
"promoted_from": {
"type": "string",
"nullable": true,
"example": "set_up_vpn_access",
"description": "The ad hoc group (normalized title, from get-insights-templates) this step was promoted from. Set it when adding the step so the step library and insights show the step as promoted."
}
}
},
"description": "Steps of this phase, as an alternative to listing them flat with a phase key. Stored flat either way."
}
}
}
},
"steps": {
"type": "array",
"items": {
"type": "object",
"description": "One step of a template; every journey started from the template gets one task per step.",
"required": [
"title"
],
"properties": {
"key": {
"type": "string",
"example": "sign_paperwork",
"description": "Stable key, unique in the template; derived from the title when omitted. Other steps reference it in depends_on."
},
"phase": {
"type": "string",
"example": "pre_start",
"description": "Key of the phase the step belongs to (defaults to the first phase)."
},
"title": {
"type": "string",
"example": "Sign offer letter, NDA and policy acknowledgements"
},
"description": {
"type": "string",
"example": "Three documents in one signing session."
},
"kind": {
"type": "string",
"enum": [
"todo",
"form",
"esign",
"document",
"content",
"learning",
"survey",
"approval",
"automated",
"status_check",
"meeting",
"link"
],
"example": "esign",
"description": "What kind of work it is: todo, form, esign, document, content, learning, survey, approval, automated, status_check, meeting, link (any other value is stored as todo with a warning). automated steps run by themselves when they unlock; status_check steps wait in processing until complete is called; form steps carry form and are finished with submit-tasks; link steps carry link; everything else is done by a person with complete-tasks."
},
"assignee_role": {
"type": "string",
"enum": [
"subject",
"manager",
"buddy",
"hr",
"it",
"facilities",
"payroll",
"security",
"system"
],
"example": "manager",
"description": "Who does the step. subject is the person the journey is for; manager and buddy are named when the journey starts; hr, it, facilities, payroll and security resolve to people on the identity roster; system is an automation."
},
"due": {
"type": "object",
"description": "When the task is due. journey_anchor: offset_days from the anchor date (start date, last working day, ...). phase_unlock: offset_days after the phase opens. assignment: offset_days after the task becomes ready. Defaults to the day the phase opens.",
"properties": {
"anchor": {
"type": "string",
"enum": [
"journey_anchor",
"phase_unlock",
"assignment"
],
"example": "journey_anchor",
"description": "One of journey_anchor, phase_unlock, assignment."
},
"offset_days": {
"type": "integer",
"example": -7
}
}
},
"depends_on": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"confirm_details"
],
"description": "Step keys that must be done or skipped before this one unlocks."
},
"required": {
"type": "boolean",
"example": true,
"description": "Optional steps can be skipped without a warning."
},
"payload": {
"type": "object",
"nullable": true,
"additionalProperties": true,
"description": "Kind-specific detail (a form name, document ids, a course list)."
},
"system": {
"type": "string",
"enum": [
"identity",
"access",
"itsm",
"hris",
"lms",
"chat",
"calendar",
"pages",
"mail",
"expense",
"people"
],
"example": "itsm",
"description": "The suite app that processes the step: identity (accounts, SSO), access (app access grants), itsm (laptop, badge, catalog items), hris (payroll, benefits, employment facts, signatures), lms (training), chat (channels, welcome posts), calendar (meetings), pages (guides, agendas, policies), mail (out of office, forwarding), expense, or people for a purely human to-do with no system behind it. When omitted it defaults from kind and title: automated steps go to identity, or access when the title mentions access, roles, apps, entitlements, groups or permissions; meeting to calendar; learning to lms; link and content to pages; form, esign and survey to hris; everything else to people."
},
"form": {
"type": "object",
"nullable": true,
"description": "The mini-form a form step collects. submit-tasks validates values against these fields, stores the submission on the task and completes it.",
"properties": {
"fields": {
"type": "array",
"items": {
"type": "object",
"description": "One field of a form step. Give a key or a label (the other is derived).",
"properties": {
"key": {
"type": "string",
"example": "legal_name",
"description": "Stable key the submission's values are keyed by; derived from the label when omitted."
},
"label": {
"type": "string",
"example": "Legal name"
},
"type": {
"type": "string",
"enum": [
"text",
"textarea",
"select",
"date",
"number",
"email",
"checkbox"
],
"example": "text",
"description": "text, textarea, select (needs options), date (YYYY-MM-DD), number, email or checkbox. Defaults to text."
},
"required": {
"type": "boolean",
"example": true
},
"options": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"14-inch",
"16-inch"
],
"description": "The choices of a select field."
},
"placeholder": {
"type": "string",
"nullable": true,
"example": "As it appears on your ID"
}
}
}
},
"submit_label": {
"type": "string",
"nullable": true,
"example": "Save details",
"description": "Label for the submit control; the UI defaults it."
}
}
},
"link": {
"type": "object",
"nullable": true,
"description": "The page a link step opens (url required). Starting or completing the task records opened_at.",
"properties": {
"url": {
"type": "string",
"example": "https://intranet.example.com/first-day"
},
"label": {
"type": "string",
"example": "Open the first-day agenda",
"description": "Defaults to the step title."
}
}
},
"promoted_from": {
"type": "string",
"nullable": true,
"example": "set_up_vpn_access",
"description": "The ad hoc group (normalized title, from get-insights-templates) this step was promoted from. Set it when adding the step so the step library and insights show the step as promoted."
}
}
}
}
}
},
"excluded_steps": {
"type": "array",
"readOnly": true,
"items": {
"type": "string"
},
"example": [
"buddy_lunch"
],
"description": "Step keys left out when the journey started (exclude_steps on create-journeys); apply_to_active never adds them."
},
"journey_type": {
"type": "string",
"readOnly": true,
"enum": [
"onboarding",
"offboarding",
"job_change",
"leave",
"return_to_work",
"relocation",
"custom"
]
},
"subject_email": {
"type": "string",
"format": "email",
"example": "priya.sharma@acme.com",
"description": "The person the journey is for.",
"readOnly": true
},
"subject_name": {
"type": "string",
"example": "Priya Sharma"
},
"manager_email": {
"type": "string",
"format": "email",
"example": "dana.whitfield@acme.com",
"description": "The subject's manager; takes the manager-role tasks.",
"nullable": true
},
"buddy_email": {
"type": "string",
"format": "email",
"example": "marcus.lee@acme.com",
"description": "The onboarding buddy; takes the buddy-role tasks.",
"nullable": true
},
"role_assignments": {
"type": "object",
"readOnly": true,
"additionalProperties": {
"type": "string",
"format": "email"
},
"example": {
"it": "jordan.alvarez@acme.com",
"hr": "elena.petrova@acme.com"
},
"description": "Who holds the hr, it, facilities, payroll and security roles on this journey, fixed when it started (the roster's picks, or role_assignments given to create-journeys). Tasks added later for a role (publish with apply_to_active, add-task by role) go to these people."
},
"anchor": {
"type": "string",
"readOnly": true,
"enum": [
"start_date",
"last_working_day",
"leave_start_date",
"return_date",
"effective_date"
],
"description": "Which date anchor_date is (from the template)."
},
"anchor_date": {
"type": "string",
"format": "date",
"example": "2026-11-17",
"description": "The date every due date hangs off (start date, last working day, leave start, return, effective date)."
},
"started_at": {
"type": "string",
"format": "date-time",
"readOnly": true
},
"completed_at": {
"type": "string",
"format": "date-time",
"nullable": true,
"readOnly": true
},
"cancelled_at": {
"type": "string",
"format": "date-time",
"nullable": true,
"readOnly": true
},
"status": {
"type": "string",
"readOnly": true,
"enum": [
"draft",
"active",
"completed",
"cancelled"
],
"description": "active while tasks remain, completed when every task is done or skipped, cancelled with cancel-journeys (draft is reserved and never set)."
},
"health": {
"type": "string",
"readOnly": true,
"enum": [
"passing",
"warning",
"failing"
],
"description": "failing when a task is in error, warning when anything is overdue, else passing."
},
"progress_percent": {
"type": "integer",
"readOnly": true,
"example": 14,
"description": "(done + skipped) / total"
},
"counts": {
"type": "object",
"readOnly": true,
"properties": {
"total": {
"type": "integer"
},
"done": {
"type": "integer"
},
"skipped": {
"type": "integer"
},
"in_progress": {
"type": "integer",
"description": "in_progress plus processing"
},
"ready": {
"type": "integer"
},
"locked": {
"type": "integer"
},
"overdue": {
"type": "integer"
},
"error": {
"type": "integer"
}
}
},
"up_next": {
"type": "string",
"nullable": true,
"readOnly": true,
"example": "JTK-0001-03",
"description": "The open task due soonest."
},
"up_next_title": {
"type": "string",
"nullable": true,
"readOnly": true
},
"next_due_date": {
"type": "string",
"format": "date",
"nullable": true,
"readOnly": true,
"description": "Earliest due date among open tasks."
},
"open_due_dates": {
"type": "array",
"readOnly": true,
"items": {
"type": "string",
"format": "date"
},
"description": "Due dates of the open tasks, sorted. counts.overdue, is_overdue and health are computed from these as of today on every read."
},
"locked_unlock_dates": {
"type": "array",
"readOnly": true,
"items": {
"type": "string",
"format": "date"
},
"description": "Unlock days of the tasks locked only on a date, sorted. Lists count the ones whose day has come as ready; reading one journey (get-journeys, list-journey-tasks, get-my-journey) opens them for real."
},
"is_overdue": {
"type": "boolean",
"readOnly": true,
"description": "Any open task past its due date (computed as of today, on every read)."
},
"ad_hoc_count": {
"type": "integer",
"readOnly": true,
"example": 1,
"description": "Tasks added to this journey by hand (add-task)."
},
"flag_count": {
"type": "integer",
"readOnly": true,
"example": 0,
"description": "Tasks currently flagged as bumpy."
},
"late_count": {
"type": "integer",
"readOnly": true,
"example": 2,
"description": "Tasks finished after their due date."
},
"created_by": {
"type": "string",
"nullable": true,
"readOnly": true,
"description": "Who started it: an email, or system for an HRIS event or an assistant."
},
"source": {
"type": "string",
"readOnly": true,
"enum": [
"manual",
"hris_event",
"catalog_form",
"agent_chat"
]
},
"createdAt": {
"type": "string",
"format": "date-time",
"readOnly": true
},
"updatedAt": {
"type": "string",
"format": "date-time",
"readOnly": true
}
}
}
StartJourneyRequest
{
"type": "object",
"required": [
"template_id",
"subject_email"
],
"properties": {
"template_id": {
"type": "string",
"example": "JT-0001",
"description": "A published template (list-templates)."
},
"subject_email": {
"type": "string",
"format": "email",
"example": "priya.sharma@acme.com",
"description": "The person the journey is for."
},
"anchor_date": {
"type": "string",
"format": "date",
"example": "2026-11-17",
"description": "The date the template's offsets hang off (start date for onboarding, last working day for offboarding, ...). Required unless the subject is on the identity roster with a start date and the template is anchored on start_date."
},
"manager_email": {
"type": "string",
"format": "email",
"example": "dana.whitfield@acme.com",
"description": "The subject's manager. Defaults to the manager on the identity roster; required when the template has manager steps and none is known."
},
"buddy_email": {
"type": "string",
"format": "email",
"example": "marcus.lee@acme.com",
"description": "A teammate who is not the manager. Required when the template has buddy steps."
},
"subject_name": {
"type": "string",
"example": "Priya Sharma",
"description": "Defaults to the roster name or a name derived from the email."
},
"source": {
"type": "string",
"enum": [
"manual",
"hris_event",
"catalog_form",
"agent_chat"
],
"example": "agent_chat",
"description": "How this journey came to start: manual, hris_event, catalog_form, agent_chat. Defaults to manual."
},
"role_assignments": {
"type": "object",
"additionalProperties": {
"type": "string",
"format": "email"
},
"example": {
"it": "jordan.alvarez@acme.com"
},
"description": "Override who takes the hr, it, facilities, payroll or security tasks (they otherwise resolve from the identity roster by department)."
},
"exclude_steps": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"buddy_lunch"
],
"description": "Step keys to leave out of this journey."
}
}
}
StartJourneyResult
{
"allOf": [
{
"$ref": "#/components/schemas/Journey"
},
{
"type": "object",
"properties": {
"tasks": {
"type": "array",
"items": {
"$ref": "#/components/schemas/JourneyTask"
},
"description": "Every task created, already evaluated: ready, locked, or done when an automated step ran at once."
}
}
}
]
}
CancelJourneyRequest
{
"type": "object",
"properties": {
"reason": {
"type": "string",
"example": "Offer withdrawn",
"description": "Recorded on the activity feed and on every open task, which is skipped."
}
}
}
JourneyTask
{
"type": "object",
"description": "One step of one journey, for one assignee, with a due date and a status.",
"properties": {
"id": {
"type": "string",
"readOnly": true,
"example": "JTK-0001-03"
},
"journey_id": {
"type": "string",
"readOnly": true,
"example": "JNY-0001"
},
"template_id": {
"type": "string",
"readOnly": true,
"example": "JT-0001"
},
"subject_email": {
"type": "string",
"format": "email",
"example": "priya.sharma@acme.com",
"description": "The person the journey is for.",
"readOnly": true
},
"phase_key": {
"type": "string",
"readOnly": true,
"example": "pre_start"
},
"phase_name": {
"type": "string",
"readOnly": true,
"example": "Before start"
},
"step_key": {
"type": "string",
"readOnly": true,
"example": "sign_paperwork"
},
"title": {
"type": "string",
"example": "Sign offer letter, NDA and policy acknowledgements"
},
"description": {
"type": "string"
},
"kind": {
"type": "string",
"readOnly": true,
"enum": [
"todo",
"form",
"esign",
"document",
"content",
"learning",
"survey",
"approval",
"automated",
"status_check",
"meeting",
"link"
]
},
"assignee_email": {
"type": "string",
"format": "email",
"example": "dana.whitfield@acme.com",
"description": "Who does it; null for system steps or an unresolved role. Moves only with reassign-tasks, which records reassigned_from and logs the change.",
"nullable": true,
"readOnly": true
},
"assignee_role": {
"type": "string",
"enum": [
"subject",
"manager",
"buddy",
"hr",
"it",
"facilities",
"payroll",
"security",
"system"
],
"example": "manager",
"description": "Who does the step. subject is the person the journey is for; manager and buddy are named when the journey starts; hr, it, facilities, payroll and security resolve to people on the identity roster; system is an automation.",
"readOnly": true
},
"due_date": {
"type": "string",
"format": "date",
"example": "2026-11-17",
"description": "When it is due. Null until a task whose due date hangs off its unlock day opens.",
"nullable": true
},
"unlock_date": {
"type": "string",
"format": "date",
"nullable": true,
"readOnly": true,
"description": "The day its phase opens, when the phase opens on a date."
},
"status": {
"type": "string",
"readOnly": true,
"enum": [
"locked",
"ready",
"in_progress",
"processing",
"done",
"skipped",
"error"
],
"description": "locked: phase not open or prerequisites not done. ready: can be worked. in_progress: started. processing: an automation or status check is running. done, skipped. error: an automation failed."
},
"locked_reason": {
"type": "string",
"nullable": true,
"readOnly": true,
"enum": [
"date",
"deps",
"phase",
null
],
"description": "Why it is locked: its phase opens on a date, prerequisites are not done, or an earlier phase is not complete."
},
"depends_on": {
"type": "array",
"readOnly": true,
"items": {
"type": "string"
},
"description": "Step keys that must be done or skipped first."
},
"is_overdue": {
"type": "boolean",
"readOnly": true,
"description": "due_date is past and the task is not done or skipped (computed as of today)."
},
"required": {
"type": "boolean"
},
"payload": {
"type": "object",
"nullable": true,
"additionalProperties": true
},
"unlocked_at": {
"type": "string",
"format": "date-time",
"nullable": true,
"readOnly": true
},
"started_at": {
"type": "string",
"format": "date-time",
"nullable": true,
"readOnly": true
},
"completed_at": {
"type": "string",
"format": "date-time",
"nullable": true,
"readOnly": true
},
"completed_by": {
"type": "string",
"nullable": true,
"readOnly": true,
"description": "Email of who completed it, or system."
},
"note": {
"type": "string",
"nullable": true,
"description": "Free text left when completing, skipping or updating."
},
"added_by_version": {
"type": "integer",
"readOnly": true,
"example": 2,
"description": "The template version that introduced this step to the journey."
},
"system": {
"type": "string",
"enum": [
"identity",
"access",
"itsm",
"hris",
"lms",
"chat",
"calendar",
"pages",
"mail",
"expense",
"people"
],
"example": "itsm",
"description": "The suite app that processes the step: identity (accounts, SSO), access (app access grants), itsm (laptop, badge, catalog items), hris (payroll, benefits, employment facts, signatures), lms (training), chat (channels, welcome posts), calendar (meetings), pages (guides, agendas, policies), mail (out of office, forwarding), expense, or people for a purely human to-do with no system behind it. When omitted it defaults from kind and title: automated steps go to identity, or access when the title mentions access, roles, apps, entitlements, groups or permissions; meeting to calendar; learning to lms; link and content to pages; form, esign and survey to hris; everything else to people."
},
"form": {
"type": "object",
"nullable": true,
"description": "The mini-form a form step collects. submit-tasks validates values against these fields, stores the submission on the task and completes it.",
"properties": {
"fields": {
"type": "array",
"items": {
"type": "object",
"description": "One field of a form step. Give a key or a label (the other is derived).",
"properties": {
"key": {
"type": "string",
"example": "legal_name",
"description": "Stable key the submission's values are keyed by; derived from the label when omitted."
},
"label": {
"type": "string",
"example": "Legal name"
},
"type": {
"type": "string",
"enum": [
"text",
"textarea",
"select",
"date",
"number",
"email",
"checkbox"
],
"example": "text",
"description": "text, textarea, select (needs options), date (YYYY-MM-DD), number, email or checkbox. Defaults to text."
},
"required": {
"type": "boolean",
"example": true
},
"options": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"14-inch",
"16-inch"
],
"description": "The choices of a select field."
},
"placeholder": {
"type": "string",
"nullable": true,
"example": "As it appears on your ID"
}
}
}
},
"submit_label": {
"type": "string",
"nullable": true,
"example": "Save details",
"description": "Label for the submit control; the UI defaults it."
}
},
"readOnly": true
},
"link": {
"type": "object",
"nullable": true,
"description": "The page a link step opens (url required). Starting or completing the task records opened_at.",
"properties": {
"url": {
"type": "string",
"example": "https://intranet.example.com/first-day"
},
"label": {
"type": "string",
"example": "Open the first-day agenda",
"description": "Defaults to the step title."
}
},
"readOnly": true
},
"origin": {
"type": "string",
"readOnly": true,
"enum": [
"template",
"ad_hoc"
],
"example": "template",
"description": "template: one of the template's steps. ad_hoc: added to this one journey with add-task."
},
"added_by": {
"type": "string",
"nullable": true,
"readOnly": true,
"description": "Who added an ad hoc task (an email, or api); null for template tasks."
},
"reason": {
"type": "string",
"nullable": true,
"example": "Working from home three days a week; not in the standard kit",
"description": "Why an ad hoc task was needed. get-insights-templates groups ad hoc tasks by title and carries the reasons."
},
"flagged": {
"type": "boolean",
"readOnly": true,
"description": "Someone marked this task as bumpy (flag-tasks)."
},
"flag_note": {
"type": "string",
"nullable": true,
"readOnly": true
},
"flagged_by": {
"type": "string",
"nullable": true,
"readOnly": true
},
"flagged_at": {
"type": "string",
"format": "date-time",
"nullable": true,
"readOnly": true
},
"completed_late": {
"type": "boolean",
"readOnly": true,
"description": "Finished after its due date."
},
"days_late": {
"type": "integer",
"nullable": true,
"readOnly": true,
"description": "Days between the due date and completion (0 when on time); null until completed or without a due date."
},
"reassigned_from": {
"type": "string",
"nullable": true,
"readOnly": true,
"description": "The previous assignee after reassign-tasks."
},
"reopened_count": {
"type": "integer",
"readOnly": true,
"description": "How many times reopen-tasks brought it back."
},
"submission": {
"type": "object",
"nullable": true,
"readOnly": true,
"description": "What submit-tasks stored for a form task. _filter \"submission ne null\" lists submitted tasks.",
"properties": {
"values": {
"type": "object",
"additionalProperties": true
},
"submitted_at": {
"type": "string",
"format": "date-time"
},
"submitted_by": {
"type": "string"
}
}
},
"opened_at": {
"type": "string",
"format": "date-time",
"nullable": true,
"readOnly": true,
"description": "When a link task's page was opened (start or complete)."
},
"createdAt": {
"type": "string",
"format": "date-time",
"readOnly": true
},
"updatedAt": {
"type": "string",
"format": "date-time",
"readOnly": true
}
}
}
TaskNoteRequest
{
"type": "object",
"properties": {
"note": {
"type": "string",
"example": "Signed in the portal this morning",
"description": "Optional note recorded on the task and the activity feed."
}
}
}
ReassignTaskRequest
{
"type": "object",
"required": [
"assignee_email"
],
"properties": {
"assignee_email": {
"type": "string",
"format": "email",
"example": "jordan.alvarez@acme.com",
"description": "The person who should do the task."
},
"note": {
"type": "string",
"description": "Optional note recorded on the activity feed."
}
}
}
TaskActionResult
{
"type": "object",
"properties": {
"task": {
"$ref": "#/components/schemas/JourneyTask"
},
"unlocked": {
"type": "array",
"items": {
"$ref": "#/components/schemas/JourneyTask"
},
"description": "Tasks this action opened, ran (automated) or set processing (status checks), in order."
},
"journey": {
"$ref": "#/components/schemas/Journey"
},
"warnings": {
"type": "array",
"items": {
"type": "string"
},
"description": "For example that a required step was skipped."
}
}
}
JourneyActivity
{
"type": "object",
"description": "One entry on a journey's feed: who did what, when.",
"properties": {
"id": {
"type": "string",
"readOnly": true,
"example": "JACT-0001-004"
},
"journey_id": {
"type": "string",
"readOnly": true,
"example": "JNY-0001"
},
"subject_email": {
"type": "string",
"format": "email",
"example": "priya.sharma@acme.com",
"description": "The person the journey is for.",
"readOnly": true
},
"at": {
"type": "string",
"format": "date-time",
"readOnly": true
},
"kind": {
"type": "string",
"readOnly": true,
"enum": [
"journey_started",
"journey_updated",
"journey_completed",
"journey_cancelled",
"task_unlocked",
"task_started",
"task_completed",
"task_submitted",
"task_skipped",
"task_reopened",
"task_reassigned",
"task_added",
"task_flagged",
"task_unflagged",
"automation_completed",
"status_check_started",
"template_applied"
]
},
"actor": {
"type": "string",
"readOnly": true,
"description": "Email of who acted, or system."
},
"task_id": {
"type": "string",
"nullable": true,
"readOnly": true
},
"step_key": {
"type": "string",
"nullable": true,
"readOnly": true
},
"title": {
"type": "string",
"readOnly": true,
"example": "Completed Sign offer letter, NDA and policy acknowledgements"
},
"detail": {
"type": "string",
"nullable": true,
"readOnly": true
},
"createdAt": {
"type": "string",
"format": "date-time",
"readOnly": true
},
"updatedAt": {
"type": "string",
"format": "date-time",
"readOnly": true
}
}
}
StepLibraryRow
{
"type": "object",
"description": "One step title as it appears across the instance's templates: what other journeys ask people to do. Built from the templates on every read; nothing is stored.",
"properties": {
"id": {
"type": "string",
"readOnly": true,
"example": "order_and_ship_laptop_and_peripherals",
"description": "The normalized title rows are grouped by."
},
"title": {
"type": "string",
"readOnly": true
},
"description": {
"type": "string",
"readOnly": true
},
"kind": {
"type": "string",
"readOnly": true,
"enum": [
"todo",
"form",
"esign",
"document",
"content",
"learning",
"survey",
"approval",
"automated",
"status_check",
"meeting",
"link"
]
},
"assignee_role": {
"type": "string",
"readOnly": true,
"enum": [
"subject",
"manager",
"buddy",
"hr",
"it",
"facilities",
"payroll",
"security",
"system"
]
},
"system": {
"type": "string",
"readOnly": true,
"enum": [
"identity",
"access",
"itsm",
"hris",
"lms",
"chat",
"calendar",
"pages",
"mail",
"expense",
"people"
]
},
"due_offset_days": {
"type": "integer",
"nullable": true,
"readOnly": true,
"description": "Days from the journey anchor, when known up front."
},
"due_label": {
"type": "string",
"readOnly": true,
"example": "start -7d"
},
"phase_name": {
"type": "string",
"readOnly": true,
"example": "Before start"
},
"template_ids": {
"type": "array",
"readOnly": true,
"items": {
"type": "string"
}
},
"template_names": {
"type": "array",
"readOnly": true,
"items": {
"type": "string"
},
"example": [
"New hire onboarding",
"Internal transfer"
]
},
"used_in_count": {
"type": "integer",
"readOnly": true,
"example": 2,
"description": "How many template steps share this title."
},
"origin": {
"type": "string",
"readOnly": true,
"enum": [
"template",
"promoted"
],
"description": "promoted when the step was added from an ad hoc group (promoted_from set)."
},
"promoted_from": {
"type": "string",
"nullable": true,
"readOnly": true
},
"form_field_count": {
"type": "integer",
"nullable": true,
"readOnly": true
},
"link_url": {
"type": "string",
"nullable": true,
"readOnly": true
},
"depends_on_count": {
"type": "integer",
"readOnly": true
}
}
}
AdHocTaskRequest
{
"type": "object",
"description": "A task this one journey needs that the template did not foresee. Give who does it as assignee_email or as a role of the journey.",
"required": [
"title",
"due_date"
],
"properties": {
"title": {
"type": "string",
"example": "Set up VPN access for remote work"
},
"description": {
"type": "string"
},
"assignee_email": {
"type": "string",
"format": "email",
"example": "jordan.alvarez@acme.com",
"description": "Who does it. Either this or assignee_role."
},
"assignee_role": {
"type": "string",
"enum": [
"subject",
"manager",
"buddy",
"hr",
"it",
"facilities",
"payroll",
"security"
],
"example": "it",
"description": "A role of the journey (subject, manager, buddy, hr, it, facilities, payroll, security); resolves to the person holding it (the manager, the buddy, the IT contact)."
},
"due_date": {
"type": "string",
"format": "date",
"example": "2026-11-19",
"description": "When it is due."
},
"reason": {
"type": "string",
"example": "Working from home three days a week; not in the standard kit",
"description": "Why it was needed. Recorded on the task and the activity feed; get-insights-templates groups ad hoc tasks by title and shows the reasons, so write the real one."
},
"kind": {
"type": "string",
"enum": [
"todo",
"form",
"esign",
"document",
"content",
"learning",
"survey",
"approval",
"meeting",
"link"
],
"example": "todo",
"description": "One of todo, form, esign, document, content, learning, survey, approval, meeting, link; defaults to todo. automated and status_check steps belong on the template."
},
"system": {
"type": "string",
"enum": [
"identity",
"access",
"itsm",
"hris",
"lms",
"chat",
"calendar",
"pages",
"mail",
"expense",
"people"
],
"example": "itsm",
"description": "The suite app that processes the step: identity (accounts, SSO), access (app access grants), itsm (laptop, badge, catalog items), hris (payroll, benefits, employment facts, signatures), lms (training), chat (channels, welcome posts), calendar (meetings), pages (guides, agendas, policies), mail (out of office, forwarding), expense, or people for a purely human to-do with no system behind it. When omitted it defaults from kind and title: automated steps go to identity, or access when the title mentions access, roles, apps, entitlements, groups or permissions; meeting to calendar; learning to lms; link and content to pages; form, esign and survey to hris; everything else to people."
},
"required": {
"type": "boolean",
"example": true
},
"form": {
"type": "object",
"nullable": true,
"description": "The mini-form a form step collects. submit-tasks validates values against these fields, stores the submission on the task and completes it.",
"properties": {
"fields": {
"type": "array",
"items": {
"type": "object",
"description": "One field of a form step. Give a key or a label (the other is derived).",
"properties": {
"key": {
"type": "string",
"example": "legal_name",
"description": "Stable key the submission's values are keyed by; derived from the label when omitted."
},
"label": {
"type": "string",
"example": "Legal name"
},
"type": {
"type": "string",
"enum": [
"text",
"textarea",
"select",
"date",
"number",
"email",
"checkbox"
],
"example": "text",
"description": "text, textarea, select (needs options), date (YYYY-MM-DD), number, email or checkbox. Defaults to text."
},
"required": {
"type": "boolean",
"example": true
},
"options": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"14-inch",
"16-inch"
],
"description": "The choices of a select field."
},
"placeholder": {
"type": "string",
"nullable": true,
"example": "As it appears on your ID"
}
}
}
},
"submit_label": {
"type": "string",
"nullable": true,
"example": "Save details",
"description": "Label for the submit control; the UI defaults it."
}
}
},
"link": {
"type": "object",
"nullable": true,
"description": "The page a link step opens (url required). Starting or completing the task records opened_at.",
"properties": {
"url": {
"type": "string",
"example": "https://intranet.example.com/first-day"
},
"label": {
"type": "string",
"example": "Open the first-day agenda",
"description": "Defaults to the step title."
}
}
}
}
}
FlagTaskRequest
{
"type": "object",
"required": [
"note"
],
"properties": {
"note": {
"type": "string",
"example": "The security course link was broken for two days",
"description": "What was bumpy, in a sentence."
}
}
}
SubmitTaskRequest
{
"type": "object",
"required": [
"values"
],
"properties": {
"values": {
"type": "object",
"additionalProperties": true,
"example": {
"legal_name": "Priya Sharma",
"emergency_contact_name": "Rohan Sharma"
},
"description": "The form's values keyed by field key (get-tasks shows the task's form.fields). Required fields must be present; select values must be one of the options; dates are YYYY-MM-DD."
},
"note": {
"type": "string",
"description": "Optional note recorded on the task and the activity feed."
}
}
}
TemplateInsights
{
"type": "object",
"description": "What a template's journeys have been teaching (the UI calls this Suggested changes). Computed from the journeys and tasks on every read; nothing is stored.",
"properties": {
"template_id": {
"type": "string",
"readOnly": true
},
"name": {
"type": "string",
"readOnly": true
},
"version": {
"type": "integer",
"readOnly": true
},
"as_of": {
"type": "string",
"format": "date",
"readOnly": true
},
"journeys_considered": {
"type": "integer",
"readOnly": true,
"description": "Journeys of this template, any version and status."
},
"journey_ids": {
"type": "array",
"readOnly": true,
"items": {
"type": "string"
}
},
"summary": {
"type": "object",
"readOnly": true,
"properties": {
"ad_hoc_tasks": {
"type": "integer"
},
"ad_hoc_groups": {
"type": "integer"
},
"flags": {
"type": "integer"
},
"skipped": {
"type": "integer"
},
"late": {
"type": "integer"
},
"reassigned": {
"type": "integer"
}
}
},
"ad_hoc": {
"type": "array",
"readOnly": true,
"description": "Ad hoc tasks grouped by normalized title, most common first. Each group carries promote: the add-steps body that would add it to the template.",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string",
"example": "set_up_vpn_access_for_remote_work"
},
"title": {
"type": "string"
},
"count": {
"type": "integer"
},
"kind": {
"type": "string",
"enum": [
"todo",
"form",
"esign",
"document",
"content",
"learning",
"survey",
"approval",
"automated",
"status_check",
"meeting",
"link"
]
},
"system": {
"type": "string",
"enum": [
"identity",
"access",
"itsm",
"hris",
"lms",
"chat",
"calendar",
"pages",
"mail",
"expense",
"people"
]
},
"assignee_role": {
"type": "string"
},
"added_by_roles": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"manager"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string"
}
},
"journeys": {
"type": "array",
"items": {
"type": "object",
"properties": {
"journey_id": {
"type": "string"
},
"subject_name": {
"type": "string"
},
"journey_status": {
"type": "string"
},
"task_id": {
"type": "string"
},
"task_status": {
"type": "string"
},
"added_by": {
"type": "string",
"nullable": true
},
"added_by_role": {
"type": "string",
"nullable": true
},
"reason": {
"type": "string",
"nullable": true
},
"due_date": {
"type": "string",
"format": "date",
"nullable": true
},
"assignee_email": {
"type": "string",
"nullable": true
}
}
}
},
"suggested_phase": {
"type": "object",
"nullable": true,
"properties": {
"key": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"suggested_role": {
"type": "string"
},
"suggested_due": {
"type": "object",
"description": "When the task is due. journey_anchor: offset_days from the anchor date (start date, last working day, ...). phase_unlock: offset_days after the phase opens. assignment: offset_days after the task becomes ready. Defaults to the day the phase opens.",
"properties": {
"anchor": {
"type": "string",
"enum": [
"journey_anchor",
"phase_unlock",
"assignment"
],
"example": "journey_anchor",
"description": "One of journey_anchor, phase_unlock, assignment."
},
"offset_days": {
"type": "integer",
"example": -7
}
}
},
"promoted_step_key": {
"type": "string",
"nullable": true,
"description": "The template step that already covers this group (promoted, or added by hand with the same title)."
},
"promote": {
"type": "object",
"description": "Pass this as the body of add-steps-templates to promote the group; the new step records promoted_from.",
"properties": {
"steps": {
"type": "array",
"items": {
"type": "object",
"description": "One step of a template; every journey started from the template gets one task per step.",
"required": [
"title"
],
"properties": {
"key": {
"type": "string",
"example": "sign_paperwork",
"description": "Stable key, unique in the template; derived from the title when omitted. Other steps reference it in depends_on."
},
"phase": {
"type": "string",
"example": "pre_start",
"description": "Key of the phase the step belongs to (defaults to the first phase)."
},
"title": {
"type": "string",
"example": "Sign offer letter, NDA and policy acknowledgements"
},
"description": {
"type": "string",
"example": "Three documents in one signing session."
},
"kind": {
"type": "string",
"enum": [
"todo",
"form",
"esign",
"document",
"content",
"learning",
"survey",
"approval",
"automated",
"status_check",
"meeting",
"link"
],
"example": "esign",
"description": "What kind of work it is: todo, form, esign, document, content, learning, survey, approval, automated, status_check, meeting, link (any other value is stored as todo with a warning). automated steps run by themselves when they unlock; status_check steps wait in processing until complete is called; form steps carry form and are finished with submit-tasks; link steps carry link; everything else is done by a person with complete-tasks."
},
"assignee_role": {
"type": "string",
"enum": [
"subject",
"manager",
"buddy",
"hr",
"it",
"facilities",
"payroll",
"security",
"system"
],
"example": "manager",
"description": "Who does the step. subject is the person the journey is for; manager and buddy are named when the journey starts; hr, it, facilities, payroll and security resolve to people on the identity roster; system is an automation."
},
"due": {
"type": "object",
"description": "When the task is due. journey_anchor: offset_days from the anchor date (start date, last working day, ...). phase_unlock: offset_days after the phase opens. assignment: offset_days after the task becomes ready. Defaults to the day the phase opens.",
"properties": {
"anchor": {
"type": "string",
"enum": [
"journey_anchor",
"phase_unlock",
"assignment"
],
"example": "journey_anchor",
"description": "One of journey_anchor, phase_unlock, assignment."
},
"offset_days": {
"type": "integer",
"example": -7
}
}
},
"depends_on": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"confirm_details"
],
"description": "Step keys that must be done or skipped before this one unlocks."
},
"required": {
"type": "boolean",
"example": true,
"description": "Optional steps can be skipped without a warning."
},
"payload": {
"type": "object",
"nullable": true,
"additionalProperties": true,
"description": "Kind-specific detail (a form name, document ids, a course list)."
},
"system": {
"type": "string",
"enum": [
"identity",
"access",
"itsm",
"hris",
"lms",
"chat",
"calendar",
"pages",
"mail",
"expense",
"people"
],
"example": "itsm",
"description": "The suite app that processes the step: identity (accounts, SSO), access (app access grants), itsm (laptop, badge, catalog items), hris (payroll, benefits, employment facts, signatures), lms (training), chat (channels, welcome posts), calendar (meetings), pages (guides, agendas, policies), mail (out of office, forwarding), expense, or people for a purely human to-do with no system behind it. When omitted it defaults from kind and title: automated steps go to identity, or access when the title mentions access, roles, apps, entitlements, groups or permissions; meeting to calendar; learning to lms; link and content to pages; form, esign and survey to hris; everything else to people."
},
"form": {
"type": "object",
"nullable": true,
"description": "The mini-form a form step collects. submit-tasks validates values against these fields, stores the submission on the task and completes it.",
"properties": {
"fields": {
"type": "array",
"items": {
"type": "object",
"description": "One field of a form step. Give a key or a label (the other is derived).",
"properties": {
"key": {
"type": "string",
"example": "legal_name",
"description": "Stable key the submission's values are keyed by; derived from the label when omitted."
},
"label": {
"type": "string",
"example": "Legal name"
},
"type": {
"type": "string",
"enum": [
"text",
"textarea",
"select",
"date",
"number",
"email",
"checkbox"
],
"example": "text",
"description": "text, textarea, select (needs options), date (YYYY-MM-DD), number, email or checkbox. Defaults to text."
},
"required": {
"type": "boolean",
"example": true
},
"options": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"14-inch",
"16-inch"
],
"description": "The choices of a select field."
},
"placeholder": {
"type": "string",
"nullable": true,
"example": "As it appears on your ID"
}
}
}
},
"submit_label": {
"type": "string",
"nullable": true,
"example": "Save details",
"description": "Label for the submit control; the UI defaults it."
}
}
},
"link": {
"type": "object",
"nullable": true,
"description": "The page a link step opens (url required). Starting or completing the task records opened_at.",
"properties": {
"url": {
"type": "string",
"example": "https://intranet.example.com/first-day"
},
"label": {
"type": "string",
"example": "Open the first-day agenda",
"description": "Defaults to the step title."
}
}
},
"promoted_from": {
"type": "string",
"nullable": true,
"example": "set_up_vpn_access",
"description": "The ad hoc group (normalized title, from get-insights-templates) this step was promoted from. Set it when adding the step so the step library and insights show the step as promoted."
}
}
}
}
}
}
}
}
},
"skipped": {
"type": "array",
"readOnly": true,
"description": "Template steps people skipped, with the notes; cancelled journeys are left out.",
"items": {
"type": "object",
"properties": {
"step_key": {
"type": "string"
},
"title": {
"type": "string"
},
"assignee_role": {
"type": "string"
},
"count": {
"type": "integer"
},
"journeys": {
"type": "array",
"items": {
"type": "object",
"properties": {
"journey_id": {
"type": "string"
},
"subject_name": {
"type": "string"
},
"journey_status": {
"type": "string"
},
"task_id": {
"type": "string"
},
"task_status": {
"type": "string"
},
"note": {
"type": "string",
"nullable": true
},
"skipped_by": {
"type": "string",
"nullable": true
}
}
}
}
}
}
},
"late": {
"type": "array",
"readOnly": true,
"description": "Steps finished after their due date or open past it, with the median and worst lateness in days.",
"items": {
"type": "object",
"properties": {
"step_key": {
"type": "string"
},
"title": {
"type": "string"
},
"assignee_role": {
"type": "string"
},
"system": {
"type": "string",
"enum": [
"identity",
"access",
"itsm",
"hris",
"lms",
"chat",
"calendar",
"pages",
"mail",
"expense",
"people"
]
},
"origin": {
"type": "string",
"enum": [
"template",
"ad_hoc"
]
},
"count": {
"type": "integer"
},
"median_days_late": {
"type": "number"
},
"max_days_late": {
"type": "integer"
},
"journeys": {
"type": "array",
"items": {
"type": "object",
"properties": {
"journey_id": {
"type": "string"
},
"subject_name": {
"type": "string"
},
"journey_status": {
"type": "string"
},
"task_id": {
"type": "string"
},
"task_status": {
"type": "string"
},
"days_late": {
"type": "integer"
},
"due_date": {
"type": "string",
"format": "date",
"nullable": true
},
"assignee_email": {
"type": "string",
"nullable": true
}
}
}
}
}
}
},
"reassigned": {
"type": "array",
"readOnly": true,
"description": "Steps that changed hands, from whom to whom.",
"items": {
"type": "object",
"properties": {
"step_key": {
"type": "string"
},
"title": {
"type": "string"
},
"assignee_role": {
"type": "string"
},
"count": {
"type": "integer"
},
"journeys": {
"type": "array",
"items": {
"type": "object",
"properties": {
"journey_id": {
"type": "string"
},
"subject_name": {
"type": "string"
},
"journey_status": {
"type": "string"
},
"task_id": {
"type": "string"
},
"task_status": {
"type": "string"
},
"from": {
"type": "string",
"nullable": true
},
"to": {
"type": "string",
"nullable": true
}
}
}
}
}
}
},
"flags": {
"type": "array",
"readOnly": true,
"description": "Every flagged task with its note, newest first.",
"items": {
"type": "object",
"properties": {
"task_id": {
"type": "string"
},
"journey_id": {
"type": "string"
},
"subject_name": {
"type": "string"
},
"step_key": {
"type": "string"
},
"title": {
"type": "string"
},
"origin": {
"type": "string",
"enum": [
"template",
"ad_hoc"
]
},
"assignee_role": {
"type": "string"
},
"note": {
"type": "string",
"nullable": true
},
"flagged_by": {
"type": "string",
"nullable": true
},
"flagged_by_role": {
"type": "string",
"nullable": true
},
"flagged_at": {
"type": "string",
"format": "date-time",
"nullable": true
},
"task_status": {
"type": "string"
}
}
}
}
}
}
MyJourney
{
"type": "object",
"description": "One journey as the current user sees it: their own tasks in due order, what each locked one waits for, the next thing to do, and the people on the journey.",
"properties": {
"journey_id": {
"type": "string",
"readOnly": true
},
"template_name": {
"type": "string",
"readOnly": true
},
"journey_type": {
"type": "string",
"readOnly": true,
"enum": [
"onboarding",
"offboarding",
"job_change",
"leave",
"return_to_work",
"relocation",
"custom"
]
},
"status": {
"type": "string",
"readOnly": true,
"enum": [
"draft",
"active",
"completed",
"cancelled"
]
},
"anchor": {
"type": "string",
"readOnly": true,
"enum": [
"start_date",
"last_working_day",
"leave_start_date",
"return_date",
"effective_date"
]
},
"anchor_date": {
"type": "string",
"format": "date",
"readOnly": true
},
"subject_email": {
"type": "string",
"format": "email",
"readOnly": true
},
"subject_name": {
"type": "string",
"readOnly": true
},
"me": {
"type": "string",
"format": "email",
"readOnly": true
},
"my_role": {
"type": "string",
"readOnly": true,
"example": "subject",
"description": "The current user's role on this journey (subject, manager, buddy, hr, it, ...; participant when they only hold tasks)."
},
"people": {
"type": "object",
"readOnly": true,
"properties": {
"subject": {
"type": "object",
"nullable": true,
"properties": {
"email": {
"type": "string",
"format": "email"
},
"name": {
"type": "string"
}
}
},
"manager": {
"type": "object",
"nullable": true,
"properties": {
"email": {
"type": "string",
"format": "email"
},
"name": {
"type": "string"
}
}
},
"buddy": {
"type": "object",
"nullable": true,
"properties": {
"email": {
"type": "string",
"format": "email"
},
"name": {
"type": "string"
}
}
}
}
},
"next_up": {
"readOnly": true,
"nullable": true,
"description": "The soonest open task the user can act on (or, when everything is locked, the soonest locked one); a task row as in tasks.",
"allOf": [
{
"$ref": "#/components/schemas/JourneyTask"
}
]
},
"tasks": {
"type": "array",
"readOnly": true,
"description": "The user's tasks on this journey, soonest due first, each a JourneyTask plus waiting_for and unlocks_on.",
"items": {
"allOf": [
{
"$ref": "#/components/schemas/JourneyTask"
},
{
"type": "object",
"properties": {
"waiting_for": {
"type": "array",
"description": "The unmet prerequisites of a locked task: their titles and who holds them.",
"items": {
"type": "object",
"properties": {
"task_id": {
"type": "string"
},
"title": {
"type": "string"
},
"assignee_email": {
"type": "string",
"format": "email",
"nullable": true
},
"assignee_name": {
"type": "string",
"nullable": true
},
"assignee_role": {
"type": "string"
},
"due_date": {
"type": "string",
"format": "date",
"nullable": true
}
}
}
},
"unlocks_on": {
"type": "string",
"format": "date",
"nullable": true,
"description": "For a task locked on a date, the day its phase opens."
}
}
}
]
}
},
"counts": {
"type": "object",
"readOnly": true,
"properties": {
"total": {
"type": "integer"
},
"done": {
"type": "integer"
},
"open": {
"type": "integer"
},
"overdue": {
"type": "integer"
},
"flagged": {
"type": "integer"
}
}
},
"progress_percent": {
"type": "integer",
"readOnly": true,
"description": "The whole journey's progress, not just the user's tasks."
}
}
}