Get workflow details
Retrieve details of a specific workflow. When include_configuration=true, the response also includes the latest workflow configuration (data_input_config, actions, version, etc.).
Path Parameters
- workflow_id string required
Workflow identifier
Query Parameters
- include_configuration boolean
Include latest workflow configuration in response
Header Parameters
- SlashID-OrgID string required
The organization ID
Example: af5fbd30-7ce7-4548-8b30-4cd59cb2aba1
- 200
- 404
Workflow 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
oneOf- MOD1
- MOD2
kind stringPossible values: [
workflow,workflow_with_configuration]Discriminator for the GET /workflows/{id} response variant.
workflowis returned wheninclude_configuration=false;workflow_with_configurationwhen the latest version is bundled into the response. The enum lists both values intentionally so the schema compositionWorkflowWithConfiguration = allOf [Workflow, WorkflowConfiguration]doesn't produce an unsatisfiable enum constraint; the discriminator on the endpoint'soneOfdoes the runtime dispatch. Required so the typescript-fetch generator emits switch-based dispatch (needed since openapi-generator-cli v7 — see PR #5928) instead of order-sensitiveinstanceOfchecks that silently drop the configuration fields when both schemas overlap.id stringUnique workflow identifier
org_id stringOrganization ID
name stringPossible values:
non-emptyand<= 255 charactersWorkflow name
description stringPossible values:
<= 1000 charactersWorkflow description
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.status stringPossible values: [
draft,active,paused,deleted]Current state of a workflow
created_by stringUser ID who created the workflow
created_at date-timeWorkflow creation timestamp
updated_by stringUser ID who last updated the workflow
updated_at date-timeLast update timestamp
activated_at date-timeWhen workflow was first activated
paused_at date-timeWhen workflow was paused
paused_by stringUser ID who paused the workflow. Set when the workflow is paused, cleared on resume.
last_executed_at date-timeLast execution timestamp
execution_count integerTotal execution count
success_count integerSuccessful execution count
failure_count integerFailed execution count
latest_configuration_id stringID of the latest configuration version
latest_configuration_version integerLatest configuration version number
kind stringPossible values: [
workflow,workflow_with_configuration]Discriminator for the GET /workflows/{id} response variant.
workflowis returned wheninclude_configuration=false;workflow_with_configurationwhen the latest version is bundled into the response. The enum lists both values intentionally so the schema compositionWorkflowWithConfiguration = allOf [Workflow, WorkflowConfiguration]doesn't produce an unsatisfiable enum constraint; the discriminator on the endpoint'soneOfdoes the runtime dispatch. Required so the typescript-fetch generator emits switch-based dispatch (needed since openapi-generator-cli v7 — see PR #5928) instead of order-sensitiveinstanceOfchecks that silently drop the configuration fields when both schemas overlap.id stringUnique workflow identifier
org_id stringOrganization ID
name stringPossible values:
non-emptyand<= 255 charactersWorkflow name
description stringPossible values:
<= 1000 charactersWorkflow description
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.status stringPossible values: [
draft,active,paused,deleted]Current state of a workflow
created_by stringUser ID who created the workflow
created_at date-timeWorkflow creation timestamp
updated_by stringUser ID who last updated the workflow
updated_at date-timeLast update timestamp
activated_at date-timeWhen workflow was first activated
paused_at date-timeWhen workflow was paused
paused_by stringUser ID who paused the workflow. Set when the workflow is paused, cleared on resume.
last_executed_at date-timeLast execution timestamp
execution_count integerTotal execution count
success_count integerSuccessful execution count
failure_count integerFailed execution count
latest_configuration_id stringID of the latest configuration version
latest_configuration_version integerLatest configuration version number
workflow_id stringParent workflow ID
version integerPossible values:
>= 1Configuration version number
data_input_config object
oneOf- MOD1
- MOD2
- MOD3
- MOD4
type stringPossible values: [
detection]Data input type discriminator
scim_filter stringPossible values:
non-emptySCIM filter string to apply when querying detections. Examples:
severity eq "critical"type eq "aws_identity_unused" and status eq "detected"entity_type eq "aws_iam_user"severity eq "critical" or severity eq "high"
include_suppressed booleanDefault value:
falseBy default the input only returns active detections that no detection rule suppressed: the filter is narrowed with
not (suppressed_by_rule_id pr)and, when it does not mentionstatus, to the active statuses. Set to true to passscim_filterthrough untouched.limit integerPossible values:
<= 10000Maximum number of detections to retrieve (0 for no limit)
sorting object[]
Sorting configuration for results
field stringField to sort by
direction stringPossible values: [
asc,desc]Default value:
descSort direction
type stringPossible values: [
lifecycle]Data input type discriminator
event_types string[]Possible values: [
created,deleted,suspended,modified,reactivated,role_changed,group_added,group_removed,risk_score_changed,inactive_threshold],>= 1Lifecycle events that trigger this workflow
entity_types string[]Filter by entity types (e.g., aws_iam_user, entra_user). If empty, all entity types are matched.
source_types string[]Filter by identity source types (e.g., aws_account, entra). If empty, all source types are matched.
connection_ids string[]Filter by specific connection IDs. If empty, all connections are matched.
min_risk_score integerPossible values:
<= 100Only trigger for entities with risk score >= this value
max_risk_score integerPossible values:
<= 100Only trigger for entities with risk score <= this value
include_relationships booleanDefault value:
falseFetch manager, groups, direct reports from Neo4j
include_permissions booleanDefault value:
falseFetch permission assignments from Neo4j
include_access_history booleanDefault value:
falseFetch recent access records from Neo4j
relationship_depth integerPossible values:
<= 3Default value:
1How deep to traverse relationships in Neo4j (default 1, max 3)
scim_filter stringAdditional SCIM-style filter criteria for the entity
attribute_filters object[]
Conditions on the triggering identity's raw source attributes, evaluated against
data.attributes.*. Populated by JML compilation fromJMLSource.trigger.filters— deliberately NOT compiled into scim_filter above, whose grammar cannot express a data.attributes.<key> path. Can also be set directly on a raw (non-JML) lifecycle data input.attr stringAttribute key to compare, e.g. "employee_type". The reserved key "group" matches on the identity's group memberships (the graph's IS_MEMBER_OF edge) instead of a raw attribute: the value is a group name, and eq also accepts the group's entity_id. A filter holds when any group satisfies it; ne holds when none equals it.
op stringPossible values: [
eq,ne,co,sw,ew,pr]Comparison operator (equals, not-equals, contains, starts-with, ends-with, present).
valuetype stringPossible values: [
uar_finding]Data input type discriminator
triggers string[]UarFindingV1 trigger reasons that fire this workflow (ANY match). Defaults to
["manual"]when empty.campaign_ids uuid[]Filter by specific campaign IDs. Empty matches all.
campaign_template_ids uuid[]Filter by campaign template IDs. Empty matches all.
campaign_types string[]Filter by campaign type (e.g.
user,resource,non_human_identity). Empty matches all.classification_tags string[]Filter by classification tags on the finding. Empty matches all.
outcomes string[]Filter by reviewer decision outcome (e.g.
approve,revoke). Empty matches all.only_effective booleanDefault value:
falseMatch only when
effective_outcome == outcome— the decision survived multi-tier escalation rather than being overridden.min_level integerFilter by decision level >= this value.
only_high_privilege booleanDefault value:
falseRestrict to findings flagged as high-privilege.
user_source_types string[]Filter by user identity source type. Empty matches all.
user_entity_types string[]Filter by user entity type. Empty matches all.
asset_source_types string[]Filter by asset source type. Empty matches all.
asset_entity_types string[]Filter by asset entity type. Empty matches all.
granting_entity_types string[]Filter by granting entity type (e.g. role, group). Empty matches all.
scim_filter stringOptional SCIM-style filter over the flattened finding payload, applied after the structured filters above.
type stringPossible values: [
cypher_query]Data input type discriminator
query stringPossible values:
non-emptyand<= 10000 charactersRead-only Cypher query whose rows feed downstream workflow actions. Must contain MATCH and RETURN clauses. Write operations and the USE clause are rejected by the validator. Comments and strings are tokenized before validation, so a write keyword inside a string literal is allowed.
parameters object
Parameters bound into the query at execution time. Keys must match the
$nameplaceholders inquery. Values are passed verbatim to the Neo4j driver.max_rows integerPossible values:
>= 1and<= 10000Default value:
1000Maximum rows returned by a scheduled execution (NOT the preview). Capped server-side at 10000.
timeout_seconds integerPossible values:
>= 1and<= 300Default value:
30Per-execution query timeout (NOT the preview). Capped server-side at 300.
on_limit_exceeded stringPossible values: [
fail,truncate]Default value:
failBehavior when the query returns more than
max_rows.failaborts the execution with an error;truncatereturns the firstmax_rowsrows and marks the execution as truncated.primary_entity_column stringOptional. Name of a query result column whose value is the primary entity ID for each row. When set, downstream remediation actions can target this entity. Must match one of the column aliases in the query's RETURN clause.
name stringPossible values:
<= 128 characters, Value must match regular expression^[A-Za-z0-9][A-Za-z0-9 _.:-]*$Name of the custom detection the rows become. The emitted detections carry the type
custom:<name>; when omitted they carrycustom_cypher_detection.severity stringPossible values: [
critical,high,medium,low]Default value:
mediumSeverity of the emitted detections.
category stringDefault value:
customCategory of the emitted detections:
custom, or the name of a registered detection category or subcategory.actions object
Actions configuration. Map of action ID to action configuration.
discriminatorPossible values: [
remediation,ticket,data_sink,webhook,notification,condition,access_review]oneOfstarting_actions string[]IDs of actions to execute first (after data input).
schedule stringOptional cron expression (5-field, UTC). When non-empty, the workflow is registered with the scheduler and fires on each tick (cron parser: github.com/hashicorp/cronexpr). Must be empty when
data_input_config.typeislifecycle— lifecycle workflows are event-driven and cannot be scheduled.authoring_model stringPossible values: [
raw,jml]Discriminates how this configuration was authored. "raw" (default) means data_input_config/actions/starting_actions were authored directly. "jml" means jml_source is the source of truth and those three fields are compiled output: they are derived from jml_source on every write and a request that supplies them directly alongside authoring_model=jml is rejected with 400.
NOTE: this is a different discriminator from
kindon the Workflow/WorkflowWithConfiguration response —kindis a response-variant discriminator (workflow vs workflow_with_configuration) used by the generated client to dispatch a oneOf, and has nothing to do with JML. Dispatch the JML editor vs the raw DAG editor on authoring_model, not kind.jml_source object
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.trigger object
Exactly one of
eventoreventsmust be set.eventsis the current form — the UI's "Someone joins" chip compiles to[created, reactivated];eventis kept for existing sources and is treated as a one-elementevents.event 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
events string[]Possible values: [
created,deleted,suspended,modified,reactivated,role_changed,group_added,group_removed,risk_score_changed,inactive_threshold],>= 1The lifecycle events that fire this workflow. Any one of them arriving from a source connection starts a run.
source_connections string[]Possible values:
>= 1filters object[]
attr stringAttribute key to compare, e.g. "employee_type". The reserved key "group" matches on the identity's group memberships (the graph's IS_MEMBER_OF edge) instead of a raw attribute: the value is a group name, and eq also accepts the group's entity_id. A filter holds when any group satisfies it; ne holds when none equals it.
op stringPossible values: [
eq,ne,co,sw,ew,pr]Comparison operator (equals, not-equals, contains, starts-with, ends-with, present).
valuephases object
The three fixed phases. The boundary is load-bearing: the Mover/Leaver access diff is computed over
accessonly.before object[]
type stringPossible values: [
grant,revoke,disable,notify,ticket,webhook,condition,provision,role,access_review]Step vocabulary. grant/revoke are only valid in the access phase (grant is additionally rejected on a leaver policy); the rest are valid in before/after.
roleassigns every entitlement of a JMLRole; access phase only, joiner and mover.access_reviewopens and starts an access review of the person the event is about, configured by its string params:reviewer(one email; that person reviews), else the person's manager, which requiresfallback_reviewer(email) for anyone without one; one of the two must be set.review_window_days(1-365, default 14). While that review is open, the step opens no second one for the same person. On a leaver the review usually finds nothing left to decide once the access phase has revoked it, and closes asnothing_to_review.id stringPossible values: Value must match regular expression
^[a-z0-9][a-z0-9_-]{0,63}$Stable identity of the step; never regenerated once assigned. Optional until the policy contains its first reference: a step with no id still compiles, using its position in the phase ("before-0", etc.) as its action id. Once ANY step carries a
subject, agranting_id_ref, a ValueRef param or a{{.steps.…}}template, every enabled step needs an id, because references resolve through them.Uniqueness is enforced over EFFECTIVE ids across all three phases: an explicit id may not equal another step's positional id either (an explicit "before-1" beside an unnamed second
beforestep is rejected). It must not equal the reserved id "access-policy".name stringOptional display label for the step. Defaults to the catalogue label for the step's
typewhen omitted.connection stringUsed by grant, revoke, disable, provision. For an enabled grant/revoke/disable step with no
subjectbinding, the connection's platform must match the platform of EVERYtrigger.source_connectionsentry — such a step acts on the triggering identity, and the engine resolves the provider action from that identity's platform, so a cross-provider step would never run. Bind asubjectfrom a provision step, or split the policy per source. Unrelated toprovision, whose target platform is the step's own.granting_type stringUsed by grant, revoke — e.g. "okta_group".
granting_id stringUsed by grant, revoke. Exactly one of
granting_idandgranting_id_refis set.granting_id_ref object
A reference to a value that is not known when the policy is authored. Exactly one origin is set:
from_steptogether withoutput(an earlier step's declared output — see the step catalogue'soutputs), orfrom_trigger(a value of the triggering identity). Setting both, neither, orfrom_stepwithoutoutputis rejected on write.from_triggernames either one of the well-known lifecycle values (identifier,display_name,email,source_identifier) orattributes.<key>, where<key>must be discoverable on EVERY trigger source connection.from_step stringThe
idof an earlier step in the policy's chain.output stringThe name of an output that step declares.
from_trigger stringA value of the triggering identity, e.g. "email" or "attributes.department".
subject object
A reference to a value that is not known when the policy is authored. Exactly one origin is set:
from_steptogether withoutput(an earlier step's declared output — see the step catalogue'soutputs), orfrom_trigger(a value of the triggering identity). Setting both, neither, orfrom_stepwithoutoutputis rejected on write.from_triggernames either one of the well-known lifecycle values (identifier,display_name,email,source_identifier) orattributes.<key>, where<key>must be discoverable on EVERY trigger source connection.from_step stringThe
idof an earlier step in the policy's chain.output stringThe name of an output that step declares.
from_trigger stringA value of the triggering identity, e.g. "email" or "attributes.department".
role_id stringUsed by role. The JMLRole whose entitlements are granted.
target stringUsed by provision — the kind of resource to create, e.g. "aws_account". See JMLSource's description for the set supported in this release.
channel stringUsed by notify — e.g. "email", "slack".
to stringUsed by notify. A literal recipient (email address, phone number, Slack channel) — role words like "manager" are rejected at compile time; there is no recipient templating.
provider stringUsed by ticket — e.g. "jira", "servicenow".
params object
Freeform per-step configuration for step types with no typed fields of their own (webhook, condition), plus optional detail for ones that do (ticket). A value may be a ValueRef object instead of a literal, binding the parameter to an earlier step's output or to a value of the triggering identity; the engine resolves it at run time so the provider always receives a literal.
A ValueRef param is valid only on the step types whose compiled action carries bindings — provision, grant, revoke, disable. On notify, ticket, webhook and condition it is rejected; reference an earlier step from those steps' template fields instead (
{{.steps.<id>.<output>}}, with-in the id written as_).enabled booleanDefault value:
trueWhen false the step is kept in the source but skipped entirely at compile time — it produces no action node. Lets a step be turned off without deleting it. Omitted means enabled.
access object[]
Only
grantandrolesteps contribute here; access is folded into one access_policy node at compile time.type stringPossible values: [
grant,revoke,disable,notify,ticket,webhook,condition,provision,role,access_review]Step vocabulary. grant/revoke are only valid in the access phase (grant is additionally rejected on a leaver policy); the rest are valid in before/after.
roleassigns every entitlement of a JMLRole; access phase only, joiner and mover.access_reviewopens and starts an access review of the person the event is about, configured by its string params:reviewer(one email; that person reviews), else the person's manager, which requiresfallback_reviewer(email) for anyone without one; one of the two must be set.review_window_days(1-365, default 14). While that review is open, the step opens no second one for the same person. On a leaver the review usually finds nothing left to decide once the access phase has revoked it, and closes asnothing_to_review.id stringPossible values: Value must match regular expression
^[a-z0-9][a-z0-9_-]{0,63}$Stable identity of the step; never regenerated once assigned. Optional until the policy contains its first reference: a step with no id still compiles, using its position in the phase ("before-0", etc.) as its action id. Once ANY step carries a
subject, agranting_id_ref, a ValueRef param or a{{.steps.…}}template, every enabled step needs an id, because references resolve through them.Uniqueness is enforced over EFFECTIVE ids across all three phases: an explicit id may not equal another step's positional id either (an explicit "before-1" beside an unnamed second
beforestep is rejected). It must not equal the reserved id "access-policy".name stringOptional display label for the step. Defaults to the catalogue label for the step's
typewhen omitted.connection stringUsed by grant, revoke, disable, provision. For an enabled grant/revoke/disable step with no
subjectbinding, the connection's platform must match the platform of EVERYtrigger.source_connectionsentry — such a step acts on the triggering identity, and the engine resolves the provider action from that identity's platform, so a cross-provider step would never run. Bind asubjectfrom a provision step, or split the policy per source. Unrelated toprovision, whose target platform is the step's own.granting_type stringUsed by grant, revoke — e.g. "okta_group".
granting_id stringUsed by grant, revoke. Exactly one of
granting_idandgranting_id_refis set.granting_id_ref object
A reference to a value that is not known when the policy is authored. Exactly one origin is set:
from_steptogether withoutput(an earlier step's declared output — see the step catalogue'soutputs), orfrom_trigger(a value of the triggering identity). Setting both, neither, orfrom_stepwithoutoutputis rejected on write.from_triggernames either one of the well-known lifecycle values (identifier,display_name,email,source_identifier) orattributes.<key>, where<key>must be discoverable on EVERY trigger source connection.from_step stringThe
idof an earlier step in the policy's chain.output stringThe name of an output that step declares.
from_trigger stringA value of the triggering identity, e.g. "email" or "attributes.department".
subject object
A reference to a value that is not known when the policy is authored. Exactly one origin is set:
from_steptogether withoutput(an earlier step's declared output — see the step catalogue'soutputs), orfrom_trigger(a value of the triggering identity). Setting both, neither, orfrom_stepwithoutoutputis rejected on write.from_triggernames either one of the well-known lifecycle values (identifier,display_name,email,source_identifier) orattributes.<key>, where<key>must be discoverable on EVERY trigger source connection.from_step stringThe
idof an earlier step in the policy's chain.output stringThe name of an output that step declares.
from_trigger stringA value of the triggering identity, e.g. "email" or "attributes.department".
role_id stringUsed by role. The JMLRole whose entitlements are granted.
target stringUsed by provision — the kind of resource to create, e.g. "aws_account". See JMLSource's description for the set supported in this release.
channel stringUsed by notify — e.g. "email", "slack".
to stringUsed by notify. A literal recipient (email address, phone number, Slack channel) — role words like "manager" are rejected at compile time; there is no recipient templating.
provider stringUsed by ticket — e.g. "jira", "servicenow".
params object
Freeform per-step configuration for step types with no typed fields of their own (webhook, condition), plus optional detail for ones that do (ticket). A value may be a ValueRef object instead of a literal, binding the parameter to an earlier step's output or to a value of the triggering identity; the engine resolves it at run time so the provider always receives a literal.
A ValueRef param is valid only on the step types whose compiled action carries bindings — provision, grant, revoke, disable. On notify, ticket, webhook and condition it is rejected; reference an earlier step from those steps' template fields instead (
{{.steps.<id>.<output>}}, with-in the id written as_).enabled booleanDefault value:
trueWhen false the step is kept in the source but skipped entirely at compile time — it produces no action node. Lets a step be turned off without deleting it. Omitted means enabled.
after object[]
type stringPossible values: [
grant,revoke,disable,notify,ticket,webhook,condition,provision,role,access_review]Step vocabulary. grant/revoke are only valid in the access phase (grant is additionally rejected on a leaver policy); the rest are valid in before/after.
roleassigns every entitlement of a JMLRole; access phase only, joiner and mover.access_reviewopens and starts an access review of the person the event is about, configured by its string params:reviewer(one email; that person reviews), else the person's manager, which requiresfallback_reviewer(email) for anyone without one; one of the two must be set.review_window_days(1-365, default 14). While that review is open, the step opens no second one for the same person. On a leaver the review usually finds nothing left to decide once the access phase has revoked it, and closes asnothing_to_review.id stringPossible values: Value must match regular expression
^[a-z0-9][a-z0-9_-]{0,63}$Stable identity of the step; never regenerated once assigned. Optional until the policy contains its first reference: a step with no id still compiles, using its position in the phase ("before-0", etc.) as its action id. Once ANY step carries a
subject, agranting_id_ref, a ValueRef param or a{{.steps.…}}template, every enabled step needs an id, because references resolve through them.Uniqueness is enforced over EFFECTIVE ids across all three phases: an explicit id may not equal another step's positional id either (an explicit "before-1" beside an unnamed second
beforestep is rejected). It must not equal the reserved id "access-policy".name stringOptional display label for the step. Defaults to the catalogue label for the step's
typewhen omitted.connection stringUsed by grant, revoke, disable, provision. For an enabled grant/revoke/disable step with no
subjectbinding, the connection's platform must match the platform of EVERYtrigger.source_connectionsentry — such a step acts on the triggering identity, and the engine resolves the provider action from that identity's platform, so a cross-provider step would never run. Bind asubjectfrom a provision step, or split the policy per source. Unrelated toprovision, whose target platform is the step's own.granting_type stringUsed by grant, revoke — e.g. "okta_group".
granting_id stringUsed by grant, revoke. Exactly one of
granting_idandgranting_id_refis set.granting_id_ref object
A reference to a value that is not known when the policy is authored. Exactly one origin is set:
from_steptogether withoutput(an earlier step's declared output — see the step catalogue'soutputs), orfrom_trigger(a value of the triggering identity). Setting both, neither, orfrom_stepwithoutoutputis rejected on write.from_triggernames either one of the well-known lifecycle values (identifier,display_name,email,source_identifier) orattributes.<key>, where<key>must be discoverable on EVERY trigger source connection.from_step stringThe
idof an earlier step in the policy's chain.output stringThe name of an output that step declares.
from_trigger stringA value of the triggering identity, e.g. "email" or "attributes.department".
subject object
A reference to a value that is not known when the policy is authored. Exactly one origin is set:
from_steptogether withoutput(an earlier step's declared output — see the step catalogue'soutputs), orfrom_trigger(a value of the triggering identity). Setting both, neither, orfrom_stepwithoutoutputis rejected on write.from_triggernames either one of the well-known lifecycle values (identifier,display_name,email,source_identifier) orattributes.<key>, where<key>must be discoverable on EVERY trigger source connection.from_step stringThe
idof an earlier step in the policy's chain.output stringThe name of an output that step declares.
from_trigger stringA value of the triggering identity, e.g. "email" or "attributes.department".
role_id stringUsed by role. The JMLRole whose entitlements are granted.
target stringUsed by provision — the kind of resource to create, e.g. "aws_account". See JMLSource's description for the set supported in this release.
channel stringUsed by notify — e.g. "email", "slack".
to stringUsed by notify. A literal recipient (email address, phone number, Slack channel) — role words like "manager" are rejected at compile time; there is no recipient templating.
provider stringUsed by ticket — e.g. "jira", "servicenow".
params object
Freeform per-step configuration for step types with no typed fields of their own (webhook, condition), plus optional detail for ones that do (ticket). A value may be a ValueRef object instead of a literal, binding the parameter to an earlier step's output or to a value of the triggering identity; the engine resolves it at run time so the provider always receives a literal.
A ValueRef param is valid only on the step types whose compiled action carries bindings — provision, grant, revoke, disable. On notify, ticket, webhook and condition it is rejected; reference an earlier step from those steps' template fields instead (
{{.steps.<id>.<output>}}, with-in the id written as_).enabled booleanDefault value:
trueWhen false the step is kept in the source but skipped entirely at compile time — it produces no action node. Lets a step be turned off without deleting it. Omitted means enabled.
is_latest booleanWhether this is the latest version
{
"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": {
"kind": "workflow",
"id": "string",
"org_id": "string",
"name": "string",
"description": "string",
"lifecycle": "joiner",
"status": "draft",
"created_by": "string",
"created_at": "2005-12-24T18:29:30.033157Z",
"updated_by": "string",
"updated_at": "2005-12-24T18:29:30.033157Z",
"activated_at": "2005-12-24T18:29:30.033157Z",
"paused_at": "2005-12-24T18:29:30.033157Z",
"paused_by": "string",
"last_executed_at": "2005-12-24T18:29:30.033157Z",
"execution_count": 0,
"success_count": 0,
"failure_count": 0,
"latest_configuration_id": "string",
"latest_configuration_version": 0
}
}
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"
}
]
}