Get Workflow Run Output
curl --request GET \
--url https://api.raydocs.com/workspaces/{workspaceId}/workflows/{workflowId}/runs/{runId}/output \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.raydocs.com/workspaces/{workspaceId}/workflows/{workflowId}/runs/{runId}/output"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.raydocs.com/workspaces/{workspaceId}/workflows/{workflowId}/runs/{runId}/output', 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.raydocs.com/workspaces/{workspaceId}/workflows/{workflowId}/runs/{runId}/output",
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.raydocs.com/workspaces/{workspaceId}/workflows/{workflowId}/runs/{runId}/output"
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.raydocs.com/workspaces/{workspaceId}/workflows/{workflowId}/runs/{runId}/output")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.raydocs.com/workspaces/{workspaceId}/workflows/{workflowId}/runs/{runId}/output")
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{}Workflows
Get Workflow Run Output
Read the public output of a workflow run after it completes.
GET
/
workspaces
/
{workspaceId}
/
workflows
/
{workflowId}
/
runs
/
{runId}
/
output
Get Workflow Run Output
curl --request GET \
--url https://api.raydocs.com/workspaces/{workspaceId}/workflows/{workflowId}/runs/{runId}/output \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.raydocs.com/workspaces/{workspaceId}/workflows/{workflowId}/runs/{runId}/output"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.raydocs.com/workspaces/{workspaceId}/workflows/{workflowId}/runs/{runId}/output', 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.raydocs.com/workspaces/{workspaceId}/workflows/{workflowId}/runs/{runId}/output",
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.raydocs.com/workspaces/{workspaceId}/workflows/{workflowId}/runs/{runId}/output"
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.raydocs.com/workspaces/{workspaceId}/workflows/{workflowId}/runs/{runId}/output")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.raydocs.com/workspaces/{workspaceId}/workflows/{workflowId}/runs/{runId}/output")
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{}Retrieve the final public output for one workflow run.
The endpoint can return any JSON value defined by the workflow. The synchronization contract below requires an object containing a
Use
Use
documents array.
Authentication and scope
Requiresworkflow-runs-output-read. The token owner must be an administrator of the workflow workspace. A synchronization token also needs workspaces-read and workflows-read for discovery. Add documents-read when the workflow exposes persisted documentRef outputs.
Synchronizable output
Expose a finaldocuments array. Each entry can be a persisted documentRef or a temporary workflow fileRef augmented with a SHA-256 checksum.
{
"documents": [
{
"type": "documentRef",
"documentId": "880e8400-e29b-41d4-a716-446655440000",
"workspaceId": "12",
"filename": "export.zip",
"mime": "application/zip",
"size": 12345,
"sha256": "6de7f6f5894c9f3fd1f6f8a4d1b3115d0d9b4b19d7a8a661f9fe90f9c2d80c3b",
"source": {
"type": "workflow_file",
"url": null
},
"createdAt": "2026-07-21T12:34:55.000000Z"
}
]
}
documentId with the workspace document URL endpoint. Do not use the workflow run file endpoint for these persisted documents; that route serves temporary runtime fileRef values.
For a temporary fileRef, expose its normal file-ref fields plus sha256:
{
"documents": [
{
"type": "fileRef",
"id": "5ef9bd1f-25d5-4ff2-a2c4-a31039aae174",
"filename": "cdj-connect-lot.zip",
"mime": "application/zip",
"size": 12345,
"sha256": "6de7f6f5894c9f3fd1f6f8a4d1b3115d0d9b4b19d7a8a661f9fe90f9c2d80c3b",
"expiresAt": "2026-07-28T12:34:55.000000Z"
}
]
}
id with GET /workspaces/{workspaceId}/workflows/{workflowId}/runs/{runId}/file?file_id={id}. A fileRef is temporary, so it is suitable only for prompt synchronization. The consumer must verify size and sha256 before publishing the file.
Treat a missing documents array, a non-array value, an unsupported entry type, or an entry missing its type-specific identifier, filename, size, or sha256 as an invalid page. Do not advance the page cursor until the output has been validated and recorded for retry.Authorizations
Response
object | null | any[] | string | number | boolean
Public workflow output
The response is of type object.
