Structify sessions API

The sessions API from Structify — 16 operation(s) for sessions.

Operations 19

POST /sessions #
POST /sessions/estimate_cost #
GET /sessions/nodes/{node_id} #
PATCH /sessions/nodes/{node_id} #
POST /sessions/nodes/{node_id}/confirm #
POST /sessions/nodes/{node_id}/edit_output #
GET /sessions/nodes/{node_id}/events Get events from all jobs for a specific workflow node. #
GET /sessions/nodes/{node_id}/output_data #
POST /sessions/nodes/{node_id}/output_data #
GET /sessions/nodes/{node_id}/progress #
PATCH /sessions/nodes/{node_id}/progress #
POST /sessions/nodes/{node_id}/request_confirmation #
POST /sessions/nodes/{node_id}/visualization_output #
GET /sessions/{session_id}/dag #
POST /sessions/{session_id}/dag_ready Finalize a workflow session DAG by creating all nodes/edges and marking it as ready #
POST /sessions/{session_id}/dashboard_layout #
PATCH /sessions/{session_id}/error #
POST /sessions/{session_id}/kill_jobs #
POST /sessions/{session_id}/trigger_review #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/structify-sessions-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

structify-sessions-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  contact:
    email: team@structify.ai
    name: Structify Team
  description: Every enterprise's data team.
  license:
    name: Discuss directly with founders for license.
    url: https://structify.ai
  title: Structify account Sessions API
  version: 0.1.0
servers:
- description: Production server
  url: https://api.structify.ai
- description: Local server
  url: http://localhost:8080
security:
- api_key: []
- session_token: []
tags:
- name: sessions
paths:
  /sessions:
    post:
      operationId: create_session
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateWorkflowSessionRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowSession'
          description: Successfully created session.
        '400':
          description: Invalid request.
      tags:
      - sessions
  /sessions/estimate_cost:
    post:
      operationId: estimate_cost
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CostEstimateRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CostEstimateResponse'
          description: Cost estimate calculated successfully.
        '400':
          description: Invalid request.
      tags:
      - sessions
  /sessions/nodes/{node_id}:
    get:
      operationId: get_node
      parameters:
      - in: path
        name: node_id
        required: true
        schema:
          $ref: '#/components/schemas/WorkflowSessionNodeId'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetNodeResponse'
          description: Node retrieved successfully.
        '404':
          description: Node not found.
      tags:
      - sessions
    patch:
      operationId: update_workflow_node
      parameters:
      - description: Id of the workflow node to update.
        in: path
        name: node_id
        required: true
        schema:
          $ref: '#/components/schemas/WorkflowSessionNodeId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateWorkflowNodeRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowSessionNode'
          description: Successfully updated node.
        '400':
          description: Invalid request.
        '404':
          description: Node not found.
      tags:
      - sessions
  /sessions/nodes/{node_id}/confirm:
    post:
      operationId: confirm_node
      parameters:
      - in: path
        name: node_id
        required: true
        schema:
          $ref: '#/components/schemas/WorkflowSessionNodeId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConfirmNodeRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowSessionNode'
          description: Successfully confirmed/rejected node.
        '400':
          description: Invalid request.
        '404':
          description: Node not found.
      tags:
      - sessions
  /sessions/nodes/{node_id}/edit_output:
    post:
      operationId: edit_workflow_node_output
      parameters:
      - description: Id of the workflow node whose output to edit.
        in: path
        name: node_id
        required: true
        schema:
          $ref: '#/components/schemas/WorkflowSessionNodeId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EditNodeOutputRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EditNodeOutputResponse'
          description: Edit completed.
      tags:
      - sessions
  /sessions/nodes/{node_id}/events:
    get:
      operationId: get_node_events
      parameters:
      - description: Id of the node to get events for.
        in: path
        name: node_id
        required: true
        schema:
          $ref: '#/components/schemas/WorkflowSessionNodeId'
      - in: query
        name: search_term
        required: false
        schema:
          type:
          - string
          - 'null'
      - in: query
        name: status
        required: false
        schema:
          allOf:
          - $ref: '#/components/schemas/JobStatus'
      - in: query
        name: offset
        required: false
        schema:
          format: int64
          type: integer
      - in: query
        name: limit
        required: false
        schema:
          format: int64
          type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetNodeEventsResponse'
          description: Successfully retrieved node events.
        '403':
          description: Access denied.
        '404':
          description: Node not found.
      summary: Get events from all jobs for a specific workflow node.
      tags:
      - sessions
  /sessions/nodes/{node_id}/output_data:
    get:
      operationId: get_workflow_node_output_data
      parameters:
      - description: Id of the workflow node to upload output data for.
        in: path
        name: node_id
        required: true
        schema:
          $ref: '#/components/schemas/WorkflowSessionNodeId'
      responses:
        '200':
          content:
            application/octet-stream:
              schema:
                format: binary
                type: string
          description: Successfully retrieved output data.
        '400':
          description: Invalid request or node not in success status.
        '404':
          description: Node not found.
      tags:
      - sessions
    post:
      operationId: upload_workflow_node_output_data
      parameters:
      - description: Id of the workflow node to upload output data for.
        in: path
        name: node_id
        required: true
        schema:
          $ref: '#/components/schemas/WorkflowSessionNodeId'
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/WorkflowNodeOutputUpload'
        description: Binary output data from workflow node execution
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowSessionNode'
          description: Successfully uploaded output data.
        '400':
          description: Invalid request or node not in success status.
        '404':
          description: Node not found.
      tags:
      - sessions
  /sessions/nodes/{node_id}/progress:
    get:
      operationId: get_workflow_node_progress
      parameters:
      - description: Id of the workflow node to get progress for.
        in: path
        name: node_id
        required: true
        schema:
          $ref: '#/components/schemas/WorkflowSessionNodeId'
      responses:
        '200':
          content:
            application/json:
              schema:
                additionalProperties:
                  $ref: '#/components/schemas/ProgressStatus'
                type: object
          description: Successfully retrieved node progress.
        '404':
          description: Node not found.
      tags:
      - sessions
    patch:
      operationId: update_workflow_node_progress
      parameters:
      - description: Id of the workflow node to update progress for.
        in: path
        name: node_id
        required: true
        schema:
          $ref: '#/components/schemas/WorkflowSessionNodeId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateWorkflowNodeProgressRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowSessionNode'
          description: Successfully updated node progress.
        '400':
          description: Invalid request.
        '404':
          description: Node not found.
      tags:
      - sessions
  /sessions/nodes/{node_id}/request_confirmation:
    post:
      operationId: request_node_confirmation
      parameters:
      - in: path
        name: node_id
        required: true
        schema:
          $ref: '#/components/schemas/WorkflowSessionNodeId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RequestConfirmationRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowSessionNode'
          description: Node set to pending confirmation.
        '400':
          description: Invalid request.
        '404':
          description: Node not found.
      tags:
      - sessions
  /sessions/nodes/{node_id}/visualization_output:
    post:
      operationId: upload_node_visualization_output
      parameters:
      - description: Id of the workflow node to upload visualization output for.
        in: path
        name: node_id
        required: true
        schema:
          $ref: '#/components/schemas/WorkflowSessionNodeId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UploadNodeVisualizationOutputRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowSessionNode'
          description: Successfully uploaded visualization output.
        '400':
          description: Invalid request.
        '404':
          description: Node not found.
      tags:
      - sessions
  /sessions/{session_id}/dag:
    get:
      operationId: get_workflow_dag
      parameters:
      - description: Id of the session to get DAG for.
        in: path
        name: session_id
        required: true
        schema:
          $ref: '#/components/schemas/WorkflowSessionId'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowDAG'
          description: Successfully retrieved workflow DAG.
        '403':
          description: Access denied.
        '404':
          description: Session not found.
      tags:
      - sessions
  /sessions/{session_id}/dag_ready:
    post:
      operationId: finalize_dag
      parameters:
      - description: Workflow session ID
        in: path
        name: session_id
        required: true
        schema:
          $ref: '#/components/schemas/WorkflowSessionId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FinalizeDagRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FinalizeDagResponse'
          description: DAG finalized successfully
        '400':
          description: DAG validation failed
        '500':
          description: Internal server error
      summary: Finalize a workflow session DAG by creating all nodes/edges and marking it as ready
      tags:
      - sessions
  /sessions/{session_id}/dashboard_layout:
    post:
      operationId: upload_dashboard_layout
      parameters:
      - description: Id of the workflow session to upload dashboard layout for.
        in: path
        name: session_id
        required: true
        schema:
          $ref: '#/components/schemas/WorkflowSessionId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UploadDashboardLayoutRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowSession'
          description: Successfully uploaded dashboard layout.
        '400':
          description: Invalid request.
        '404':
          description: Session not found.
      tags:
      - sessions
  /sessions/{session_id}/error:
    patch:
      operationId: mark_workflow_session_errored
      parameters:
      - description: Id of the workflow session to mark as errored.
        in: path
        name: session_id
        required: true
        schema:
          $ref: '#/components/schemas/WorkflowSessionId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MarkWorkflowSessionErroredRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowSession'
          description: Successfully marked session as errored.
        '400':
          description: Invalid request.
        '404':
          description: Session not found.
      tags:
      - sessions
  /sessions/{session_id}/kill_jobs:
    post:
      operationId: kill_all_jobs_for_workflow
      parameters:
      - description: Id of the workflow session to kill jobs for.
        in: path
        name: session_id
        required: true
        schema:
          $ref: '#/components/schemas/WorkflowSessionId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/KillAllJobsRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/KillAllJobsResponse'
          description: Successfully killed all jobs for the workflow session.
        '400':
          description: Invalid request or session not found.
        '403':
          description: Access denied.
      tags:
      - sessions
  /sessions/{session_id}/trigger_review:
    post:
      operationId: trigger_workflow_review
      parameters:
      - description: Id of the workflow session to trigger review for.
        in: path
        name: session_id
        required: true
        schema:
          $ref: '#/components/schemas/WorkflowSessionId'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TriggerReviewResponse'
          description: Review triggered (or skipped if not needed).
        '400':
          description: Invalid request.
        '404':
          description: Session not found.
      tags:
      - sessions
components:
  schemas:
    TriggerReviewResponse:
      properties:
        triggered:
          type: boolean
      required:
      - triggered
      type: object
    EditNodeOutputRequest:
      properties:
        edits:
          items:
            $ref: '#/components/schemas/ParquetEdit'
          type: array
      required:
      - edits
      type: object
    VizBooleanControlType:
      enum:
      - checkbox
      type: string
    UpdateWorkflowNodeProgressRequest:
      properties:
        current:
          format: int32
          minimum: 0
          type: integer
        elapsed_seconds:
          format: double
          type: number
        title:
          type: string
        total:
          format: int32
          minimum: 0
          type:
          - integer
          - 'null'
      required:
      - title
      - current
      - elapsed_seconds
      type: object
    ChatMessageId:
      format: uuid
      type: string
    VizDateControl:
      additionalProperties: false
      properties:
        label:
          type: string
        type:
          $ref: '#/components/schemas/VizDateControlType'
      required:
      - type
      - label
      type: object
    EditNodeOutputResponse:
      properties:
        error_message:
          type:
          - string
          - 'null'
      type: object
    KillAllJobsResponse:
      properties:
        killed_jobs:
          items:
            $ref: '#/components/schemas/JobId'
          type: array
        message:
          type: string
      required:
      - killed_jobs
      - message
      type: object
    DashboardPage:
      description: 'A dashboard groups components that share a common dataset.

        If dataset_node_name is None, components render static viz without Mosaic cross-filtering.'
      properties:
        components:
          description: Components (charts) in this dashboard
          items:
            $ref: '#/components/schemas/DashboardComponent'
          type: array
        controls:
          description: Control filters (dropdowns, checkboxes, ranges) for this dashboard
          items:
            $ref: '#/components/schemas/DashboardControl'
          type:
          - array
          - 'null'
        datasetNodeName:
          description: 'Function name of the node that returns the dataset (DataFrame/Parquet).

            If None, no cross-filtering is available.'
          type:
          - string
          - 'null'
        description:
          description: Optional description
          type:
          - string
          - 'null'
        title:
          description: Title for this dashboard section
          type:
          - string
          - 'null'
      required:
      - components
      type: object
    ConnectorId:
      format: uuid
      type: string
    VizFigureKind:
      enum:
      - js
      - vega-lite
      - data-table
      type: string
    AutofixContext:
      enum:
      - creation
      - execution
      - visualization
      type: string
    WorkflowSessionNode:
      properties:
        cache_final_rows:
          format: int64
          type:
          - integer
          - 'null'
        cache_final_size_bytes:
          format: int64
          type:
          - integer
          - 'null'
        cache_max_bytes:
          format: int64
          type:
          - integer
          - 'null'
        cache_original_rows:
          format: int64
          type:
          - integer
          - 'null'
        cache_original_size_bytes:
          format: int64
          type:
          - integer
          - 'null'
        cache_truncated:
          type: boolean
        code:
          type:
          - string
          - 'null'
        code_md5_hash:
          type: string
        confirmation_status:
          type:
          - string
          - 'null'
        connector_id:
          allOf:
          - $ref: '#/components/schemas/ConnectorId'
        created_at:
          format: date-time
          type:
          - string
          - 'null'
        docstring:
          type: string
        error_message:
          type:
          - string
          - 'null'
        error_traceback:
          type:
          - string
          - 'null'
        estimated_cost:
          format: int64
          type:
          - integer
          - 'null'
        execution_status:
          $ref: '#/components/schemas/WorkflowNodeExecutionStatus'
        execution_time_ms:
          format: int64
          type:
          - integer
          - 'null'
        function_name:
          type: string
        id:
          $ref: '#/components/schemas/WorkflowSessionNodeId'
        input_row_count:
          format: int64
          type:
          - integer
          - 'null'
        manually_edited:
          type: boolean
        node_index:
          format: int32
          type: integer
        node_name:
          type: string
        original_node:
          allOf:
          - $ref: '#/components/schemas/WorkflowSessionNodeId'
        output_blob_name:
          type:
          - string
          - 'null'
        output_schema: {}
        progress: {}
        reviewed:
          type: boolean
        session_id:
          $ref: '#/components/schemas/WorkflowSessionId'
        updated_at:
          format: date-time
          type: string
        visualization_output: {}
      required:
      - id
      - node_index
      - node_name
      - session_id
      - function_name
      - docstring
      - execution_status
      - updated_at
      - code_md5_hash
      - reviewed
      type: object
    CostEstimateRequest:
      properties:
        avg_pages_per_doc:
          format: int64
          type:
          - integer
          - 'null'
        num_documents:
          format: int64
          type:
          - integer
          - 'null'
        num_properties:
          format: int64
          type:
          - integer
          - 'null'
        operation:
          $ref: '#/components/schemas/CostOperation'
        row_count:
          format: int64
          type:
          - integer
          - 'null'
        source_count:
          format: int64
          type:
          - integer
          - 'null'
        target_count:
          format: int64
          type:
          - integer
          - 'null'
        use_proxy:
          type:
          - boolean
          - 'null'
      required:
      - operation
      type: object
    WorkflowScheduleId:
      format: uuid
      type: string
    VizFigure:
      additionalProperties: false
      properties:
        description:
          type: string
        figure:
          $ref: '#/components/schemas/VizFigureDefinition'
        id:
          type: string
        span:
          format: int32
          type: integer
        title:
          type: string
      required:
      - id
      - figure
      type: object
    VizControlOption:
      additionalProperties: false
      properties:
        label:
          type: string
        value:
          type: string
      required:
      - label
      - value
      type: object
    VizStringControl:
      additionalProperties: false
      properties:
        label:
          type: string
        options:
          items:
            $ref: '#/components/schemas/VizControlOption'
          type: array
        type:
          $ref: '#/components/schemas/VizStringControlType'
      required:
      - type
      - label
      - options
      type: object
    WorkflowNodeOutputUpload:
      properties:
        cache_final_rows:
          format: int64
          type:
          - integer
          - 'null'
        cache_final_size_bytes:
          format: int64
          type:
          - integer
          - 'null'
        cache_max_bytes:
          format: int64
          type:
          - integer
          - 'null'
        cache_original_rows:
          format: int64
          type:
          - integer
          - 'null'
        cache_original_size_bytes:
          format: int64
          type:
          - integer
          - 'null'
        cache_truncated:
          type:
          - boolean
          - 'null'
        content:
          format: binary
          type: string
        output_schema:
          type:
          - string
          - 'null'
      required:
      - content
      type: object
    JobStatus:
      enum:
      - Queued
      - Running
      - Completed
      - Failed
      type: string
    DashboardComponent:
      description: A component references a viz node and optional display metadata.
      properties:
        description:
          description: Optional description shown under the component title.
          type:
          - string
          - 'null'
        node_name:
          description: Function name of the viz node that outputs the chart spec.
          type: string
        span:
          description: 'Grid span: 1 (quarter), 2 (half), 3 (three-quarters), 4 (full width).'
          format: int32
          type:
          - integer
          - 'null'
        title:
          description: Display title shown in the dashboard layout.
          type: string
      required:
      - node_name
      - title
      type: object
    LLMRelationship:
      additionalProperties: false
      properties:
        properties:
          additionalProperties:
            $ref: '#/components/schemas/BasicPropValue'
          type: object
        source:
          minimum: 0
          type: integer
        target:
          minimum: 0
          type: integer
        type:
          type: string
      required:
      - type
      - source
      - target
      type: object
    VizParam:
      discriminator:
        propertyName: type
      oneOf:
      - properties:
          control:
            $ref: '#/components/schemas/VizStringControl'
          type:
            enum:
            - string
            type: string
          value:
            type: string
        required:
        - value
        - type
        type: object
      - properties:
          control:
            $ref: '#/components/schemas/VizNumberControl'
          type:
            enum:
            - number
            type: string
          value:
            format: double
            type: number
        required:
        - value
        - type
        type: object
      - properties:
          control:
            $ref: '#/components/schemas/VizBooleanControl'
          type:
            enum:
            - boolean
            type: string
          value:
            type: boolean
        required:
        - value
        - type
        type: object
      - properties:
          control:
            $ref: '#/components/schemas/VizDateControl'
          type:
            enum:
            - date
            type: string
          value:
            type: string
        required:
        - value
        - type
        type: object
    JobWithEvents:
      description: A job paired with all its associated events
      properties:
        events:
          items:
            $ref: '#/components/schemas/TimeStampedJobEvent'
          type: array
        id:
          $ref: '#/components/schemas/JobId'
        run_started_time:
          format: date-time
          type: string
        seeded_kg:
          allOf:
          - $ref: '#/components/schemas/LLMKnowledgeGraph'
        status:
          $ref: '#/components/schemas/JobStatus'
      required:
      - id
      - status
      - run_started_time
      - events
      type: object
    LLMEntity:
      additionalProperties: false
      properties:
        id:
          minimum: 0
          type: integer
        properties:
          additionalProperties:
            $ref: '#/components/schemas/BasicPropValue'
          type: object
        type:
          type: string
      required:
      - id
      - type
      - properties
      type: object
    WorkflowSessionId:
      format: uuid
      type: string
    VizQuery:
      additionalProperties: false
      properties:
        id:
          type: string
        sql:
          type: string
      required:
      - id
      - sql
      type: object
    GetNodeEventsResponse:
      properties:
        count:
          minimum: 0
          type: integer
        events:
          items:
            $ref: '#/components/schemas/JobWithEvents'
          type: array
      required:
      - events
      - count
      type: object
    VizDateControlType:
      enum:
      - date
      type: string
    ChatSessionId:
      format: uuid
      type: string
    ConfirmNodeRequest:
      properties:
        confirmed:
          type: boolean
      required:
      - confirmed
      type: object
    VizNumberControl:
      additionalProperties: false
      properties:
        label:
          type: string
        max:
          format: double
          type: number
        min:
          format: double
          type: number
        step:
          format: double
          type: number
        type:
          $ref: '#/components/schemas/VizNumberControlType'
      required:
      - type
      - label
      - min
      - max
      type: object
    ControlOption:
      properties:
        label:
          type: string
        value:
          type: string
      required:
      - value
      - label
      type: object
    CostOperation:
      enum:
      - tag
      - pdf
      - web
      - match
      type: string
    NodeSpec:
      properties:
        code:
          type: string
        code_md5_hash:
          type: string
        connector_id:
          allOf:
          - $ref: '#/components/schemas/ConnectorId'
        docstring:
          type: string
        function_name:
          type: string
      required:
      - function_name
      - docstring
      - code_md5_hash
      - code
      type: object
    EdgeSpec:
      properties:
        source_node_index:
          format: int32
          type: integer
        target_node_index:
          format: int32
          type: integer
      required:
      - source_node_index
      - target_node_index
      type: object
    WorkflowSession:
      properties:
        aborted:
          type: boolean
        chat_session_id:
          $ref: '#/components/schemas/ChatSessionId'
        created_at:
          format: date-time
          type:
          - string
          - 'null'
        dag_ready:
          type: boolean
        dag_ready_at:
          format: date-time
          type:
          - string
          - 'null'
        dashboard_layout_proto:
          format: binary
          type:
          - string
          - 'null'
        error_message:
          type:
          - string
          - 'null'
        error_traceback:
          type:
          - string
          - 'null'
        id:
          $ref: '#/components/schemas/WorkflowSessionId'
        parent_chat_message_id:
          allOf:
          - $ref: '#/components/schemas/ChatMessageId'
        updated_at:
          format: date-time
          type: string
        workflow_schedule_id:
          allOf:
          - $ref: '#/components/schemas/WorkflowScheduleId'
      required:
      - id
      - chat_session_id
      - updated_at
      - dag_ready
      - aborted
      type: object
    FinalizeDagResponse:
      properties:
        node_ids:
          items:
            $ref: '#/components/schemas/WorkflowSessionNodeId'
          type: array
      required:
      - node_ids
      type: object
    Dashboard:
      description: 'A page is the top-level container with title/description

        Can contain multiple dashboards with different datasets'
      properties:
        dashboards:
          description: One or more dashboards on this page
          items:
            $ref: '#/components/schemas/DashboardPage'
          type: array
        description:
          description: Optional page description
          type:
          - string
          - 'null'
        title:
          description: Page title
          type: string
      required:
      - title
      - dashboards
      type: object
    VizBooleanControl:
      additionalProperties: false
      properties:
        label:
          type: string
        type:
          $ref: '#/components/schemas/VizBooleanControlType'
      required:
      - type
      - label
      type: object
    UpdateWorkflowNodeRequest:
      properties:
        error_message:
          type:
          - string
          - 'null'
        error_traceback:
          type:
          - string
          - 'null'
        execution_status:
          $ref: '#/components/schemas/WorkflowNodeExecutionStatus'
        execution_time_ms:
          format: int64
          type:
          - integer
          - 'null'
      required:
      - execution_status
      type: object
    DashboardControl:
      discriminator:
        propertyName: type
      oneOf:
      - properties:
          default_value:
            type:
            - string
            - 'null'
          field:
            type: string
          id:
            type: string
          label:
            type: string
          options:
            items:
              $ref: '#/components/schemas/ControlOption'
            type: array
          type:
            enum:
            - dropdown
            type: stri

# --- truncated at 32 KB (50 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/structify/refs/heads/main/openapi/structify-sessions-api-openapi.yml