---
title: Get Workflow
description: Retrieve a single workflow with input schema, access state, pricing, and an example run request.
source: https://www.edgaze.ai/docs/api/get-workflow
section: api
---
# Get Workflow

> Retrieve a single workflow with input schema, access state, pricing, and an example run request.

```apibar
get-workflow
```

## Overview

Fetch full detail for one workflow, including the `inputSchema` you need to build a POST /runs body. The response also tells you whether the key holder can run the workflow now (`apiRunnableNow`), what it costs (`displayedRunPriceUsd`), and includes a ready-made `exampleRequest`.

Use this after listing workflows when you need schemas for a specific id, or when your integration caches workflow metadata and refreshes a single listing on demand.

```doccallout
{"variant":"info","text":"GET /workflows/{workflow_id} before the first production run of a workflow. Check apiRunnableNow and purchaseRequired before calling POST /runs. Map inputSchema fields to your inputs object: both name and nodeId keys are accepted."}
```

## Authorization

```apiscopes
get-workflow
```

## Parameters

```apiparams
get-workflow
```

## Response

Example success and error payloads are in the request/response panel above.

## Edge cases

```apiedges
get-workflow
```

---

## Endpoint reference
- **Method:** `GET`
- **Path:** `https://api.edgaze.ai/v1/workflows/{workflow_id}`
- **Scopes:** `run:read`, `run:execute`
## Parameters
| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `Authorization` | header | string | yes | Bearer token with your secret API key. |
| `workflow_id` | path | string | yes | UUID of the workflow. |
## Example responses

### 200 Success
```json
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "name": "SEO Blog Writer",
  "description": "Generate an SEO-optimized blog post from a topic.",
  "ownerHandle": "creator",
  "edgazeCode": "SEO1",
  "runModel": "per_run",
  "displayedRunPriceUsd": 2.5,
  "unlockPriceUsd": null,
  "userAccess": "wallet",
  "accessLabel": "Pay per run",
  "apiRunnableNow": true,
  "apiAccessAllowed": true,
  "purchaseRequired": false,
  "versionId": "ver_abc123",
  "versionLabel": "v3",
  "inputCount": 2,
  "inputSchema": [
    {
      "nodeId": "input_1",
      "name": "topic",
      "type": "text",
      "required": true,
      "placeholder": "Blog topic"
    },
    {
      "nodeId": "input_2",
      "name": "tone",
      "type": "select",
      "required": false,
      "options": [
        "Professional",
        "Casual",
        "Technical"
      ],
      "defaultValue": "Professional"
    }
  ],
  "responseShape": {
    "run": {
      "id": "uuid",
      "status": "accepted",
      "accessToken": "uuid",
      "statusUrl": "https://api.edgaze.ai/v1/runs/{id}",
      "eventsUrl": "https://api.edgaze.ai/v1/runs/{id}/events"
    }
  },
  "exampleRequest": {
    "method": "POST",
    "url": "https://api.edgaze.ai/v1/runs",
    "body": {
      "workflow": "550e8400-e29b-41d4-a716-446655440000",
      "inputs": {
        "topic": "Edge AI",
        "tone": "Technical"
      }
    }
  }
}
```

### 403 Forbidden

Non-leaky: same response for not entitled and restricted workflows.

```json
{
  "error": {
    "code": "forbidden",
    "message": "You do not have access to this workflow."
  }
}
```

### 404 Not found
```json
{
  "error": {
    "code": "not_found",
    "message": "Workflow not found."
  }
}
```

## Edge cases

### Non-leaky access denial (HTTP 403 · `forbidden`)

A 403 forbidden is returned when you lack entitlement. A 404 is returned only when the workflow ID does not exist.

### Input key aliases

When starting a run, inputs accept both the input name (topic) and the nodeId (input_1) as keys.

### Purchase required

Legacy unlock workflows return purchaseRequired: true and apiRunnableNow: false until unlocked.

