Sessions
Session management: list and inspect running and completed workflow sessions, share a session link by email or SMS, and cancel or delete sessions.
Quick Navigation
What is a session?
A session is a single running instance of a workflow. When you start a workflow, Streamline creates a session that progresses through the workflow's steps, collects data, and tracks who is responsible for each step. Sessions are how you turn a saved workflow definition into live work.
You can list sessions for your organization, inspect a single session's current state, share a link to a session with the people who need to act on it, and stop or remove sessions you no longer need. The endpoints below cover these operations; base URL and authentication match the rest of the Streamline API.
Core Concepts
Session resource
Responses from the list and get-session endpoints share the same session shape. The table below describes the fields you will see.
| name | type | required | constraints | description |
|---|---|---|---|---|
id | string (UUID) | yes | — | Identifier of the session. |
workflowId | string (UUID) | yes | — | Identifier of the workflow this session runs. |
projectId | string (UUID) | yes | — | Project the session belongs to. |
status | string | yes | enum | Current session status. See Session statuses. |
completedAt | string (date-time) | no | nullable | When the session reached a terminal status. null while the session is still running. |
createdAt | string (date-time) | yes | — | When the session started. |
versionName | string | no | — | Name of the workflow version the session is running. |
sessionName | string | yes | nullable | Configured session name for this session, or null when none has been set. |
sessionIdentifierConfigured | boolean | no | — | true when a configured session identifier exists in storage, regardless of whether sessionName is masked on the wire. |
currentStep | object | no | nullable | Nested current step with assignees. See Current step and assignees. |
Session statuses
A session's status field uses one of the following values:
ASSIGNED— The session has been started and is waiting for action on the current step.RUNNING— The session is actively progressing through its steps.COMPLETED— The session finished successfully.CANCELLED— The session was cancelled before completing.EXPIRED— The session expired before completing.FAILED— The session ended in a failure state.TERMINATED— The session was terminated.
When filtering by status, send the value exactly as shown above (for example statuses=COMPLETED,RUNNING).
Pagination
The list endpoint uses page-based pagination. You must set pagination=page and then use pageNumber (1-indexed) and pageSize to control the page you receive. The response includes a page object with the actual counts so you can iterate.
| name | type | required | constraints | description |
|---|---|---|---|---|
pagination | string | yes | must be page | Pagination mode. |
pageNumber | integer | no | min 1, default 1 | Page number to return. |
pageSize | integer | no | min 1, max 100, default 25 | Number of items per page. |
The page object in the response contains:
| name | type | description |
|---|---|---|
size | integer | Actual number of elements in the current page (may be smaller than pageSize on the last page). |
pageNumber | integer | Current page number (1-indexed). |
pageSize | integer | Requested page size. |
totalElements | integer | Total number of matching elements across all pages. |
totalPages | integer | Total number of pages. |
Session identifiers and masking
A workflow may be configured to give each session a human-readable name (for example "Onboarding — Jane Doe"). When that configuration exists, sessionIdentifierConfigured is true and sessionName carries the resolved name.
By default, session names are masked in list responses to protect personally identifiable information. To receive unmasked names, pass revealSessionIdentifiers=true. Revealing identifiers requires the admin permission or to be configured on the project level; the response includes canViewSessionIdentifiers: true when the authenticated user is allowed to see unmasked values for the scoped project.
Set
revealSessionIdentifiers=trueonly when you actually need unmasked names, for example to render a project's sessions table with the "Show data" toggle on. Masked lists are the default for a reason — keep names private unless the viewer is authorized.
Current step and assignees
When a session is in progress, currentStep describes the step the session is currently on and the people responsible for acting on it.
| name | type | description |
|---|---|---|
id | string (UUID) | Current step id. |
name | string | Step name. |
type | string | Step type (for example forms, sign, collaboration). |
resourceId | string | Source-owned resource id this assignment acts on, when present. |
startedAt | string (date-time) | When the session entered this step. |
assignees | array of object | Assignments for this step. See the assignee table below. |
Each entry in assignees describes one person or group responsible for the step:
| name | type | description |
|---|---|---|
id | string | Slot id for this assignee row. |
taskId | string (UUID) | Task id when the row is task-backed. |
type | string | Assignee type: EXTERNAL, INTERNAL, GROUP, or INHERIT. |
role | string | Step role when present (for example SIGNER, OWNER). null on forms. |
status | string | Normalized assignee status (see the assignee statuses list below). |
isCompleter | boolean | true for the participant whose action completed the assignment. |
isInPerson | boolean | true for in-person or inherit signers. |
order | integer | Signing order, when relevant. |
authMethod | string | Authentication method: NONE, EMAIL_OTP, PHONE_OTP, STREAMLINE_AUTH, or SSO. |
name | string | Display name of the assignee. |
email | string | Email contact. |
phoneNumber | string | Phone contact. |
userId | string (UUID) | Internal Streamline user id, for internal assignees. |
groupId | string (UUID) | Group id, for GROUP assignees. |
assignedAt | string (date-time) | When the assignee was assigned. |
dueDate | string (date-time) | When the assignee is due. |
completedAt | string (date-time) | When the assignee completed. |
claimedAt | string (date-time) | When the assignee claimed the task. |
claimedBy | object | Display enrichment for the claimer (userId, name, email). |
declinedAt | string (date-time) | When the assignee declined. |
allowClaiming | boolean | Whether the assignment may be claimed. |
allowReassignment | boolean | Whether the assignment may be reassigned. |
destinationUrl | string | URL that can be used to open task. |
participantDefinitionId | string | Builder participant definition id for scoped links. |
recipientPublicId | string | Public id used in scoped OTP links when recipient pills are used. |
Assignee status uses one of: PENDING, ASSIGNED, WAITING, CLAIMED, IN_PROGRESS, COMPLETED, DECLINED, EXPIRED, CANCELLED, FAILED, REASSIGNED, NOT_COMPLETED.
How-To Guides
Let's explore common scenarios for managing sessions.
List sessions
Use get sessions to retrieve a paginated list of sessions for your organization.
GET /v1/sessions
| name | type | required | constraints | description |
|---|---|---|---|---|
pagination | string (query) | yes | must be page | Pagination mode. Must be page. |
pageNumber | integer (query) | no | min 1, default 1 | Page number to return. See Pagination. |
pageSize | integer (query) | no | min 1, max 100, default 25 | Number of items to return per page. |
sortFields | string (query) | no | comma-separated; allowed values: createdAt | Comma-separated fields to sort by. |
sortDirection | string (query) | no | enum: asc, desc; default desc | Sort direction. |
projectId | string (query) | no | UUID | Filter sessions by project. If omitted, returns sessions across all projects the user can access (admins see the whole org). |
statuses | string (query) | no | comma-separated enum | Comma-separated session statuses to filter by. See Session statuses. |
stepTypes | string (query) | no | comma-separated enum | Comma-separated step types to filter by (for example forms,sign,collaboration). |
search | string (query) | no | — | Unified free-text search across session id, configured session name, status, current step name, current step status, failures. |
withCurrentStep | string (query) | no | default true | Include current step information (stepId, stepName, stepType, stepStatus, stepStartedAt). |
withFailures | string (query) | no | default true | Include failures array in the response. |
workflowId | string (query) | no | UUID | Filter sessions by workflow. |
createdAt | string (query) | no | ISO 8601; optional operator prefix (eq:, neq:, gt:, lt:, gte:, lte:) | The created at date to filter by. |
metadata | string (query) | no | stringified JSON object | The metadata object as a stringified JSON to filter by (for example {"system": "salesforce", "externalId": "ext-123"}). |
dateFrom | string (query) | no | ISO datetime, date-only, or interval (e.g. -30d) | Start date for filtering. Intervals and date-only strings are resolved to a full ISO datetime. Unparseable values are ignored. |
dateTo | string (query) | no | ISO datetime | End date for filtering. Defaults to now when not provided. |
revealSessionIdentifiers | string (query) | no | default false | When true, return unmasked session identifier values for sessions in the scoped project. Requires can_view_session_identifier. |
{
"content": [
{
"id": "f1b2c3d4-e5f6-7890-1234-567890abcdef",
"workflowId": "w1b2c3d4-e5f6-7890-1234-567890abcdef",
"projectId": "p1b2c3d4-e5f6-7890-1234-567890abcdef",
"status": "RUNNING",
"completedAt": null,
"createdAt": "2026-08-01T09:30:00.000Z",
"versionName": "Employee Onboarding v2",
"sessionName": "Onboarding — Jane Doe",
"sessionIdentifierConfigured": true,
"currentStep": {
"id": "s1b2c3d4-e5f6-7890-1234-567890abcdef",
"name": "Form",
"type": "forms",
"resourceId": null,
"startedAt": "2026-08-01T09:30:00.000Z",
"assignees": [
{
"id": "a1b2c3d4-e5f6-7890-1234-567890abcdef",
"taskId": "t1b2c3d4-e5f6-7890-1234-567890abcdef",
"type": "EXTERNAL",
"role": null,
"status": "ASSIGNED",
"isCompleter": false,
"isInPerson": false,
"name": "Jane Doe",
"email": "[email protected]",
"phoneNumber": null,
"userId": null,
"groupId": null,
"assignedAt": "2026-08-01T09:30:00.000Z",
"allowClaiming": false,
"allowReassignment": true,
"destinationUrl": "https://us.streamline.intellistack.ai/tasks/assignee/t1b2c3d4-e5f6-7890-1234-567890abcdef"
}
]
}
}
],
"page": {
"size": 1,
"pageNumber": 1,
"pageSize": 20,
"totalElements": 1,
"totalPages": 1
},
"canViewSessionIdentifiers": true
}One things to note:
- When
revealSessionIdentifiersis omitted orfalse, session names are masked.canViewSessionIdentifiersis included only when the user is authorized to reveal identifiers for the scoped project.
Get a session by ID
Use get session to retrieve a single session by its id.
GET /v1/sessions/{sessionId}
| name | type | required | constraints | description |
|---|---|---|---|---|
sessionId | string | yes | UUID | Session to retrieve. |
The response has the same shape as a single item from the list response. See Session resource for the field reference and Current step and assignees for the nested currentStep shape.
Share a session
Use share session to send a session link to one or more recipients by email or SMS.
POST /v1/sessions/{sessionId}/share
| name | type | required | constraints | description |
|---|---|---|---|---|
sessionId | string (path) | yes | UUID | Session to share. |
stepExecutionId | string (query) | no | UUID | Share a specific step execution, when set. |
The request body contains a data object discriminated by type:
| name | type | required | constraints | description |
|---|---|---|---|---|
data | object | yes | — | The share payload. Shape depends on type (email or sms), described below. |
data.type | string | yes | enum | Channel: email or sms. |
When data.type is email:
| name | type | required | description |
|---|---|---|---|
data.emails | string[] | yes | Recipient email addresses. |
data.subject | string | no | Email subject. |
data.message | string | no | Email body message. |
data.replyTo | string | no | Reply-to email address. |
data.fromName | string | no | Sender display name. |
data.buttonText | string | no | Text to display on the action button. |
When data.type is sms:
| name | type | required | description |
|---|---|---|---|
data.phoneNumbers | string[] | yes | Recipient phone numbers. |
data.message | string | no | SMS body message. |
A successful share returns 204 No Content.
{
"data": {
"type": "email",
"emails": ["[email protected]", "[email protected]"],
"subject": "Your review is needed",
"message": "Please complete the onboarding steps when you have a moment.",
"buttonText": "Open session"
}
}For SMS, send data.type sms with a phoneNumbers array (and an optional message) instead.
Cancel a running session
Use cancel session to stop a session that is still running.
POST /v1/sessions/{sessionId}/cancel
| name | type | required | constraints | description |
|---|---|---|---|---|
sessionId | string | yes | UUID | Session to cancel. |
A successful cancel returns 204 No Content.
Only sessions that are still running can be cancelled. Cancelling a session that has already reached a terminal status (
COMPLETED,EXPIRED,FAILED,TERMINATED) has no effect.
Delete a session
Use delete session to remove a session from your lists.
POST /v1/sessions/{sessionId}/delete
| name | type | required | constraints | description |
|---|---|---|---|---|
sessionId | string | yes | UUID | Session to delete. |
A successful delete returns 204 No Content.
Updated about 5 hours ago
