Skip to main content
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>'
{
  "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": {}
}

Documentation Index

Fetch the complete documentation index at: https://slatehq.com/docs/llms.txt

Use this file to discover all available pages before exploring further.

Returns the current state of a workflow run. Use this endpoint to poll for progress after creating a run.

Parameters

runId
string
required
Unique identifier for the workflow run. Returned as run_id when you create a run.
Authorization
string
required
Bearer token. Format: Bearer slat_<your-token>.

Response

Returns 200 OK with the full run details.
run_id
string
required
Unique identifier for the run.
workflow_id
string
required
The workflow that this run belongs to.
status
string
required
Current status of the run. One of: QUEUED, STARTING, RUNNING, COMPLETED, FAILED, CANCELED.
workspace_id
number
Workspace ID assigned to the run. May be null if the run has not started processing.
workflow_execution_id
string
Internal execution ID. May be null if the run has not started processing.
output
object
Workflow output data. Available when status is COMPLETED. The structure depends on the workflow.
error
object
Error details when the run has failed. null if the run has not failed.
created_at
string
required
Timestamp when the run was created. ISO 8601 format.
updated_at
string
required
Timestamp of the last status change. ISO 8601 format.
completed_at
string
Timestamp when the run reached a terminal status (COMPLETED, FAILED, or CANCELED). null while the run is in progress.
metadata
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"

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

StatusDescription
200Run found. Returns the full run details.
401Missing or invalid Bearer token. See Authentication.
404Run not found. The runId does not exist or does not belong to this token.
500Internal server error.

What’s next