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": {},
"max_retries": 0,
"description": "<string>",
"version_note": "Updated login selectors",
"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,
"allow_requeue": true,
"deny_requeue_past_dry_run_marker": true,
"enable_network_listener": true,
"base_version_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'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": {},
"max_retries": 0,
"description": "<string>",
"version_note": "Updated login selectors",
"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,
"allow_requeue": True,
"deny_requeue_past_dry_run_marker": True,
"enable_network_listener": True,
"base_version_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
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: {},
max_retries: 0,
description: '<string>',
version_note: 'Updated login selectors',
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,
allow_requeue: true,
deny_requeue_past_dry_run_marker: true,
enable_network_listener: true,
base_version_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
})
};
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' => [
],
'max_retries' => 0,
'description' => '<string>',
'version_note' => 'Updated login selectors',
'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,
'allow_requeue' => true,
'deny_requeue_past_dry_run_marker' => true,
'enable_network_listener' => true,
'base_version_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]),
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 \"max_retries\": 0,\n \"description\": \"<string>\",\n \"version_note\": \"Updated login selectors\",\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 \"allow_requeue\": true,\n \"deny_requeue_past_dry_run_marker\": true,\n \"enable_network_listener\": true,\n \"base_version_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\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 \"max_retries\": 0,\n \"description\": \"<string>\",\n \"version_note\": \"Updated login selectors\",\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 \"allow_requeue\": true,\n \"deny_requeue_past_dry_run_marker\": true,\n \"enable_network_listener\": true,\n \"base_version_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\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 \"max_retries\": 0,\n \"description\": \"<string>\",\n \"version_note\": \"Updated login selectors\",\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 \"allow_requeue\": true,\n \"deny_requeue_past_dry_run_marker\": true,\n \"enable_network_listener\": true,\n \"base_version_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"workspace_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_by": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"nodes": [
{}
],
"edges": {},
"description": "<string>",
"updated_at": "2023-11-07T05:31:56Z",
"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,
"allow_requeue": true,
"deny_requeue_past_dry_run_marker": true,
"enable_action_timing_recovery": true,
"enable_network_listener": true
}Update workflow
Updates an existing workflow. The workflow must already exist and belong to the workspace associated with your API key.
This endpoint updates the workflow metadata and creates a new version with the provided nodes, edges, and configuration. If the workflow ID does not match an existing workflow in your workspace, the request will return a 404 error.
Versioning: Every call to this endpoint creates a new workflow version. Versions are immutable and auto-increment. Use GET /workflows/{workflow_id}/versions to list version history, and GET /workflows/{workflow_id}/versions/{version_number} to fetch the full JSON of any prior version (e.g., to inspect, diff, or roll back by re-submitting it via this endpoint).
Typical usage:
GET /workflows/{workflow_id}to fetch the current workflow definition- Modify the
nodes,edges, or other fields as needed PUT /workflows/{workflow_id}with the full updated payload to save a new version
Important: This endpoint requires the full workflow definition. Partial updates are not supported, so you must include all required fields (nodes, edges, schemas) even if they haven’t changed.
Read-only fields: A body returned by GET /workflows/{workflow_id} or GET /workflows/{workflow_id}/export is accepted unchanged. Read-only fields are never written:
- Identity fields
id,workflow_id,workspace_id: may be omitted ornull. If sent, they must equal the saved values. Otherwise409 READ_ONLY_FIELD_CONFLICT, withfieldslisting each differing field and itssavedandreceivedvalue. - Snapshot fields
version_id,version_number,created_at,created_by,updated_at,conversation_id: ignored. They describe the version you read, not the one you save. error_codes: ignored if they equal the workflow’s current error codes, otherwise409 READ_ONLY_FIELD_CONFLICT. This endpoint does not edit error codes.
Concurrent edits: Send base_version_id (the version_id you read) to reject the save with 409 WORKFLOW_VERSION_CONFLICT if someone saved a newer version since. Without it, the save always applies on top of the latest version. Two saves racing for the same version number also return 409 WORKFLOW_VERSION_CONFLICT for the loser.
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": {},
"max_retries": 0,
"description": "<string>",
"version_note": "Updated login selectors",
"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,
"allow_requeue": true,
"deny_requeue_past_dry_run_marker": true,
"enable_network_listener": true,
"base_version_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'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": {},
"max_retries": 0,
"description": "<string>",
"version_note": "Updated login selectors",
"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,
"allow_requeue": True,
"deny_requeue_past_dry_run_marker": True,
"enable_network_listener": True,
"base_version_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
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: {},
max_retries: 0,
description: '<string>',
version_note: 'Updated login selectors',
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,
allow_requeue: true,
deny_requeue_past_dry_run_marker: true,
enable_network_listener: true,
base_version_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
})
};
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' => [
],
'max_retries' => 0,
'description' => '<string>',
'version_note' => 'Updated login selectors',
'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,
'allow_requeue' => true,
'deny_requeue_past_dry_run_marker' => true,
'enable_network_listener' => true,
'base_version_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]),
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 \"max_retries\": 0,\n \"description\": \"<string>\",\n \"version_note\": \"Updated login selectors\",\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 \"allow_requeue\": true,\n \"deny_requeue_past_dry_run_marker\": true,\n \"enable_network_listener\": true,\n \"base_version_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\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 \"max_retries\": 0,\n \"description\": \"<string>\",\n \"version_note\": \"Updated login selectors\",\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 \"allow_requeue\": true,\n \"deny_requeue_past_dry_run_marker\": true,\n \"enable_network_listener\": true,\n \"base_version_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\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 \"max_retries\": 0,\n \"description\": \"<string>\",\n \"version_note\": \"Updated login selectors\",\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 \"allow_requeue\": true,\n \"deny_requeue_past_dry_run_marker\": true,\n \"enable_network_listener\": true,\n \"base_version_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"workspace_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_by": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"nodes": [
{}
],
"edges": {},
"description": "<string>",
"updated_at": "2023-11-07T05:31:56Z",
"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,
"allow_requeue": true,
"deny_requeue_past_dry_run_marker": true,
"enable_action_timing_recovery": true,
"enable_network_listener": true
}Authorizations
API key-based authentication. Provide your CloudCruise API key in the cc-key header.
Path Parameters
The ID of the workflow to update
Body
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.
Display name of the workflow
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.
Show child attributes
Show child attributes
Map of edges connecting workflow nodes. Keys are source node IDs, values define the outgoing
connections. Pass an empty object {} to clear all edges.
Show child attributes
Show child attributes
JSON Schema defining the workflow's input variables
{
"type": "object",
"properties": {
"SEARCH_TERM": { "type": ["string", "null"] }
},
"required": ["SEARCH_TERM"]
}
Selects which fields the run returns in its result and webhook payload. Only the fields named under properties are returned; pass an empty object {} to return the whole run context instead, excluding the run's inputs. A schema that names no properties - {"type": "object", "properties": {}} - is stored and applied as {}.
{}
Maximum number of retry attempts for failed workflow steps
0
Optional description of the workflow
Optional note describing what changed in this version
"Updated login selectors"
URL patterns to extract from network traffic during execution
References to encrypted vault keys used by this workflow
XPath selectors for popups that should be automatically dismissed
Schema defining vault credentials required by this workflow
Show child attributes
Show child attributes
{
"USER": {
"type": "credential",
"domain": "https://example.com",
"example": "11223344-5566-7788-9900-112233445566"
}
}
Proxy configuration setting
Proxy value (e.g., proxy URL or region)
Whether popup handling is enabled
Whether action timing recovery is enabled
Whether XPath recovery is enabled
Whether node descriptions are auto-enriched for reliability improvements
Whether error code generation is enabled
Whether service unavailable recovery is enabled
Whether incorrect form input recovery is enabled
Whether password update recovery is enabled. When a site forces a password change, the Maintenance Agent classifies the error and sends a notification.
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.
Whether automatic retries are enabled for this workflow. When false, the workflow will not be automatically retried on transient failures regardless of other recovery settings.
When the workflow has a dry-run marker (end_here_on_dry_run), restricts automatic retries to failures that occur before the marker. Only effective when allow_requeue is true. Defaults to true.
Whether the network listener is enabled
The version_id your edit is based on. If a newer version exists, the save is rejected with
409 WORKFLOW_VERSION_CONFLICT. Omit to save on top of the latest version.
Response
Workflow updated successfully. Returns the full workflow with the new version number.
Full workflow definition including nodes and edges
Unique identifier for the workflow
Name of the workflow
Timestamp when the workflow was created
ID of the workspace this workflow belongs to
ID of the user who created the workflow
Array of workflow step nodes
Map of edges connecting workflow nodes
Show child attributes
Show child attributes
Description of the workflow
Timestamp when the workflow was last updated
Current version number of the workflow
ID of the current workflow version
JSON schema defining the workflow's input variables
Schema defining vault credentials and their configuration
Whether popup handling is enabled for this workflow
Whether XPath recovery is enabled for this workflow
Whether node descriptions are auto-enriched for reliability improvements
Whether error code generation is enabled for this workflow
Whether service unavailable recovery is enabled for this workflow
Whether incorrect form input recovery is enabled
Whether password update recovery is enabled. When a site forces a password change, the Maintenance Agent classifies the error and sends a notification.
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.
Whether automatic retries are enabled for this workflow. When false, the workflow will not be automatically retried on transient failures regardless of other recovery settings.
When the workflow has a dry-run marker (end_here_on_dry_run), restricts automatic retries to failures that occur before the marker. Only effective when allow_requeue is true. Defaults to true.
Whether action timing recovery is enabled
Whether network listener capture is enabled for this workflow version
Was this page helpful?

