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

# Stream Workflow Events

> Resume the Server-Sent Events stream for a workflow run after a pause or a dropped SSE connection. For runs that have already finished, the stream emits a single `workflow_finished` event and closes.



## OpenAPI

````yaml /en/api-reference/openapi_workflow.json get /workflow/{task_id}/events
openapi: 3.0.1
info:
  title: Workflow App API
  description: >-
    Workflow applications offer non-session support and are ideal for
    translation, article writing, summarization AI, and more.
  version: 1.0.0
servers:
  - url: https://{api_base_url}
    description: >-
      Base URL of the Workflow App API. For self-hosted deployments, replace it
      with your own API base URL.
    variables:
      api_base_url:
        default: api.dify.ai/v1
        description: Host and path of the API base URL, without the `https://` prefix.
security:
  - ApiKeyAuth: []
tags:
  - name: Workflows
    description: Operations for executing and managing workflows.
  - name: Files
    description: File upload and download operations.
  - name: End Users
    description: Operations related to end user information.
  - name: TTS
    description: Audio-to-text and text-to-audio conversion.
  - name: Applications
    description: Application settings, parameters, and metadata.
  - name: Human Input
    description: Endpoints for resuming paused workflows that require human input.
paths:
  /workflow/{task_id}/events:
    get:
      tags:
        - Workflows
      summary: Stream Workflow Events
      description: >-
        Resume the Server-Sent Events stream for a workflow run after a pause or
        a dropped SSE connection. For runs that have already finished, the
        stream emits a single `workflow_finished` event and closes.
      operationId: streamWorkflowEvents
      parameters:
        - name: task_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: Workflow run ID returned by the original workflow run request.
        - name: user
          in: query
          required: true
          schema:
            type: string
          description: >-
            End-user identifier that originally triggered the run. Must match
            the creator of the workflow run.
        - name: include_state_snapshot
          in: query
          required: false
          schema:
            type: boolean
            default: false
          description: >-
            When `true`, replay from the persisted state snapshot to include a
            status summary of already-executed nodes before streaming new
            events.
        - name: continue_on_pause
          in: query
          required: false
          schema:
            type: boolean
            default: false
          description: >-
            Set to `true` to keep the stream open across multiple
            `workflow_paused` events (useful when the workflow has more than one
            Human Input node in sequence). Default closes the stream after the
            first pause.
      responses:
        '200':
          description: >-
            Server-Sent Events stream. Each event is delivered as `data:
            {JSON}\n\n`. Event payloads follow the same schemas as the original
            streaming response.
          content:
            text/event-stream:
              schema:
                type: string
                description: >-
                  SSE stream of events from a resumed workflow run, in the same
                  format as [Run
                  Workflow](/api-reference/workflows/run-workflow). When the
                  resumed portion runs an LLM node with `reasoning_format:
                  separated`, this stream also carries `reasoning_chunk` events.
              examples:
                resumedRun:
                  summary: Response Example - Resumed run
                  value: >-
                    data: {"event": "human_input_form_filled", "task_id":
                    "c3800678-a077-43df-a102-53f23ed20b88", "workflow_run_id":
                    "fb47b2e6-5e43-4f90-be01-d5c5a088d156", "data": {"node_id":
                    "approval_node", "node_title": "Approval",
                    "rendered_content": "Please review the draft.", "action_id":
                    "approve", "action_text": "Approve"}} data: {"event":
                    "node_started", "task_id":
                    "c3800678-a077-43df-a102-53f23ed20b88", "workflow_run_id":
                    "fb47b2e6-5e43-4f90-be01-d5c5a088d156", "data": {"id":
                    "node_exec_2", "node_id": "node_1", "node_type": "llm",
                    "title": "LLM Node", "index": 2, "created_at": 1705407705}}
                    data: {"event": "reasoning_chunk", "task_id":
                    "c3800678-a077-43df-a102-53f23ed20b88", "workflow_run_id":
                    "fb47b2e6-5e43-4f90-be01-d5c5a088d156", "data":
                    {"reasoning": "Approved, now translating.", "node_id":
                    "node_1", "is_final": false}} data: {"event":
                    "reasoning_chunk", "task_id":
                    "c3800678-a077-43df-a102-53f23ed20b88", "workflow_run_id":
                    "fb47b2e6-5e43-4f90-be01-d5c5a088d156", "data":
                    {"reasoning": "", "node_id": "node_1", "is_final": true}}
                    data: {"event": "text_chunk", "task_id":
                    "c3800678-a077-43df-a102-53f23ed20b88", "workflow_run_id":
                    "fb47b2e6-5e43-4f90-be01-d5c5a088d156", "data": {"text":
                    "Bonjour", "from_variable_selector": ["node_1", "text"]}}
                    data: {"event": "workflow_finished", "task_id":
                    "c3800678-a077-43df-a102-53f23ed20b88", "workflow_run_id":
                    "fb47b2e6-5e43-4f90-be01-d5c5a088d156", "data": {"id":
                    "fb47b2e6-5e43-4f90-be01-d5c5a088d156", "workflow_id":
                    "7c3e33d4-2a8b-4e5f-9b1a-d3c6e8f12345", "status":
                    "succeeded", "outputs": {"result": "Bonjour"},
                    "elapsed_time": 2.1, "total_tokens": 42, "total_steps": 2,
                    "created_at": 1705407629, "finished_at": 1705407706}}
        '400':
          description: >-
            `not_workflow_app` : Please check if your app mode matches the right
            API route.
          content:
            application/json:
              examples:
                not_workflow_app:
                  summary: not_workflow_app
                  value:
                    status: 400
                    code: not_workflow_app
                    message: Please check if your app mode matches the right API route.
        '404':
          description: '`not_found` : Workflow run not found.'
          content:
            application/json:
              examples:
                not_found:
                  summary: not_found
                  value:
                    status: 404
                    code: not_found
                    message: Workflow run not found
components:
  securitySchemes:
    ApiKeyAuth:
      type: http
      scheme: bearer
      bearerFormat: API_KEY
      description: >-
        API Key authentication. For all API requests, include your API Key in
        the `Authorization` HTTP Header, prefixed with `Bearer `. Example:
        `Authorization: Bearer {API_KEY}`. **Strongly recommend storing your API
        Key on the server-side, not shared or stored on the client-side, to
        avoid possible API-Key leakage that can lead to serious consequences.**

````