> ## Documentation Index
> Fetch the complete documentation index at: https://docs.valendata.com/llms.txt
> Use this file to discover all available pages before exploring further.

# GET /api/workflows — List All Workflows

Retrieve every Workflow in your account, including IDs, names, step configurations, run counts, and timestamps.

`GET /api/workflows` returns all Workflows belonging to your account and active Workspace. Use it to inventory your automations or fetch a `workflow_id` before calling `POST /api/workflows/{workflow_id}/run`.

## Endpoint

```text theme={null}
GET https://api.valendata.com/api/workflows
```

## Authentication

This endpoint requires a session token, not an API key. Pass your JWT in the `Authorization` header:

```http theme={null}
Authorization: Bearer YOUR_SESSION_TOKEN
```

<Note>
  To get a session token, call `POST /api/auth/login` with your email and password. The response includes a `token` field — use that here.
</Note>

## Example Request

```bash theme={null}
curl https://api.valendata.com/api/workflows \
  -H "Authorization: Bearer YOUR_SESSION_TOKEN"
```

## Response

A successful request returns HTTP `200` with a flat JSON array of Workflow objects. There is no pagination envelope — all Workflows are returned in a single response, ordered by `created_at` descending.

### Workflow Object

<ResponseField name="id" type="string">
  Unique identifier for the Workflow. Plain UUID, for example `3f2a1bc4-...`. Pass this as `workflow_id` when calling `POST /api/workflows/{workflow_id}/run`.
</ResponseField>

<ResponseField name="name" type="string">
  The human-readable name of the Workflow.
</ResponseField>

<ResponseField name="slug" type="string">
  URL-safe identifier for the Workflow.
</ResponseField>

<ResponseField name="description" type="string | null">
  Short description of the Workflow's purpose, if set.
</ResponseField>

<ResponseField name="status" type="string">
  Current status of the Workflow.
</ResponseField>

<ResponseField name="visibility" type="string">
  Either `private` or `public`. Public Workflows appear in the Marketplace.
</ResponseField>

<ResponseField name="steps" type="array | null">
  The Workflow's step definitions in order. Each step includes its type (`agent`, `code`, `http`, `transform`, `dfuse`, `skill`), name, and configuration.
</ResponseField>

<ResponseField name="total_runs" type="integer">
  Total number of times this Workflow has been executed.
</ResponseField>

<ResponseField name="last_run_at" type="string | null">
  ISO 8601 UTC timestamp of the most recent run, or `null` if the Workflow has never been run.
</ResponseField>

<ResponseField name="created_at" type="string">
  ISO 8601 UTC timestamp of when the Workflow was created.
</ResponseField>

<ResponseField name="updated_at" type="string">
  ISO 8601 UTC timestamp of the most recent update.
</ResponseField>

<ResponseField name="creator_name" type="string | null">
  Display name of the Workflow's owner.
</ResponseField>

<ResponseField name="target_domains" type="array">
  List of domains this Workflow interacts with, derived from its step configurations.
</ResponseField>

### Example Response

```json theme={null}
[
  {
    "id": "3f2a1bc4-e89b-12d3-a456-426614174000",
    "name": "Competitor Pricing Monitor",
    "slug": "competitor-pricing-monitor",
    "description": "Extracts pricing data from a competitor URL daily.",
    "status": "active",
    "visibility": "private",
    "steps": [],
    "total_runs": 42,
    "last_run_at": "2026-08-20T09:15:00Z",
    "created_at": "2026-08-05T10:30:00Z",
    "updated_at": "2026-08-19T14:22:00Z",
    "creator_name": "Joe Adepoju",
    "target_domains": ["competitor.com"]
  }
]
```

## Error Handling

| HTTP Status | Meaning                                             |
| :---------- | :-------------------------------------------------- |
| `401`       | Unauthorized — session token is missing or expired. |
| `500`       | Internal error on Valendata's side.                 |
