curl --request GET \
--url https://api.cloudcruise.com/workflows/{workflow_id}/versions/{version} \
--header 'cc-key: <api-key>'import requests
url = "https://api.cloudcruise.com/workflows/{workflow_id}/versions/{version}"
headers = {"cc-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'cc-key': '<api-key>'}};
fetch('https://api.cloudcruise.com/workflows/{workflow_id}/versions/{version}', 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}/versions/{version}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.cloudcruise.com/workflows/{workflow_id}/versions/{version}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("cc-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.cloudcruise.com/workflows/{workflow_id}/versions/{version}")
.header("cc-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cloudcruise.com/workflows/{workflow_id}/versions/{version}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["cc-key"] = '<api-key>'
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_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"version": "2.1.0",
"major": 123,
"minor": 123,
"patch": 123,
"bump_type": "major",
"branch_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"default_branch_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"parent_version_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"merge_parent_version_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"input_schema": {},
"vault_schema": {},
"enable_popup_handling": true,
"enable_xpath_recovery": true,
"enable_node_description_enrichment": true,
"run_window": {
"time_zone": "America/Chicago",
"regular_hours": [
{
"active_start_day": "MONDAY",
"active_start_time": {
"hours": 11,
"minutes": 29
},
"active_end_day": "MONDAY",
"active_end_time": {
"hours": 11,
"minutes": 29
}
}
],
"special_hours": [
{
"active": true,
"label": "Thanksgiving",
"start_date": {
"year": 123,
"month": 6,
"day": 16
},
"end_date": {
"year": 123,
"month": 6,
"day": 16
},
"recurrence": "FREQ=MONTHLY;BYDAY=1SA",
"recurrence_start": {
"year": 123,
"month": 6,
"day": 16
},
"active_start_time": {
"hours": 11,
"minutes": 29
},
"active_end_time": {
"hours": 11,
"minutes": 29
}
}
]
},
"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,
"manual_captcha_solve": true,
"allow_requeue": true,
"deny_requeue_past_dry_run_marker": true,
"enable_action_timing_recovery": true,
"enable_network_listener": true
}Get workflow version
Retrieves the full workflow definition as it existed at a specific version, including nodes, edges, and configuration.
The response shape is identical to GET /workflows/{workflow_id} (same fields including name, description, recovery flags, etc.), so you can fetch a prior version, modify it, and submit it via PUT /workflows/{workflow_id} to roll back or branch from history.
version is an exact version (1.2.3), a semver range (^1.2.0, ~1.2.3, 1.x, >=1.2.3 <2.0.0, URL-encoded) resolved to the highest matching version, or a bare integer N, kept for older integrations, which resolves to the highest N.x.x. Workflows versioned before semantic versions were introduced had their version number N become N.0.0.
Use GET /workflows/{workflow_id}/versions to enumerate available versions.
curl --request GET \
--url https://api.cloudcruise.com/workflows/{workflow_id}/versions/{version} \
--header 'cc-key: <api-key>'import requests
url = "https://api.cloudcruise.com/workflows/{workflow_id}/versions/{version}"
headers = {"cc-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'cc-key': '<api-key>'}};
fetch('https://api.cloudcruise.com/workflows/{workflow_id}/versions/{version}', 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}/versions/{version}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.cloudcruise.com/workflows/{workflow_id}/versions/{version}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("cc-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.cloudcruise.com/workflows/{workflow_id}/versions/{version}")
.header("cc-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cloudcruise.com/workflows/{workflow_id}/versions/{version}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["cc-key"] = '<api-key>'
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_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"version": "2.1.0",
"major": 123,
"minor": 123,
"patch": 123,
"bump_type": "major",
"branch_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"default_branch_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"parent_version_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"merge_parent_version_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"input_schema": {},
"vault_schema": {},
"enable_popup_handling": true,
"enable_xpath_recovery": true,
"enable_node_description_enrichment": true,
"run_window": {
"time_zone": "America/Chicago",
"regular_hours": [
{
"active_start_day": "MONDAY",
"active_start_time": {
"hours": 11,
"minutes": 29
},
"active_end_day": "MONDAY",
"active_end_time": {
"hours": 11,
"minutes": 29
}
}
],
"special_hours": [
{
"active": true,
"label": "Thanksgiving",
"start_date": {
"year": 123,
"month": 6,
"day": 16
},
"end_date": {
"year": 123,
"month": 6,
"day": 16
},
"recurrence": "FREQ=MONTHLY;BYDAY=1SA",
"recurrence_start": {
"year": 123,
"month": 6,
"day": 16
},
"active_start_time": {
"hours": 11,
"minutes": 29
},
"active_end_time": {
"hours": 11,
"minutes": 29
}
}
]
},
"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,
"manual_captcha_solve": 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.
Headers
CloudCruise API key for authentication
Path Parameters
The ID of the workflow
An exact version, a semver range, or a bare integer major (see above)
Response
Successful operation
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
ID of the current workflow version
Semantic version (major.minor.patch) of this version
"2.1.0"
Major part of version
Minor part of version
Patch part of version
How version was derived from its parent, or null when it was chosen explicitly or has no parent
major, minor, patch Branch this version was saved to
The workflow's default branch, used by runs and reads that name no branch
The version this one was saved on top of
For a merge, the head of the branch that was merged in
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
Run window for the workflow. Leave it out on save to keep the current one, send null to remove it. See Run Window.
Show child attributes
Show child attributes
Whether error code generation is enabled for this workflow
Whether service unavailable recovery is enabled for this workflow
Deprecated, no effect
Whether password update recovery is enabled. When a site forces a password change, the Maintenance Agent classifies the error and sends a notification.
Deprecated, no effect
When true, captchas are solved only at CAPTCHA nodes. When false, the automatic solver also runs before each step that acts on the page. A new workflow created without this field gets true. Existing workflows keep their stored value.
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?

