Get a workflow execution
Retrieve a single execution — the dry-run verdict a manual trigger's caller polls for. 404 if the execution does not exist, or exists but belongs to a different workflow or organization.
Path Parameters
- workflow_id string required
Workflow identifier
- execution_id string required
Execution identifier
Header Parameters
- SlashID-OrgID string required
The organization ID
Example: af5fbd30-7ce7-4548-8b30-4cd59cb2aba1
- 200
- 404
Workflow execution details
- application/json
- Schema
- Example (from schema)
Schema
meta object
pagination object
limit integeroffset integertotal_count int64cursor_pagination object
Cursors are opaque. Follow the tokens the server returns; never construct, parse or modify one.
limit integernext_cursor stringOpaque token addressing the next page. Absent on the last page.
prev_cursor stringOpaque token addressing the previous page. Absent on the first page.
last_cursor stringOpaque token addressing the final page directly, so a client can jump to the end without a total count.
total_count int64Total number of matching items. Returned on the FIRST page only; clients cache it for the remainder of the walk.
errors object[]
httpcode integermessage stringcode stringMachine-readable reason, present only for errors that define one. Values today:
unserved_org_region(the organization is homed in a region this deployment does not serve),wrong_region(the request must be sent to the organization's home region),region_route_missing(this instance has no route to the organization's home region).result object
id uuidUnique execution ID
workflow_id uuidID of the workflow being executed
org_id uuidOrganization ID
configuration_id uuidID of the configuration version used for this execution
status stringPossible values: [
running,completed,failed]Overall status of a workflow execution
started_at date-timeWhen the execution started
completed_at date-timeWhen the execution completed
error stringError message if execution failed
mode stringPossible values: [
live,dry_run]Controls whether an execution publishes outbound provider events. dry_run resolves and records every step identically to a live run but suppresses outbound publication at the publish boundary. Empty (on an existing execution) means live.
planned_actions object[]
The dry-run verdict: what each resolved step would have done. Resolved entries are populated only for dry_run executions; unresolved entries (steps that could not be dispatched) are recorded for live executions too, so a skipped step is visible rather than indistinguishable from success.
action_id stringThe workflow action node ID, e.g. "access-policy", "before-0".
action_type stringThe node's action type, e.g. "remediation", "notification", "access_policy".
resolved_payload_type stringGo type name identifying what would have been published, e.g. "*ip_events.ActionRequestedV1_AwsCreateUserAndRole". Empty when resolved is false.
target_provider stringPopulated only for message types that carry a target provider (remediation and access_policy grant/revoke); empty otherwise.
target_identifier stringPopulated only for message types that carry a target identifier (remediation and access_policy grant/revoke); empty otherwise.
resolved booleanerror stringResolution failure reason when resolved is false. Covers both Accept-level failures (e.g. a remediation recipe missing a required parameter, dry run only) and access_policy grant/revoke targets with no matching recipe — the latter are skipped rather than dispatched and recorded here in live executions as well.
bindings object[]
Which of this step's values were references (
from_step/from_trigger) that this DRY RUN could only stand in for: no executor ran, so no earlier step produced a real output, and each one resolved to a visible placeholder (<create-aws.role_arn>) instead. Absent on a live entry, and on a dry-run entry whose references all resolved to real values — a dry run retried against an execution whose earlier steps did run reads their persisted outputs.param stringThe binding site: the parameter's own name,
granting_idfor agranting_id_ref, orsubjectfor the identity the step acts on (which fills no parameter).from_step stringThe id of the earlier step whose output fills this value.
output stringThe name of that step's declared output.
from_trigger stringA key of the triggering identity's vocabulary —
identifier,display_name,email,source_identifier, orattributes.<key>— set instead of from_step/output.data_input_execution object
status stringPossible values: [
pending,running,succeeded,failed,skipped]Overall status of an action node's execution
started_at date-timeWhen data input retrieval started
completed_at date-timeWhen data input retrieval completed
error stringError message if data input failed
input_count integerTotal number of data items retrieved
filtered_count integerNumber of data items that passed the filter
action_executions object
Map of action ID to execution state
property name*objecttrigger object
kind stringPossible values: [
lifecycle_event,manual,retry]What started this execution.
lifecycle_eventcarriesevent_typeand (when the event's subject resolved to a graph entity)subject;manualandretrycarry neither. Dry-run is orthogonal — see the execution'smode.event_type stringPossible values: [
created,deleted,suspended,modified,reactivated,role_changed,group_added,group_removed,risk_score_changed,inactive_threshold]Type of user lifecycle event that triggers the workflow. Phase 1 (Core): created, deleted, suspended Phase 2 (Extended): modified, reactivated, role_changed, group_added, group_removed, risk_score_changed, inactive_threshold
subject object
The identity the triggering lifecycle event was about, snapshotted at execution creation so the run stays attributable after the entity changes or is deleted.
entity_id stringGraph entity ID of the identity
display_name stringemail stringsource_type stringIdentity node type in the graph, e.g. okta_user, entra_user
workflow_name stringWorkflow name snapshotted at execution time, so org-scoped execution feeds render without a per-row workflow lookup.
lifecycle stringPossible values: [
joiner,mover,leaver,risk_signal]Which lifecycle a JML workflow models.
risk_signalfires onrisk_score_changed/inactive_thresholdevents; it computes no access diff, sogrant/revokesteps are rejected and only the before/after phases run.retry_of uuidWhen this execution was created by the retry endpoint, the ID of the ORIGINAL failed execution its retry chain re-runs. Retrying a retry keeps pointing at that root rather than at the retry, so every attempt of one run shares the same
retry_ofand only one of them can be in flight at a time.input_count integerDEPRECATED - Use data_input_execution.input_count instead
filtered_count integerDEPRECATED - Use data_input_execution.filtered_count instead
actions_count integerDEPRECATED - Use action_executions map instead
actions_run object[]
DEPRECATED - Use action_executions map instead
action_id stringID of the executed action
action_type stringPossible values: [
remediation,ticket,data_sink,webhook,notification,condition,access_review]Type of workflow action
started_at date-timecompleted_at date-timesuccess booleanerror stringremediation_result object
ticket_result object
data_sink_result object
{
"meta": {
"pagination": {
"limit": 0,
"offset": 0,
"total_count": 0
},
"cursor_pagination": {
"limit": 0,
"next_cursor": "string",
"prev_cursor": "string",
"last_cursor": "string",
"total_count": 0
}
},
"errors": [
{
"httpcode": 0,
"message": "string",
"code": "string"
}
],
"result": {
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"workflow_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"org_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"configuration_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"status": "running",
"started_at": "2005-12-24T18:29:30.033157Z",
"completed_at": "2005-12-24T18:29:30.033157Z",
"error": "string",
"mode": "live",
"planned_actions": [
{
"action_id": "string",
"action_type": "string",
"resolved_payload_type": "string",
"target_provider": "string",
"target_identifier": "string",
"resolved": true,
"error": "string",
"bindings": [
{
"param": "string",
"from_step": "string",
"output": "string",
"from_trigger": "string"
}
]
}
],
"data_input_execution": {
"status": "pending",
"started_at": "2005-12-24T18:29:30.033157Z",
"completed_at": "2005-12-24T18:29:30.033157Z",
"error": "string",
"input_count": 0,
"filtered_count": 0
},
"action_executions": {},
"trigger": {
"kind": "lifecycle_event",
"event_type": "created",
"subject": {
"entity_id": "string",
"display_name": "string",
"email": "string",
"source_type": "string"
}
},
"workflow_name": "string",
"lifecycle": "joiner",
"retry_of": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}
}
Not Found
- application/json
- Schema
- Example (from schema)
Schema
meta object
pagination object
limit integeroffset integertotal_count int64cursor_pagination object
Cursors are opaque. Follow the tokens the server returns; never construct, parse or modify one.
limit integernext_cursor stringOpaque token addressing the next page. Absent on the last page.
prev_cursor stringOpaque token addressing the previous page. Absent on the first page.
last_cursor stringOpaque token addressing the final page directly, so a client can jump to the end without a total count.
total_count int64Total number of matching items. Returned on the FIRST page only; clients cache it for the remainder of the walk.
errors object[]
httpcode integermessage stringcode stringMachine-readable reason, present only for errors that define one. Values today:
unserved_org_region(the organization is homed in a region this deployment does not serve),wrong_region(the request must be sent to the organization's home region),region_route_missing(this instance has no route to the organization's home region).
{
"meta": {
"pagination": {
"limit": 0,
"offset": 0,
"total_count": 0
},
"cursor_pagination": {
"limit": 0,
"next_cursor": "string",
"prev_cursor": "string",
"last_cursor": "string",
"total_count": 0
}
},
"errors": [
{
"httpcode": 0,
"message": "string",
"code": "string"
}
]
}