---
title: "Get execution status / result"
method: GET
path: "/workflows/executions/{execution_id}"
tags: ["Workflows"]
---

# Get execution status / result

`GET /workflows/executions/{execution_id}`

## Request

- Base URL: `https://be.graph8.com/api/v1`
- URL: `https://be.graph8.com/api/v1/workflows/executions/{execution_id}`
- Auth: HTTP bearer

Return execution status + output_data + token / cost telemetry.

The MCP polling pattern: call this until ``status`` reaches a TERMINAL
value — ``completed``, ``failed`` or ``stopped``. A run can also sit in
``paused`` or ``pending_approval`` (both non-terminal and resumable via
the lifecycle routes below), so a poller must treat those as "keep
waiting", not "done" — polling only for completed/failed hangs forever on
a paused or approval-gated run. The full set voice writes is
``pending|running|completed|failed|paused|pending_approval|stopped``.
Voice's GET enforces tenant isolation natively so no pre-flight is needed
for the read path.

## Path parameters

- `execution_id` string, required: Execution UUID.

## Headers

- `Authorization` string, nullable
- `X-Target-Org-Id` string, nullable

## Response `200`

Successful Response

- object

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/graph8/apis/graph8-developer-api.md) · [All operations](https://skmtc.dev/graph8/apis/graph8-developer-api/llms.txt) · [OpenAPI document](https://skmtc.dev/graph8/apis/graph8-developer-api/revisions/89fc11143b70?raw)
