Hey,
Thanks for the quick response. This is my completed Workflow so far. Still need to add the Slack HTTP Request part, but for now, I am trying to solve the issue with creating the campaign.
{
"name": "Manager Change Approvals",
"description": "",
"modified": "2025-10-16T12:56:51.181317376Z",
"modifiedBy": {
"type": "IDENTITY",
"id": "XXXXXXXXXXXXX",
"name": "XXXXXXXXXXXX"
},
"definition": {
"start": "Get Identity",
"steps": {
"Compare Numbers": {
"actionId": "sp:compare-numbers",
"choiceList": [
{
"comparator": "NumericGreaterThanEquals",
"nextStep": "Send Email",
"variableA.$": "$.getListOfIdentities.identities.length()",
"variableB": 1
}
],
"defaultStep": "HTTP Request 3",
"displayName": "Check if Manager is on the list",
"type": "choice"
},
"Compare Numbers 1": {
"actionId": "sp:compare-numbers",
"choiceList": [
{
"comparator": "NumericGreaterThanEquals",
"nextStep": "Send Email",
"variableA.$": "$.getListOfIdentities.identities.length()",
"variableB": 1
}
],
"defaultStep": "HTTP Request 4",
"displayName": "Check if Manager is on the list",
"type": "choice"
},
"Compare Timestamps": {
"actionId": "sp:compare-timestamps",
"choiceList": [
{
"comparator": "TimestampEquals",
"nextStep": "Define Variable",
"variableA.$": "$.getIdentity.attributes.lastJobChange",
"variableB": "{{ now() }}"
}
],
"defaultStep": "Compare Timestamps 1",
"displayName": "Is date today?",
"type": "choice"
},
"Compare Timestamps 1": {
"actionId": "sp:compare-timestamps",
"choiceList": [
{
"comparator": "TimestampEquals",
"nextStep": "Define Variable",
"variableA.$": "$.getIdentity.attributes.lastJobChange",
"variableB": "{{ addDays(now(), 1) }}"
}
],
"defaultStep": "Compare Timestamps 2",
"displayName": "Is date tomorrow? ",
"type": "choice"
},
"Compare Timestamps 2": {
"actionId": "sp:compare-timestamps",
"choiceList": [
{
"comparator": "TimestampEquals",
"nextStep": "Define Variable",
"variableA.$": "$.getIdentity.attributes.lastJobChange",
"variableB": "{{ addDays(now(), -1) }}"
}
],
"defaultStep": "End Step - Success 2",
"displayName": "Is on Date Yesterday?",
"type": "choice"
},
"Define Variable": {
"actionId": "sp:define-variable",
"attributes": {
"id": "sp:define-variable",
"variables": [
{
"description": "",
"name": "reviewerId",
"transforms": [],
"variableA.$": "$.getIdentity.managerRef.id"
},
{
"description": "",
"name": "queryStr",
"transforms": [],
"variableA": "attributes.email:\"{{$.getIdentity.attributes.managerId}}\" AND attributes.cloudLifecycleState:Active AND NOT manager.email:\"{{$.getIdentity.attributes.managerId}}\""
},
{
"description": "",
"name": "userId",
"transforms": [],
"variableA.$": "$.trigger.identity.id"
},
{
"description": "",
"name": "displayName",
"transforms": [],
"variableA.$": "$.getIdentity.displayName"
}
]
},
"displayName": "Variables",
"nextStep": "Get List of Identities",
"type": "Mutation"
},
"End Step - Failure": {
"actionId": "sp:operator-failure",
"displayName": "",
"failureName": "User not created",
"type": "failure"
},
"End Step - Success 1": {
"actionId": "sp:operator-success",
"description": "Workflow stopped: The identity's new managerId attribute is null.",
"displayName": "End Step - ManagerID is Null",
"type": "success"
},
"End Step - Success 2": {
"actionId": "sp:operator-success",
"displayName": "End Step - No Valid Date",
"type": "success"
},
"End Step - Success 3": {
"actionId": "sp:operator-success",
"description": "All Cert Send to the Manager",
"displayName": "End Step - Completed",
"type": "success"
},
"Get Identity": {
"actionId": "sp:get-identity",
"attributes": {
"id.$": "$.trigger.identity.id"
},
"displayName": "",
"nextStep": "Verify Data Type",
"type": "action",
"versionNumber": 2
},
"Get List of Identities": {
"actionId": "sp:get-identities",
"attributes": {
"inputQuery.$": "$.defineVariable.queryStr",
"searchBy": "searchQuery"
},
"displayName": "Check if Manager is on Sailpoint",
"nextStep": "Compare Numbers",
"type": "action",
"versionNumber": 2
},
"Get List of Identities 1": {
"actionId": "sp:get-identities",
"attributes": {
"inputQuery.$": "$.defineVariable.queryStr",
"searchBy": "searchQuery"
},
"displayName": "Check if Manager is on Sailpoint",
"nextStep": "Compare Numbers 1",
"type": "action",
"versionNumber": 2
},
"HTTP Request": {
"actionId": "sp:http",
"attributes": {
"authenticationType": "OAuth",
"jsonRequestBody": {
"deadline": "{{@formatDate(@addDays(@now(),14), \"yyyy-MM-dd'T'HH:mm:ss'Z'\")}}",
"description": "Manager reviews only roles for {{$.getIdentity.displayName}}",
"emailNotificationEnabled": true,
"name": "Role Review for {{$.getIdentity.displayName}}",
"searchCampaignInfo": {
"identityIds": [
"{{$.trigger.identity.id}}"
],
"query": "type:role",
"reviewer": {
"id": "{{$.getIdentity.managerRef.id}}",
"type": "IDENTITY"
},
"type": "ACCESS"
},
"type": "SEARCH"
},
"method": "post",
"oAuthClientId": "XXXXXXXXXXXXX",
"oAuthClientSecret": "XXXXXXXXXXXXXXXXXXXX",
"oAuthScope": null,
"oAuthTokenUrl": "https://XXXXXXXXXXXXXXXX.api.identitynow.com/oauth/token",
"requestContentType": "json",
"url": "https://XXXXXXXXXXXXXXX.api.identitynow.com/v2024/campaigns"
},
"displayName": "Created Campaign ",
"nextStep": "End Step - Success 3",
"type": "action",
"versionNumber": 2
},
"HTTP Request 3": {
"actionId": "sp:http",
"attributes": {
"authenticationType": "OAuth",
"method": "post",
"oAuthClientId": "XXXXXXXXXXXXXXXXXX",
"oAuthClientSecret": "XXXXXXXXXXXXX",
"oAuthCredentialLocation": "oAuthInHeader",
"oAuthTokenUrl": "https://XXXXXXXXXXXXX.api.identitynow.com/oauth/token",
"url": "https://XXXXXXXXXXXX.api.identitynow.com/v2024/sources/XXXXXXXXXXXXXXXXXX/load-accounts"
},
"displayName": "Run Account Aggregation",
"nextStep": "Wait 1",
"type": "action",
"versionNumber": 2
},
"HTTP Request 4": {
"actionId": "sp:http",
"attributes": {},
"displayName": "Send Slack Message (Error)",
"nextStep": "End Step - Failure",
"type": "action",
"versionNumber": 2
},
"Send Email": {
"actionId": "sp:send-email",
"attributes": {
"body": "<p>Certification Camp Testing</p>",
"context": {},
"from": null,
"recipientEmailList.$": "$.getIdentity.attributes.managerId",
"subject": "Certification Camp"
},
"displayName": "Send Email (Campaign Start)",
"nextStep": "HTTP Request",
"type": "action",
"versionNumber": 2
},
"Verify Data Type": {
"actionId": "sp:compare-unary",
"choiceList": [
{
"comparator": "IsNull",
"nextStep": "End Step - Success 1",
"variableA.$": "$.getIdentity.attributes.managerId"
}
],
"defaultStep": "Verify Data Type 1",
"description": "Check if the new managerId attribute value is null.",
"displayName": "Is ManagerID Null?",
"type": "choice"
},
"Verify Data Type 1": {
"actionId": "sp:compare-unary",
"choiceList": [
{
"comparator": "IsNull",
"nextStep": "Define Variable",
"variableA.$": "$.getIdentity.attributes.lastJobChange"
}
],
"defaultStep": "Compare Timestamps",
"displayName": "Is LastJobChangeDate Null?",
"type": "choice"
},
"Wait 1": {
"actionId": "sp:sleep",
"attributes": {
"duration": "1m",
"type": "waitFor"
},
"displayName": "",
"nextStep": "Get List of Identities 1",
"type": "action",
"versionNumber": 1
}
}
},
"creator": {
"type": "IDENTITY",
"id": "XXXXXXXXXXXXXX",
"name": "XXXXXXXXXXXXXXX"
},
"trigger": {
"type": "EVENT",
"attributes": {
"attributeToFilter": "managerId",
"filter.$": "$.changes[?(@.attribute == \"managerId\")]",
"id": "idn:identity-attributes-changed"
}
}
}