Skip to main content
PUT
/
workflows
/
{workflow_id}
Update workflow
curl --request PUT \
  --url https://api.cloudcruise.com/workflows/{workflow_id} \
  --header 'Content-Type: application/json' \
  --header 'cc-key: <api-key>' \
  --data '
{
  "name": "<string>",
  "nodes": [
    {
      "id": "<string>",
      "name": "<string>",
      "parameters": {},
      "description": "<string>"
    }
  ],
  "edges": {},
  "input_schema": {
    "type": "object",
    "properties": {
      "SEARCH_TERM": {
        "type": [
          "string",
          "null"
        ]
      }
    },
    "required": [
      "SEARCH_TERM"
    ]
  },
  "output_schema": {
    "type": "object",
    "properties": {}
  },
  "max_retries": 0,
  "description": "<string>",
  "version_note": "Updated login selectors",
  "use_native_actions": true,
  "video_record_session": true,
  "extract_network_urls": [
    "<string>"
  ],
  "encrypted_keys": [
    "<string>"
  ],
  "popup_xpaths": [
    "<string>"
  ],
  "vault_schema": {
    "USER": {
      "type": "credential",
      "domain": "https://example.com",
      "example": "11223344-5566-7788-9900-112233445566"
    }
  },
  "proxy_setting": "<string>",
  "proxy_value": "<string>",
  "enable_popup_handling": true,
  "enable_action_timing_recovery": true,
  "enable_xpath_recovery": true,
  "enable_node_description_enrichment": true,
  "enable_error_code_generation": true,
  "enable_service_unavailable_recovery": true,
  "enable_incorrect_form_input_recovery": true,
  "enable_password_update_recovery": true,
  "enable_tfa_setup_recovery": true,
  "enable_network_listener": true,
  "skip_udp_proxying": true,
  "origin_catalog_workflow_version_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "origin_base_version_number": 123
}
'
import requests

url = "https://api.cloudcruise.com/workflows/{workflow_id}"

payload = {
"name": "<string>",
"nodes": [
{
"id": "<string>",
"name": "<string>",
"parameters": {},
"description": "<string>"
}
],
"edges": {},
"input_schema": {
"type": "object",
"properties": { "SEARCH_TERM": { "type": ["string", "null"] } },
"required": ["SEARCH_TERM"]
},
"output_schema": {
"type": "object",
"properties": {}
},
"max_retries": 0,
"description": "<string>",
"version_note": "Updated login selectors",
"use_native_actions": True,
"video_record_session": True,
"extract_network_urls": ["<string>"],
"encrypted_keys": ["<string>"],
"popup_xpaths": ["<string>"],
"vault_schema": { "USER": {
"type": "credential",
"domain": "https://example.com",
"example": "11223344-5566-7788-9900-112233445566"
} },
"proxy_setting": "<string>",
"proxy_value": "<string>",
"enable_popup_handling": True,
"enable_action_timing_recovery": True,
"enable_xpath_recovery": True,
"enable_node_description_enrichment": True,
"enable_error_code_generation": True,
"enable_service_unavailable_recovery": True,
"enable_incorrect_form_input_recovery": True,
"enable_password_update_recovery": True,
"enable_tfa_setup_recovery": True,
"enable_network_listener": True,
"skip_udp_proxying": True,
"origin_catalog_workflow_version_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"origin_base_version_number": 123
}
headers = {
"cc-key": "<api-key>",
"Content-Type": "application/json"
}

response = requests.put(url, json=payload, headers=headers)

print(response.text)
const options = {
method: 'PUT',
headers: {'cc-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
nodes: [{id: '<string>', name: '<string>', parameters: {}, description: '<string>'}],
edges: {},
input_schema: {
type: 'object',
properties: {SEARCH_TERM: {type: ['string', 'null']}},
required: ['SEARCH_TERM']
},
output_schema: {type: 'object', properties: {}},
max_retries: 0,
description: '<string>',
version_note: 'Updated login selectors',
use_native_actions: true,
video_record_session: true,
extract_network_urls: ['<string>'],
encrypted_keys: ['<string>'],
popup_xpaths: ['<string>'],
vault_schema: {
USER: {
type: 'credential',
domain: 'https://example.com',
example: '11223344-5566-7788-9900-112233445566'
}
},
proxy_setting: '<string>',
proxy_value: '<string>',
enable_popup_handling: true,
enable_action_timing_recovery: true,
enable_xpath_recovery: true,
enable_node_description_enrichment: true,
enable_error_code_generation: true,
enable_service_unavailable_recovery: true,
enable_incorrect_form_input_recovery: true,
enable_password_update_recovery: true,
enable_tfa_setup_recovery: true,
enable_network_listener: true,
skip_udp_proxying: true,
origin_catalog_workflow_version_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
origin_base_version_number: 123
})
};

fetch('https://api.cloudcruise.com/workflows/{workflow_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cloudcruise.com/workflows/{workflow_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'nodes' => [
[
'id' => '<string>',
'name' => '<string>',
'parameters' => [

],
'description' => '<string>'
]
],
'edges' => [

],
'input_schema' => [
'type' => 'object',
'properties' => [
'SEARCH_TERM' => [
'type' => [
'string',
'null'
]
]
],
'required' => [
'SEARCH_TERM'
]
],
'output_schema' => [
'type' => 'object',
'properties' => [

]
],
'max_retries' => 0,
'description' => '<string>',
'version_note' => 'Updated login selectors',
'use_native_actions' => true,
'video_record_session' => true,
'extract_network_urls' => [
'<string>'
],
'encrypted_keys' => [
'<string>'
],
'popup_xpaths' => [
'<string>'
],
'vault_schema' => [
'USER' => [
'type' => 'credential',
'domain' => 'https://example.com',
'example' => '11223344-5566-7788-9900-112233445566'
]
],
'proxy_setting' => '<string>',
'proxy_value' => '<string>',
'enable_popup_handling' => true,
'enable_action_timing_recovery' => true,
'enable_xpath_recovery' => true,
'enable_node_description_enrichment' => true,
'enable_error_code_generation' => true,
'enable_service_unavailable_recovery' => true,
'enable_incorrect_form_input_recovery' => true,
'enable_password_update_recovery' => true,
'enable_tfa_setup_recovery' => true,
'enable_network_listener' => true,
'skip_udp_proxying' => true,
'origin_catalog_workflow_version_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'origin_base_version_number' => 123
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"cc-key: <api-key>"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

import (
"fmt"
"strings"
"net/http"
"io"
)

func main() {

url := "https://api.cloudcruise.com/workflows/{workflow_id}"

payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"nodes\": [\n {\n \"id\": \"<string>\",\n \"name\": \"<string>\",\n \"parameters\": {},\n \"description\": \"<string>\"\n }\n ],\n \"edges\": {},\n \"input_schema\": {\n \"type\": \"object\",\n \"properties\": {\n \"SEARCH_TERM\": {\n \"type\": [\n \"string\",\n \"null\"\n ]\n }\n },\n \"required\": [\n \"SEARCH_TERM\"\n ]\n },\n \"output_schema\": {\n \"type\": \"object\",\n \"properties\": {}\n },\n \"max_retries\": 0,\n \"description\": \"<string>\",\n \"version_note\": \"Updated login selectors\",\n \"use_native_actions\": true,\n \"video_record_session\": true,\n \"extract_network_urls\": [\n \"<string>\"\n ],\n \"encrypted_keys\": [\n \"<string>\"\n ],\n \"popup_xpaths\": [\n \"<string>\"\n ],\n \"vault_schema\": {\n \"USER\": {\n \"type\": \"credential\",\n \"domain\": \"https://example.com\",\n \"example\": \"11223344-5566-7788-9900-112233445566\"\n }\n },\n \"proxy_setting\": \"<string>\",\n \"proxy_value\": \"<string>\",\n \"enable_popup_handling\": true,\n \"enable_action_timing_recovery\": true,\n \"enable_xpath_recovery\": true,\n \"enable_node_description_enrichment\": true,\n \"enable_error_code_generation\": true,\n \"enable_service_unavailable_recovery\": true,\n \"enable_incorrect_form_input_recovery\": true,\n \"enable_password_update_recovery\": true,\n \"enable_tfa_setup_recovery\": true,\n \"enable_network_listener\": true,\n \"skip_udp_proxying\": true,\n \"origin_catalog_workflow_version_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"origin_base_version_number\": 123\n}")

req, _ := http.NewRequest("PUT", url, payload)

req.Header.Add("cc-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.put("https://api.cloudcruise.com/workflows/{workflow_id}")
.header("cc-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"nodes\": [\n {\n \"id\": \"<string>\",\n \"name\": \"<string>\",\n \"parameters\": {},\n \"description\": \"<string>\"\n }\n ],\n \"edges\": {},\n \"input_schema\": {\n \"type\": \"object\",\n \"properties\": {\n \"SEARCH_TERM\": {\n \"type\": [\n \"string\",\n \"null\"\n ]\n }\n },\n \"required\": [\n \"SEARCH_TERM\"\n ]\n },\n \"output_schema\": {\n \"type\": \"object\",\n \"properties\": {}\n },\n \"max_retries\": 0,\n \"description\": \"<string>\",\n \"version_note\": \"Updated login selectors\",\n \"use_native_actions\": true,\n \"video_record_session\": true,\n \"extract_network_urls\": [\n \"<string>\"\n ],\n \"encrypted_keys\": [\n \"<string>\"\n ],\n \"popup_xpaths\": [\n \"<string>\"\n ],\n \"vault_schema\": {\n \"USER\": {\n \"type\": \"credential\",\n \"domain\": \"https://example.com\",\n \"example\": \"11223344-5566-7788-9900-112233445566\"\n }\n },\n \"proxy_setting\": \"<string>\",\n \"proxy_value\": \"<string>\",\n \"enable_popup_handling\": true,\n \"enable_action_timing_recovery\": true,\n \"enable_xpath_recovery\": true,\n \"enable_node_description_enrichment\": true,\n \"enable_error_code_generation\": true,\n \"enable_service_unavailable_recovery\": true,\n \"enable_incorrect_form_input_recovery\": true,\n \"enable_password_update_recovery\": true,\n \"enable_tfa_setup_recovery\": true,\n \"enable_network_listener\": true,\n \"skip_udp_proxying\": true,\n \"origin_catalog_workflow_version_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"origin_base_version_number\": 123\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.cloudcruise.com/workflows/{workflow_id}")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Put.new(url)
request["cc-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"nodes\": [\n {\n \"id\": \"<string>\",\n \"name\": \"<string>\",\n \"parameters\": {},\n \"description\": \"<string>\"\n }\n ],\n \"edges\": {},\n \"input_schema\": {\n \"type\": \"object\",\n \"properties\": {\n \"SEARCH_TERM\": {\n \"type\": [\n \"string\",\n \"null\"\n ]\n }\n },\n \"required\": [\n \"SEARCH_TERM\"\n ]\n },\n \"output_schema\": {\n \"type\": \"object\",\n \"properties\": {}\n },\n \"max_retries\": 0,\n \"description\": \"<string>\",\n \"version_note\": \"Updated login selectors\",\n \"use_native_actions\": true,\n \"video_record_session\": true,\n \"extract_network_urls\": [\n \"<string>\"\n ],\n \"encrypted_keys\": [\n \"<string>\"\n ],\n \"popup_xpaths\": [\n \"<string>\"\n ],\n \"vault_schema\": {\n \"USER\": {\n \"type\": \"credential\",\n \"domain\": \"https://example.com\",\n \"example\": \"11223344-5566-7788-9900-112233445566\"\n }\n },\n \"proxy_setting\": \"<string>\",\n \"proxy_value\": \"<string>\",\n \"enable_popup_handling\": true,\n \"enable_action_timing_recovery\": true,\n \"enable_xpath_recovery\": true,\n \"enable_node_description_enrichment\": true,\n \"enable_error_code_generation\": true,\n \"enable_service_unavailable_recovery\": true,\n \"enable_incorrect_form_input_recovery\": true,\n \"enable_password_update_recovery\": true,\n \"enable_tfa_setup_recovery\": true,\n \"enable_network_listener\": true,\n \"skip_udp_proxying\": true,\n \"origin_catalog_workflow_version_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"origin_base_version_number\": 123\n}"

response = http.request(request)
puts response.read_body
{
  "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "name": "<string>",
  "created_at": "2023-11-07T05:31:56Z",
  "updated_at": "2023-11-07T05:31:56Z",
  "workspace_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "created_by": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "nodes": [
    {}
  ],
  "edges": {},
  "description": "<string>",
  "version_number": 123,
  "version_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "input_schema": {},
  "vault_schema": {},
  "enable_popup_handling": true,
  "enable_xpath_recovery": true,
  "enable_node_description_enrichment": true,
  "enable_error_code_generation": true,
  "enable_service_unavailable_recovery": true,
  "enable_incorrect_form_input_recovery": true,
  "enable_password_update_recovery": true,
  "enable_tfa_setup_recovery": true,
  "enable_action_timing_recovery": true,
  "origin_catalog_workflow_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "origin_catalog_version_number": 123,
  "origin_catalog_workflow_version_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "origin_base_version_number": 123,
  "track_updates_from_catalog": true,
  "enable_network_listener": true,
  "skip_udp_proxying": true
}

Authorizations

cc-key
string
header
required

API key-based authentication. Provide your CloudCruise API key in the cc-key header.

Path Parameters

workflow_id
string<uuid>
required

The ID of the workflow to update

Body

application/json

Payload for updating an existing workflow via PUT. The workflow ID is provided in the URL path. The recommended approach is to first fetch the current workflow via GET /workflows/{workflow_id}, modify the desired fields, and then submit the full payload here.

name
string
required

Display name of the workflow

nodes
object[]
required

Array of workflow step nodes. Each node represents an action in the workflow (e.g., click, type text, navigate, extract data). Pass an empty array [] to clear all nodes.

edges
object
required

Map of edges connecting workflow nodes. Keys are source node IDs, values define the outgoing connections. Pass an empty object {} to clear all edges.

input_schema
object
required

JSON Schema defining the workflow's input variables

Example:
{
"type": "object",
"properties": {
"SEARCH_TERM": { "type": ["string", "null"] }
},
"required": ["SEARCH_TERM"]
}
output_schema
object
required

JSON Schema defining the workflow's output variables

Example:
{ "type": "object", "properties": {} }
max_retries
integer
required

Maximum number of retry attempts for failed workflow steps

Example:

0

description
string | null

Optional description of the workflow

version_note
string

Optional note describing what changed in this version

Example:

"Updated login selectors"

use_native_actions
boolean | null

Whether to use native browser actions instead of simulated events

video_record_session
boolean | null

Whether to record a video of the workflow execution

extract_network_urls
string[] | null

URL patterns to extract from network traffic during execution

encrypted_keys
string[] | null

References to encrypted vault keys used by this workflow

popup_xpaths
string[] | null

XPath selectors for popups that should be automatically dismissed

vault_schema
object | null

Schema defining vault credentials required by this workflow

Example:
{
"USER": {
"type": "credential",
"domain": "https://example.com",
"example": "11223344-5566-7788-9900-112233445566"
}
}
proxy_setting
string | null

Proxy configuration setting

proxy_value
string | null

Proxy value (e.g., proxy URL or region)

enable_popup_handling
boolean

Whether popup handling is enabled

enable_action_timing_recovery
boolean

Whether action timing recovery is enabled

enable_xpath_recovery
boolean

Whether XPath recovery is enabled

enable_node_description_enrichment
boolean

Whether node descriptions are auto-enriched for reliability improvements

enable_error_code_generation
boolean

Whether error code generation is enabled

enable_service_unavailable_recovery
boolean

Whether service unavailable recovery is enabled

enable_incorrect_form_input_recovery
boolean

Whether incorrect form input recovery is enabled

enable_password_update_recovery
boolean

Whether password update recovery is enabled. When a site forces a password change, the Maintenance Agent classifies the error and sends a notification.

enable_tfa_setup_recovery
boolean

Whether automatic TFA setup recovery is enabled. When a site requires two-factor authentication setup during login, the Maintenance Agent can autonomously complete the enrollment and update the vault credential.

enable_network_listener
boolean

Whether the network listener is enabled

skip_udp_proxying
boolean

Whether UDP proxying is skipped during workflow execution

origin_catalog_workflow_version_id
string<uuid> | null

Specific origin catalog workflow version ID used as the base

origin_base_version_number
integer | null

Base version number used when deriving from a catalog workflow

Response

Workflow updated successfully. Returns the full workflow with the new version number.

Full workflow definition including nodes and edges

id
string<uuid>
required

Unique identifier for the workflow

name
string
required

Name of the workflow

created_at
string<date-time>
required

Timestamp when the workflow was created

updated_at
string<date-time>
required

Timestamp when the workflow was last updated

workspace_id
string<uuid>
required

ID of the workspace this workflow belongs to

created_by
string<uuid>
required

ID of the user who created the workflow

nodes
object[]
required

Array of workflow step nodes

edges
object
required

Map of edges connecting workflow nodes

description
string | null

Description of the workflow

version_number
integer

Current version number of the workflow

version_id
string<uuid>

ID of the current workflow version

input_schema
object | null

JSON schema defining the workflow's input variables

vault_schema
object | null

Schema defining vault credentials and their configuration

enable_popup_handling
boolean

Whether popup handling is enabled for this workflow

enable_xpath_recovery
boolean

Whether XPath recovery is enabled for this workflow

enable_node_description_enrichment
boolean

Whether node descriptions are auto-enriched for reliability improvements

enable_error_code_generation
boolean

Whether error code generation is enabled for this workflow

enable_service_unavailable_recovery
boolean

Whether service unavailable recovery is enabled for this workflow

enable_incorrect_form_input_recovery
boolean

Whether incorrect form input recovery is enabled

enable_password_update_recovery
boolean

Whether password update recovery is enabled. When a site forces a password change, the Maintenance Agent classifies the error and sends a notification.

enable_tfa_setup_recovery
boolean

Whether automatic TFA setup recovery is enabled. When a site requires two-factor authentication setup during login, the Maintenance Agent can autonomously complete the enrollment and update the vault credential.

enable_action_timing_recovery
boolean

Whether action timing recovery is enabled

origin_catalog_workflow_id
string<uuid> | null

ID of the catalog workflow this was forked from (if applicable)

origin_catalog_version_number
integer | null

Version number of the catalog workflow this was forked from

origin_catalog_workflow_version_id
string<uuid> | null

Specific origin catalog workflow version ID used as the base

origin_base_version_number
integer | null

Base version number used when deriving from a catalog workflow

track_updates_from_catalog
boolean

Whether to track updates from the origin catalog workflow

enable_network_listener
boolean

Whether network listener capture is enabled for this workflow version

skip_udp_proxying
boolean

Whether UDP proxying is skipped for this workflow version