---
sourceDocument: Zurich IT Service Management
sourceDocumentLink: https://www.servicenow.com/docs/r/zurich/it-service-management

 Release :

    - zurich

ft:locale :

    - en-US

ft:publication_title :

    - Zurich IT Service Management

ft:clusterId :

    - itsm

bundleId :

    - itsm

workflow :

    - Technology


---

# Creating DevOps subflows

# Creating DevOps subflows {#ariaid-title1}

Release version: Zurich  
Updated March 12, 2026  
![](https://www.servicenow.com/docs/portal-asset/ico-clock) 5 minutes to read
Summarize  
![AI sparkle icon](https://servicenow.com/docs/portal-asset/ai-sparkle-icon) Summarized using AI  
This content was generated using new OpenAI-powered functionality. Results are provided on an as is basis and are not guaranteed to be accurate or complete.  

## Summary of Creating DevOps subflows

ServiceNow customers can create DevOps Workflow Studio subflows to collect and transform data from various DevOps tools during user-created integrations.
These subflows utilize ServiceNow Flow Designer to automate processes through sequences of actions, triggered by conditions and passing data via variables.
Show full answer Show less  
The subflows support multiple DevOps tool types including planning, coding, orchestration, test, and artifact tools, each with predefined JSON payload structures for notifications. Subflows also enable key capabilities such as Connect and Discover for managing tool connections and data retrieval.

## Key Features

* **Notification capability subflow:** Transforms original payloads from different DevOps tools into standardized JSON formats, storing the results in a `transformedpayload` field for further processing.
* **Connect capability subflow:** Allows users to test and manage connections to DevOps tools, returning success flags and error messages to help troubleshoot connection issues directly from the DevOps tool form.
* **Discover capability subflow:** Retrieves data from connected DevOps tools, supporting both paginated and non-paginated JSON payloads. This data includes items like releases, repositories, orchestration tasks, pipelines, test results, and artifacts.
* **Update Import Request action:** Enables modification of Import Request record states within the Discover subflow, allowing controlled workflow progression and error handling.

## Practical Use and Outcomes

By implementing these DevOps subflows, ServiceNow customers can streamline integration with a variety of DevOps tools, ensuring consistent data transformation and automation. The Connect and Discover capabilities facilitate reliable tool connectivity and efficient data import, enhancing visibility and control within ServiceNow.

Using these subflows, customers can expect:

* Standardized and validated data ingestion from planning, coding, orchestration, testing, and artifact tools.
* Improved error handling with clear connection status and messages.
* Support for large datasets via pagination in the Discover capability.
* Integration workflows that pause or proceed based on Import Request state updates, enabling robust process management.  
For user-created integrations, create a DevOps
Workflow Studio subflow to collect and transform data from the tool you are
integrating.

ServiceNow
[Flow Designer](https://www.servicenow.com/docs/access?context=flow-designer&version=zurich&pubname=zurich-application-development&ft:locale=en-US) is a ServiceNow AI Platform feature your integration developer can use to automate processes using a sequence of actions. Trigger conditions start the flow, and variables pass information between actions.

See [Flow Designer](https://www.servicenow.com/docs/access?context=flow-designer&version=zurich&pubname=zurich-application-development&ft:locale=en-US)
[Subflows](https://www.servicenow.com/docs/access?context=subflows&version=zurich&pubname=zurich-build-workflows&ft:locale=en-US) for information on how to create a subflow.

## Notification capability subflow {#creating-dev-ops-subflows__section_ep4_txg_w3b}

{#creating-dev-ops-subflows__table_hbx_dn1_1kb__entry__2}

| Item | Expected value |
|-|-|
| Inputs | Label: current Type: Reference.Inbound Event |
| Outputs | N/A |
[ ]

{#creating-dev-ops-subflows__table_hbx_dn1_1kb}

Transform the original payload, and save the final payload in the
transformed_payload field.

Expected standard JSON Notification capability payload - Planning tool
:   Note:  
    The version attribute in the JSON payload is optional. Even if you do not provide the version attribute, the payload is processed successfully.

        {
          "id": "STR1234",
          "type": "Story",
          "shortDescription": "Planning API Spec",
          "state": "In-progress",
          "createdDateTime": "1970-01-01T08:15:30-05:00",
          "assignedTo": {
            "name": "Leo Neo",
            "userName": "lenn",
            "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "email": "lenn@smithworksinc.com"
          },
        // The Version attribute is optional
          "version": {
              "id": "REL1234",
              "shortDescription": "APIs Release",
              "createdDateTime": "1970-01-01T08:15:30-05:00",
              "app": {
                  "id": "PRODUCT1234",
                  "shortDescription": "Mobile UI",
                  "createdDateTime": "1970-01-01T08:15:30-05:00",
                  "url": "https://jira.com/mycompany/browse/PRODUCT-125"
                },
              "url": "https://jira.com/mycompany/browse/REL-125"
            },
          "app": {
              "id": "PRODUCT1234",
              "shortDescription": "Mobile UI",
              "createdDateTime": "1970-01-01T08:15:30-05:00",
              "url": "https://jira.com/mycompany/browse/PRODUCT-125"
            },
          "url": "https://jira.com/mycompany/browse/HALOKEY-25"
        }

Expected standard JSON Notification capability payload - Coding tool
:

        {
          "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "url": "https://github.com/mycompany/mobileplatform/commit/3fa85f6457174562b3fc2c963f66afa6",
          "committedDate": "1970-01-01T08:15:30-05:00",
          "repository": {
            "name": "Platform-Mobile",
            "url": "https://github.com/mycompany/mobileplatform"
          },
         "branch": {
            "name": "master",
            "path": "refs/heads/master"
          },
          "committer": {
            "email": "lenn@smithworksinc.com"
          },
          "details": [
            {
              "additions": 0,
              "deletions": 0,
              "totalChanges": 0,
              "file": "src/test/java/com/mycompany/app/App.java",
              "action": "modified",
              "changes": "%40%40%20-30%2C6%20%2B30%2C18%20%40%40%20public%20void%20testAppConstructor%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%7D%0A%20%0A%2B%20%20%20%20%40Test%0A%2B%20%20%20%20public%20void%20testDatabase%28%29%0A%2B%20%20%20%20%7B%0A%2B%09%2F%2FThis%20is%20a%20test%20function%0A%2B%20%20%20%20%20%20%20%20App.main%28null%29%3B%0A%2B%20%20%20%20%20%20%20%20try%20%7B%0A%2B%20%20%20%20%20%20%20%20%20%20%20%20assertEquals%28%22Hello%20World%21%22%20%2B%20System.getProperty%28%22line.separator%22%29%2C%20outContent.toString%28%29%29%3B%0A%2B%20%20%20%20%20%20%20%20%7D%20catch%20%28AssertionError%20e%29%20%7B%0A%2B%20%20%20%20%20%20%20%20%20%20%20%20fail%28%22%22message%22%20is%20not%20%22Hello%20World%21%22%22%29%3B%0A%2B%20%20%20%20%20%20%20%20%7D%0A%2B%20%20%20%20%7D%0A%2B%0A%20%20%20%20%20%40Test%0A%20%20%20%20%20public%20void%20testAppMain%28%29%0A%20%20%20%20%20%7B"
            }
          ]
        }
         
Expected standard JSON Notification capability payload - Orchestration tool
:

        {
          "toolId": "bc1d9454dbdb0810ae77f3c61d9619d1",
          "buildNumber": "100",
          "nativeId": "HILR/Prod #100",
          "name": "HILR/Prod",
          "id": "HILR/Prod #100",
          "url": "https://dev.azure.com/lenn/CorpSite-ADO/_build/results?buildId=100#Prod/",
          "isMultiBranch": "false",
          "orchestrationTaskUrl": "https://dev.azure.com/lenn/CorpSite-ADO/_build?name=HILR#Prod",
          "orchestrationTaskName": "CorpSite-ADO/HILR#Prod",
          "upstreamTaskUrl": "https://dev.azure.com/lenn/CorpSite-ADO/_build/results?buildId=100#UAT/",
          "upstreamId": "CorpSite-ADO/HILR#UAT",
          "result": "building",
          "startDateTime": "2020-03-20 22:59:27"
        }

Expected standard JSON Notification capability payload - Test tool
:   Functional:

        { 
        "name": "CorpSite-selenium#55", 
        "duration": 78.802, 
        "passedTests": 4, 
        "failedTests": 0, 
        "skippedTests": 0, 
        "blockedTests": 0, 
        "totalTests": 4, 
        "startTime": "2020-06-30T18:12:31Z", 
        "finishTime": "2020-06-30T18:12:31Z", 
        "passingPercent": 100, 
         
         
        // Use Artifact OR Package OR Build + Stage + PipelineName Attributes 
        "packages": [{"name": "CorpSite-pkg1"}], 
        "artifacts": [{"name": "CorpSite-artifact", "version": "1.0.0"}], 
        "buildNumber": "55", 
        "stageName": "test", 
        "pipelineName": "CorpSite-selenium", 
        } 


    Performance:

        { 
        "name": "Performance Tests", 
        "url": "http://abc.com", 
        "startTime": "2020-06-30T18:12:31Z", 
        "finishTime": "2020-06-30T18:12:31Z", 
        "duration": 78.802, 
        "maximumVirtualUsers": "", 
        "throughput": "", 
        "maximumTime": "", 
        "minimumTime": "", 
        "averageTime": "", 
        "ninetyPercent": "", 
        "standardDeviation": "", 
         
        // Use Artifact OR Package OR Build + Stage + PipelineName Attributes 
        "packages": [{"name": "CorpSite-pkg1"}], 
        "artifacts": [{"name": "CorpSite-artifact", "version": "1.0.0"}], 
        "buildNumber": "55", 
        "stageName": "test", 
        "pipelineName": "CorpSite-Performance", 
        } 

Expected standard JSON Notification capability payload - Artifact tool
:   Pipelines:

        {
          "artifacts": [
            {
              "name": "acm.jar",
              "version": "1.82",
              "semanticVersion": "1.82.0",
              "repositoryName": "acm-repo"
            }
          ],
          "pipelineName": "testMultiBranch/master",
          "taskExecutionNumber": "82",
          "stageName": "buildmbmaster",
          "branchName": "master"
        }


    Jenkins Freestyle/Maven Project:

        {
          "artifacts": [
            {
              "name": "mav1.jar",
              "version": "1.11",
              "semanticVersion": "1.11.0",
              "repositoryName": "mav-repo"
            }
          ],
          "projectName": "maven-test-proj",
          "taskExecutionNumber": "11"
        }

Figure 1. DevOps Notification capability flow diagram example - Coding tool

## Connect capability subflow {#creating-dev-ops-subflows__section_tkj_jzf_1kb}

The Connect capability is supported.  
{#creating-dev-ops-subflows__table_xys_nm1_1kb__entry__2}

| Item | Expected value |
|-|-|
| Inputs | Label: current Type: Reference.DevOps Tool Tool record for which the Connect button action is clicked. |
| Outputs See [subflow outputs](https://www.servicenow.com/docs/access?context=subflows&version=zurich&pubname=zurich-build-workflows&ft:locale=en-US). | * Label: connectedFlag indicating the success or failure of the connection made to the target tool (true/false). * Label: errormessageString message displayed on the form for connection failure. The variable is an empty string if the connection is successful. {#creating-dev-ops-subflows__ul_v5t_sm1_1kb} |
[ ]

{#creating-dev-ops-subflows__table_xys_nm1_1kb}  
Connect errors shown on the DevOps tool form:

Connection failed
:   Subflow was executed successfully but the connection could not be made.

Error: Failed to get failure details from the tool specific connect flow
:   Subflow execution failed for an unknown reason.

Error updating the tool connect status
: The connection_state attribute could not be updated for an unknown reason.  
Figure 2. DevOps Connect capability flow diagram example - Orchestration tool

## Discover capability subflow {#creating-dev-ops-subflows__section_sgn_lzf_1kb}

The Discover capability is supported.  
{#creating-dev-ops-subflows__table_acq_yj1_1kb__entry__2}

| Item | Expected value |
|-|-|
| Inputs | Label: current Type: Reference.DevOps Tool |
| Outputs See [subflow outputs](https://www.servicenow.com/docs/access?context=subflows&version=zurich&pubname=zurich-build-workflows&ft:locale=en-US). | Without pagination: Label: discoverpayload Type: Array of objects as JSON string. <kbd class="ph userinput">(JSON.stringify([{},{}]))</kbd> Planning tool without pagination: [ { "id":"REL1234567", "name": "REL NUMBERS", "url":"https://jira.com/vult/browse/REL1234567", "nativeId": "1790e6cc-085b-4529-9cb8-47f393182226" }, { "id":"TOR67", "name": "TOR 67", "url":"https://jira.com/welp/browse/TOR67", "nativeId": "482ce864-085b-4529-9cb8-47f393767eb2" } ] Coding tool without pagination: [ { "name": "nvm_repo", "url": "https://github.com/nvm_repo/" }, { "name": "golang_util", "url": "https://github.com/golang_util/" } ]; Orchestration tool without pagination: { "orchestrationTasks": [ { "name": "Build_APC_1", "url": "https://jenkins.wsf.xyz/job/Build_APC_1", "projectName": "Build_APC_1" }, { "name": "CI_CD_Jenkins", "url": "https://pt1.jenkins.com/job/CI_CD_Jenkins", "projectName": "CI_CD_Jenkins" }, { "name": "CI_deploy", "url": "https://pt2.jenkins.com/job/CI_deploy", "projectName": "CI_deploy" } ], "pipelines": [ { "name": "Build_APC_1", "url": "https://jenkins.wsf.xyz/job/Build_APC_1", "projectName": "Build_APC_1" }, { "name": "CI_CD_Jenkins", "url": "https://pt1.jenkins.com/job/CI_CD_Jenkins", "projectName": "CI_CD_Jenkins" }, { "name": "CI_deploy", "url": "https://pt2.jenkins.com/job/CI_deploy", "projectName": "CI_deploy" } ] } With pagination: Label: discoverpayload Type: Array of objects as JSON string. <kbd class="ph userinput">(JSON.stringify([{},{}]))</kbd> Sample JSON format: "pageInfo" : { "isLastPage" : true, "discoverPayload" : {}, "pageDetails" : {} } Planning tool with pagination: { "pageInfo": { "isLastPage": false, "discoverPayload": [ { "id":"REL1234567", "name": "REL NUMBERS", "url":"https://jira.com/vult/browse/REL1234567", "nativeId": "1790e6cc-085b-4529-9cb8-47f393182226" }, { "id":"TOR67", "name": "TOR 67", "url":"https://jira.com/welp/browse/TOR67", "nativeId": "482ce864-085b-4529-9cb8-47f393767eb2" } ], "pageDetails": { "curPage" : 1, "nextPage": 2 } } } Coding tool with pagination: { "pageInfo": { "isLastPage": false, "discoverPayload": [ { "name": "nvm_repo", "url": "https://github.com/nvm_repo/" }, { "name": "golang_util", "url": "https://github.com/golang_util/" } ], "pageDetails": { "curPage" : 1, "nextPage": 2 } } } Orchestration tool with pagination: { "pageInfo": { "isLastPage": false, "discoverPayload": { "orchestrationTasks": [ { "name": "Build_APC_1", "url": "https://jenkins.wsf.xyz/job/Build_APC_1", "projectName": "Build_APC_1" }, { "name": "CI_CD_Jenkins", "url": "https://pt1.jenkins.com/job/CI_CD_Jenkins", "projectName": "CI_CD_Jenkins" } ], "pipelines": [ { "name": "Build_APC_1", "url": "https://jenkins.wsf.xyz/job/Build_APC_1", "projectName": "Build_APC_1" } ] }, "pageDetails": { "curPage" : 1, "nextPage": 2 } } } |
[ ]

{#creating-dev-ops-subflows__table_acq_yj1_1kb}  
The Discover main flow is triggered during import request record creation. An import request has these states and messages.{#creating-dev-ops-subflows__table_pjc_x5t_jkb__entry__2}

| State | Message |
|-|-|
| Requested | -- |
| Processing | -- |
| Completed | Updated \<number\> object(s) Found \<number\> objects with invalid toolId Found \<number\> objects failed validation |
| Error | * Unable to parse payload string from Subflow * discoverpayload is expected to be an array of objects * ImportRequest record does not have reference to tool table {#creating-dev-ops-subflows__ul_tf3_vvt_jkb} |
| Paused | -- |
| Canceled | -- |
| Unmatched | -- |
[ ]

{#creating-dev-ops-subflows__table_pjc_x5t_jkb}  
Figure 3. DevOps Discover capability flow diagram example - Planning tool  
Figure 4. DevOps Discover capability with pagination support flow diagram

## Update Import Request Workflow Studio action {#creating-dev-ops-subflows__section_tns_mzf_1kb}

You can use the Update Import Request action in your Discover subflow to modify the Import
Request record state, if desired.  
{#creating-dev-ops-subflows__table_ncn_xs1_1kb__entry__2}

| Input label | Type |
|-|-|
| current | Reference.Import Request |
| state | (String) * requested * processing Note: Flow execution is stopped (once the return is received from the subflow) when the state is set to processing. * completed * error * paused * canceled * unmatched {#creating-dev-ops-subflows__ul_kbx_yt1_1kb} |
| details | (String) |
[ ]

{#creating-dev-ops-subflows__table_ncn_xs1_1kb}

