---
title: "List workflows"
method: GET
path: "/workflows"
tags: ["Workflows"]
---

# List workflows

`GET /workflows`

## Request

- Base URL: `https://api.edgaze.ai/v1`
- URL: `https://api.edgaze.ai/v1/workflows`
- Auth: HTTP bearer

Discover current free and pay-per-run workflows in the paginated marketplace catalog. `scope=mine` returns the caller's current workflows.

## Query parameters

- `scope` 'marketplace' | 'mine': Marketplace catalog or the key holder's current workflows. Defaults to `marketplace`.
- `q` string: Search title, description, tags, owner handle, or Edgaze Code.
- `offset` integer: Pagination offset; used with `marketplace` scope.
- `limit` integer: Page size (max 50). Defaults to 24.
- `sort` 'popular' | 'newest': Marketplace sort order. Defaults to `popular`.
- `runModel` 'free' | 'per_run': Pricing model for a workflow listing.
- `runnableOnly` 'true' | 'false': When `true`, only workflows the key holder can run right now.

## Response `200`

Paginated workflow catalog.

- WorkflowListResponse: Response body for GET /workflows.
  - `workflows` WorkflowListItem[], required
    - `id` string, uuid, required
    - `name` string, required
    - `description` string, nullable, required
    - `ownerHandle` string, nullable, required
    - `edgazeCode` string, nullable, required
    - `runModel` 'free' | 'per_run', required: Pricing model for a workflow listing.
    - `displayedRunPriceUsd` number, nullable, required: Estimated run price shown to the buyer. The final price is confirmed when the run starts and may differ slightly from older catalog data. USD amount as a JSON number with up to six decimal places. Preserve the documented precision and do not round intermediate calculations to two decimal places.
    - `pricingExplanation` string, nullable, required: Human-readable note on how this listing is priced. Present whenever `displayedRunPriceUsd` is a positive estimate; explains that settlement uses the live quote at run start.
    - `userAccess` 'owned' | 'purchased' | 'wallet' | 'purchase_required', required: How the authenticated key holder can currently pay to run this workflow: `owned` (the caller is the creator), `purchased` (a prior purchase covers it), or `wallet` (it will be billed to wallet balance at run time). `purchase_required` marks legacy unlock listings that cannot be run or bought through the API — `apiRunnableNow` is false and POST /runs returns 403 `forbidden`. Purchasing is a web-only checkout flow; send the buyer to `purchaseUrl` on the workflow detail response.
    - `accessLabel` string, required
    - `apiRunnableNow` boolean, required
    - `runsCount` integer, nullable, required
    - `credentialMode` 'edgaze_hosted' | 'byok', required: Whether the workflow runs on Edgaze-hosted credentials or the caller's own keys.
    - `requiredProviders` RequiredProvider[], required
  - `pagination` Pagination, required: Offset-based pagination cursor for list endpoints.
    - `offset` integer, required: Offset of the first row in this page.
    - `limit` integer, required: Page size actually applied (max 50).
    - `hasMore` boolean, required: True when another page follows this one.

## Other responses

- `400`: Invalid query parameters.
- `401`: Invalid or missing API key.
- `403`: API key is missing the required scope.
- `500`: Unexpected server error.

---

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