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

# Get Workflow Version API

> Retrieve the frozen definition of a published workflow version.



## OpenAPI

````yaml GET /workflows/{workflow_id}/versions/{version}
openapi: 3.1.0
info:
  title: Bolna API
  description: >-
    Use and leverage Bolna Voice AI using APIs through HTTP requests from any
    language in your applications and workflows.
  license:
    name: MIT
  version: 1.0.0
servers:
  - url: https://api.bolna.ai
    description: Production server
security:
  - bearerAuth: []
paths:
  /workflows/{workflow_id}/versions/{version}:
    get:
      description: Retrieves the frozen definition of a published version.
      parameters:
        - in: path
          name: workflow_id
          required: true
          schema:
            type: string
            format: uuid
          description: The unique `id` of the workflow
        - in: path
          name: version
          required: true
          schema:
            type: integer
            minimum: 1
          description: The published version number
      responses:
        '200':
          description: The published version with its definition
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowVersion'
        '404':
          description: Workflow or version not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowError'
components:
  schemas:
    WorkflowVersion:
      type: object
      required:
        - version
      properties:
        version:
          type: integer
          description: The published version number.
        published_at:
          type: string
          format: date-time
          nullable: true
        definition:
          nullable: true
          allOf:
            - $ref: '#/components/schemas/WorkflowDefinition'
          description: >-
            The frozen definition. Populated when reading a version; `null` in
            the publish response.
        warnings:
          type: array
          items:
            $ref: '#/components/schemas/WorkflowValidationIssue'
          description: Non-blocking issues found at publish.
    WorkflowError:
      type: object
      description: >-
        Error envelope returned by every workflow endpoint. `detail.code` is a
        stable machine-readable code; extra keys (such as `current_revision` on
        `revision_conflict`, `execution_id` on `duplicate_run`, or `issues` on
        `invalid_definition`) ride alongside it.
      required:
        - detail
      properties:
        detail:
          type: object
          additionalProperties: true
          required:
            - code
            - message
          properties:
            code:
              type: string
              description: Machine-readable error code.
              example: revision_conflict
            message:
              type: string
              description: Human-readable explanation.
    WorkflowDefinition:
      type: object
      description: >
        The workflow graph. `nodes` is a flat list of node envelopes — `{id,
        type, name, config, cases}` — where `type` is one of `start`, `agent`,
        `extraction`, `api`, `time`, `retry`, `aisensy_whatsapp` or `end`. Each
        node's `cases` array routes to the next node via condition expressions
        (`time` nodes use a single `to` instead, `end` nodes have neither). See
        [Nodes](/guides/workflows/nodes) and [Conditions and
        variables](/guides/workflows/conditions-and-variables) for the full
        schema, and the [Node Types API](/api-reference/workflows/node-types)
        for every config parameter with defaults and bounds.
      required:
        - entry_node_id
        - on_no_match
        - nodes
      properties:
        entry_node_id:
          type: string
          description: The `id` of the workflow's single `start` node.
          example: n_start
        on_no_match:
          type: string
          description: >-
            Workflow-wide fallback — the node an execution moves to when none of
            a node's cases match and the node declares no `on_no_match` of its
            own. Usually an `end` node.
          example: n_end_unhandled
        nodes:
          type: array
          maxItems: 200
          description: The node envelopes making up the graph.
          items:
            type: object
      example:
        entry_node_id: n_start
        on_no_match: n_end_unhandled
        nodes:
          - id: n_start
            type: start
            config:
              trigger:
                kind: manual
            cases:
              - when:
                  always: true
                then:
                  to: n_call1
          - id: n_call1
            type: agent
            name: Qualify
            config:
              agent_id: 123e4567-e89b-12d3-a456-426655440000
              timeout_s: 3600
            cases:
              - when:
                  cmp: '=='
                  left:
                    var: call.status
                  right:
                    const: completed
                then:
                  to: n_end_done
          - id: n_end_done
            type: end
            config:
              label: reached
              outcome: success
          - id: n_end_unhandled
            type: end
            config:
              label: unhandled
              outcome: failure
    WorkflowValidationIssue:
      type: object
      required:
        - severity
        - code
        - message
      properties:
        severity:
          type: string
          enum:
            - error
            - warning
          description: '`error` blocks publish; `warning` does not.'
        code:
          type: string
          description: >-
            Stable issue code, e.g. `unbounded_cycle`, `dangling_target`,
            `unknown_agent`, `empty_cases`.
          example: unbounded_cycle
        node_id:
          type: string
          nullable: true
          description: The node the issue points at, when it is node-specific.
        path:
          type: string
          description: Config path within the node, when the issue is field-specific.
        message:
          type: string
          description: Human-readable explanation.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````