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

# Get Workflow

> Get workflow details including steps and configuration

## Overview

Retrieves a workflow by ID with full details including all steps and their input mappings. Public workflows are accessible to anyone; private workflows require ownership.

## Path Parameters

<ParamField path="workflow_id" type="string" required>
  The workflow UUID
</ParamField>

## Response

<ResponseField name="id" type="string">
  Unique workflow identifier
</ResponseField>

<ResponseField name="name" type="string">
  Workflow name (max 128 characters)
</ResponseField>

<ResponseField name="description" type="string">
  Workflow description
</ResponseField>

<ResponseField name="steps" type="array">
  Ordered list of workflow steps

  <Expandable title="Step object">
    <ResponseField name="step_number" type="integer">
      Position in the execution sequence (starting from 1)
    </ResponseField>

    <ResponseField name="tool_id" type="string">
      UUID of the Danube tool to execute
    </ResponseField>

    <ResponseField name="tool_name" type="string">
      Human-readable tool name
    </ResponseField>

    <ResponseField name="description" type="string">
      What this step does
    </ResponseField>

    <ResponseField name="input_mapping" type="object">
      Maps tool parameters to values. Supports template syntax:

      * `{{inputs.field}}` — reference workflow inputs
      * `{{steps.N.result.field}}` — reference output from step N
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="owner_id" type="string">
  Creator's user ID
</ResponseField>

<ResponseField name="visibility" type="string">
  `private` or `public`
</ResponseField>

<ResponseField name="tags" type="array">
  Tags for categorization
</ResponseField>

<ResponseField name="created_at" type="string">
  ISO 8601 creation timestamp
</ResponseField>

<ResponseField name="updated_at" type="string">
  ISO 8601 last update timestamp
</ResponseField>

## Example

<RequestExample>
  ```bash cURL theme={null}
  curl -X GET "https://api.danubeai.com/v1/workflows/wf_abc123"
  ```

  ```python Python SDK theme={null}
  from danube import DanubeClient

  with DanubeClient(api_key="dk_...") as client:
      workflow = client.workflows.get("wf_abc123")
      for step in workflow.steps:
          print(f"Step {step.step_number}: {step.tool_name}")
  ```
</RequestExample>

<ResponseExample>
  ```json theme={null}
  {
    "id": "wf_abc123",
    "name": "Email Summary Pipeline",
    "description": "Fetches emails, summarizes, and posts to Slack",
    "steps": [
      {
        "step_number": 1,
        "tool_id": "tool_001",
        "tool_name": "Gmail - List Emails",
        "description": "Fetch recent emails",
        "input_mapping": {
          "limit": "{{inputs.email_count}}"
        }
      },
      {
        "step_number": 2,
        "tool_id": "tool_002",
        "tool_name": "OpenAI - Summarize",
        "description": "Summarize email content",
        "input_mapping": {
          "text": "{{steps.1.result.emails}}"
        }
      },
      {
        "step_number": 3,
        "tool_id": "tool_003",
        "tool_name": "Slack - Send Message",
        "description": "Post summary to Slack",
        "input_mapping": {
          "channel": "{{inputs.slack_channel}}",
          "message": "{{steps.2.result.summary}}"
        }
      }
    ],
    "owner_id": "user_123",
    "visibility": "public",
    "tags": ["email", "slack", "automation"],
    "created_at": "2026-01-15T10:30:00Z",
    "updated_at": "2026-01-20T14:00:00Z"
  }
  ```
</ResponseExample>
