Get Run Status
curl --request GET \
--url https://api.slatehq.ai/workflow-service/api/public/v1/workflow-runs/{runId} \
--header 'Authorization: <authorization>'import requests
url = "https://api.slatehq.ai/workflow-service/api/public/v1/workflow-runs/{runId}"
headers = {"Authorization": "<authorization>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<authorization>'}};
fetch('https://api.slatehq.ai/workflow-service/api/public/v1/workflow-runs/{runId}', 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.slatehq.ai/workflow-service/api/public/v1/workflow-runs/{runId}",
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: <authorization>"
],
]);
$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.slatehq.ai/workflow-service/api/public/v1/workflow-runs/{runId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<authorization>")
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.slatehq.ai/workflow-service/api/public/v1/workflow-runs/{runId}")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.slatehq.ai/workflow-service/api/public/v1/workflow-runs/{runId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body{
"run_id": "<string>",
"workflow_id": "<string>",
"status": "<string>",
"workspace_id": 123,
"workflow_execution_id": "<string>",
"output": {},
"error": {
"code": "<string>",
"message": "<string>"
},
"created_at": "<string>",
"updated_at": "<string>",
"completed_at": "<string>",
"metadata": {}
}Workflows
Get Run Status
Retrieve the current status, output, and metadata of a workflow run.
GET
/
workflow-service
/
api
/
public
/
v1
/
workflow-runs
/
{runId}
Get Run Status
curl --request GET \
--url https://api.slatehq.ai/workflow-service/api/public/v1/workflow-runs/{runId} \
--header 'Authorization: <authorization>'import requests
url = "https://api.slatehq.ai/workflow-service/api/public/v1/workflow-runs/{runId}"
headers = {"Authorization": "<authorization>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<authorization>'}};
fetch('https://api.slatehq.ai/workflow-service/api/public/v1/workflow-runs/{runId}', 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.slatehq.ai/workflow-service/api/public/v1/workflow-runs/{runId}",
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: <authorization>"
],
]);
$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.slatehq.ai/workflow-service/api/public/v1/workflow-runs/{runId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<authorization>")
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.slatehq.ai/workflow-service/api/public/v1/workflow-runs/{runId}")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.slatehq.ai/workflow-service/api/public/v1/workflow-runs/{runId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body{
"run_id": "<string>",
"workflow_id": "<string>",
"status": "<string>",
"workspace_id": 123,
"workflow_execution_id": "<string>",
"output": {},
"error": {
"code": "<string>",
"message": "<string>"
},
"created_at": "<string>",
"updated_at": "<string>",
"completed_at": "<string>",
"metadata": {}
}Returns the current state of a workflow run. Use this endpoint to poll for progress after creating a run.
Parameters
string
required
Unique identifier for the workflow run. Returned as
run_id when you create a run.string
required
Bearer token. Format:
Bearer slat_<your-token>.Response
Returns200 OK with the full run details.
string
required
Unique identifier for the run.
string
required
The workflow that this run belongs to.
string
required
Current status of the run. One of:
QUEUED, STARTING, RUNNING, COMPLETED, FAILED, CANCELED.number
Workspace ID assigned to the run. May be
null if the run has not started processing.string
Internal execution ID. May be
null if the run has not started processing.object
Workflow output data. Available when status is
COMPLETED. The structure depends on the workflow.object
string
required
Timestamp when the run was created. ISO 8601 format.
string
required
Timestamp of the last status change. ISO 8601 format.
string
Timestamp when the run reached a terminal status (
COMPLETED, FAILED, or CANCELED). null while the run is in progress.object
Custom metadata attached when the run was created.
null if none was provided.Example
curl -s "https://api.slatehq.ai/workflow-service/api/public/v1/workflow-runs/8c5e0f8a-2b35-4c1f-9b6a-9d0a6b3c1f4e" \
-H "Authorization: Bearer slat_YOUR_TOKEN"
import requests
response = requests.get(
"https://api.slatehq.ai/workflow-service/api/public/v1/workflow-runs/8c5e0f8a-2b35-4c1f-9b6a-9d0a6b3c1f4e",
headers={
"Authorization": "Bearer slat_YOUR_TOKEN",
},
)
run = response.json()
print(run["status"])
const response = await fetch(
"https://api.slatehq.ai/workflow-service/api/public/v1/workflow-runs/8c5e0f8a-2b35-4c1f-9b6a-9d0a6b3c1f4e",
{
headers: {
"Authorization": "Bearer slat_YOUR_TOKEN",
},
}
);
const run = await response.json();
console.log(run.status);
Response (running)
{
"run_id": "8c5e0f8a-2b35-4c1f-9b6a-9d0a6b3c1f4e",
"workflow_id": "wf_abc123",
"status": "RUNNING",
"workspace_id": 4521,
"workflow_execution_id": "exec_7f3a1b2c",
"output": null,
"error": null,
"created_at": "2026-01-27T01:23:45.000Z",
"updated_at": "2026-01-27T01:23:52.000Z",
"completed_at": null,
"metadata": {
"source": "ci-pipeline"
}
}
Response (completed)
{
"run_id": "8c5e0f8a-2b35-4c1f-9b6a-9d0a6b3c1f4e",
"workflow_id": "wf_abc123",
"status": "COMPLETED",
"workspace_id": 4521,
"workflow_execution_id": "exec_7f3a1b2c",
"output": {
"share_url": "https://app.slatehq.ai/share/abc123"
},
"error": null,
"created_at": "2026-01-27T01:23:45.000Z",
"updated_at": "2026-01-27T01:24:30.000Z",
"completed_at": "2026-01-27T01:24:30.000Z",
"metadata": {
"source": "ci-pipeline"
}
}
Response (failed)
{
"run_id": "8c5e0f8a-2b35-4c1f-9b6a-9d0a6b3c1f4e",
"workflow_id": "wf_abc123",
"status": "FAILED",
"workspace_id": 4521,
"workflow_execution_id": "exec_7f3a1b2c",
"output": null,
"error": {
"code": "WORKFLOW_FAILED",
"message": "workflow failed"
},
"created_at": "2026-01-27T01:23:45.000Z",
"updated_at": "2026-01-27T01:24:15.000Z",
"completed_at": "2026-01-27T01:24:15.000Z",
"metadata": {
"source": "ci-pipeline"
}
}
Polling strategy
Poll this endpoint at 5–10 second intervals. Check for terminal statuses (
COMPLETED, FAILED, CANCELED) to know when the run is done.Python
import time
import requests
run_id = "8c5e0f8a-2b35-4c1f-9b6a-9d0a6b3c1f4e"
headers = {"Authorization": "Bearer slat_YOUR_TOKEN"}
url = f"https://api.slatehq.ai/workflow-service/api/public/v1/workflow-runs/{run_id}"
while True:
run = requests.get(url, headers=headers).json()
if run["status"] in ("COMPLETED", "FAILED", "CANCELED"):
break
time.sleep(5)
print(run["status"], run.get("output"))
Status codes
| Status | Description |
|---|---|
200 | Run found. Returns the full run details. |
401 | Missing or invalid Bearer token. See Authentication. |
404 | Run not found. The runId does not exist or does not belong to this token. |
500 | Internal server error. |
What’s next
- Create Workflow Run — Trigger a new workflow run.
- Cancel Queued Run — Cancel a run before execution starts.
Was this page helpful?