---
title: "List workflow executions for the caller's org (recover a lost execution_id)"
method: GET
path: "/workflows/executions"
tags: ["Workflows"]
---

# List workflow executions for the caller's org (recover a lost execution_id)

`GET /workflows/executions`

## Request

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

List this org's workflow executions, newest first, with SQL-side
pagination - the recovery path for a lost ``execution_id`` (the single
``GET /workflows/executions/{execution_id}`` read below needs an id you
no longer have).

Org is pinned server-side from the authenticated caller and passed to
voice in the PATH; a client-supplied ``org_id`` query param is ignored,
so one tenant can never list another tenant's executions (the voice
backing route trusts its path ``org_id``, so pinning here is the tenant
boundary - getting it wrong is a cross-org IDOR). ``runtime_type`` is
pinned to ``workflow`` so only workflow runs surface here, matching the
sibling ``GET /workflows`` which does not expose raw LLM/API/script
action runs.

Proxies voice's ``GET /api/v1/executions/list/{org_id}`` and returns its
``ExecutionListResponse`` shape unchanged - ``{executions: [...],
total_count: int}`` - consistent with this router's pass-through
convention (voice owns the execution DTO; re-declaring its ~20 fields
here would only drift). Voice also clamps ``limit`` to 1..200 SQL-side;
the bounds here reject an out-of-range page with a clean 422 before the
round-trip.

Read-only and additive: nothing is created, and no existing route changes.

## Query parameters

- `action_id` string, nullable: Filter to a single workflow's executions.
- `status_filter` string, nullable: Filter by execution status (equality match — one status per call). The backend writes seven values: pending|running|completed|failed|paused|pending_approval|stopped. The four terminal-or-early states are pending, running, completed, failed; paused and pending_approval are resumable, stopped is terminal.
- `triggered_by` string, nullable: Filter by the identity that started the run (user email, agent id, 'api', ...).
- `limit` integer: Page size (1..200).
- `offset` integer: Rows to skip for pagination.

## 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/2e7cfa0ca921?raw)
