curl --request GET \
--url https://api.sidenet.ai/v1/workflows/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.sidenet.ai/v1/workflows/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.sidenet.ai/v1/workflows/{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.sidenet.ai/v1/workflows/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.sidenet.ai/v1/workflows/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.sidenet.ai/v1/workflows/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sidenet.ai/v1/workflows/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"workflow": {
"id": "4c2f9e18-7a63-4d05-b1e8-93a7c0f2d641",
"org_id": "2b9d7c31-8e4f-4a2b-9d61-77c0a3f5e812",
"name": "Refund triage",
"description": "Classifies a refund request and fetches the order",
"active_version_id": "e81b4a72-0c95-4f38-a6d2-5b17e9c4038f",
"owner_kind": "org",
"owner_external_id": null,
"activeVersionNumber": 2,
"latestPublishedVersionNumber": 2,
"draftDirty": false
},
"version": {
"id": "e81b4a72-0c95-4f38-a6d2-5b17e9c4038f",
"workflow_id": "4c2f9e18-7a63-4d05-b1e8-93a7c0f2d641",
"version_number": 2,
"rev": 1,
"definition": {
"steps": {
"classify": {
"kind": "agent",
"config": {
"prompt": "Classify the request.",
"model_slug": "openai/gpt-4o-mini"
},
"prompt": "classify {{ $.input.text }}"
}
},
"flow": [
{
"type": "step",
"ref": "classify"
}
],
"output_text": "Classified as {{ $.steps.classify.category }}."
},
"input_schema": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
}
},
"output_schema": null,
"change_message": "Tighten the classifier prompt",
"created_at": "2026-08-04T10:22:05.117Z",
"updated_at": "2026-08-04T10:22:05.117Z"
}
}Get workflow
Returns the workflow and exactly ONE of its versions. Which one is up to version; by default it is the active (published) version that runs, falling back to the draft when nothing has been activated yet. The workflow object always reports activeVersionNumber, latestPublishedVersionNumber and draftDirty, so a client can tell what else exists — unpublished edits, or a newer published version than the one that runs — and ask for it by number in a second call.
curl --request GET \
--url https://api.sidenet.ai/v1/workflows/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.sidenet.ai/v1/workflows/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.sidenet.ai/v1/workflows/{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.sidenet.ai/v1/workflows/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.sidenet.ai/v1/workflows/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.sidenet.ai/v1/workflows/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sidenet.ai/v1/workflows/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"workflow": {
"id": "4c2f9e18-7a63-4d05-b1e8-93a7c0f2d641",
"org_id": "2b9d7c31-8e4f-4a2b-9d61-77c0a3f5e812",
"name": "Refund triage",
"description": "Classifies a refund request and fetches the order",
"active_version_id": "e81b4a72-0c95-4f38-a6d2-5b17e9c4038f",
"owner_kind": "org",
"owner_external_id": null,
"activeVersionNumber": 2,
"latestPublishedVersionNumber": 2,
"draftDirty": false
},
"version": {
"id": "e81b4a72-0c95-4f38-a6d2-5b17e9c4038f",
"workflow_id": "4c2f9e18-7a63-4d05-b1e8-93a7c0f2d641",
"version_number": 2,
"rev": 1,
"definition": {
"steps": {
"classify": {
"kind": "agent",
"config": {
"prompt": "Classify the request.",
"model_slug": "openai/gpt-4o-mini"
},
"prompt": "classify {{ $.input.text }}"
}
},
"flow": [
{
"type": "step",
"ref": "classify"
}
],
"output_text": "Classified as {{ $.steps.classify.category }}."
},
"input_schema": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
}
},
"output_schema": null,
"change_message": "Tighten the classifier prompt",
"created_at": "2026-08-04T10:22:05.117Z",
"updated_at": "2026-08-04T10:22:05.117Z"
}
}Authorizations
Organization API key, generated in studio.sidenet.ai. Backend only — never in a browser.
Path Parameters
"4c2f9e18-7a63-4d05-b1e8-93a7c0f2d641"
Query Parameters
Which version of the workflow to return. Takes any of: a version number (3, or v3); 0 or draft for the unpublished draft; latest for the newest published version; active for the one serving traffic; or the version row's uuid. Defaults to active, falling back to the draft when nothing has been activated yet.
"active"
Response
The workflow and the version that was selected
Show child attributes
Show child attributes
The one version this call selected, in full — the version that runs by default, or whatever version named. version_number says which it is (0 is the draft). Null only for a workflow with neither an active version nor a draft.
Show child attributes
Show child attributes