Structify sessions API
The sessions API from Structify — 16 operation(s) for sessions.
The sessions API from Structify — 16 operation(s) for sessions.
openapi: 3.0.3
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:
nullable: true
type: string
- in: query
name: status
required: false
schema:
allOf:
- $ref: '#/components/schemas/JobStatus'
nullable: true
- 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:
ConfirmNodeRequest:
properties:
confirmed:
type: boolean
required:
- confirmed
type: object
KillAllJobsRequest:
properties:
message:
nullable: true
type: string
type: object
WorkflowScheduleId:
format: uuid
type: string
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
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
GetNodeEventsResponse:
properties:
count:
minimum: 0
type: integer
events:
items:
$ref: '#/components/schemas/JobWithEvents'
type: array
required:
- events
- count
type: object
TimeStampedJobEvent:
properties:
body:
$ref: '#/components/schemas/JobEventBody'
created_at:
format: date-time
type: string
required:
- created_at
- body
type: object
FinalizeDagResponse:
properties:
node_ids:
items:
$ref: '#/components/schemas/WorkflowSessionNodeId'
type: array
required:
- node_ids
type: object
WorkflowSession:
properties:
aborted:
type: boolean
chat_session_id:
$ref: '#/components/schemas/ChatSessionId'
created_at:
format: date-time
nullable: true
type: string
dag_ready:
type: boolean
dag_ready_at:
format: date-time
nullable: true
type: string
dashboard_layout_proto:
format: binary
nullable: true
type: string
error_message:
nullable: true
type: string
error_traceback:
nullable: true
type: string
id:
$ref: '#/components/schemas/WorkflowSessionId'
parent_chat_message_id:
allOf:
- $ref: '#/components/schemas/ChatMessageId'
nullable: true
updated_at:
format: date-time
type: string
workflow_schedule_id:
allOf:
- $ref: '#/components/schemas/WorkflowScheduleId'
nullable: true
required:
- id
- chat_session_id
- updated_at
- dag_ready
- aborted
type: object
NodeSpec:
properties:
code:
type: string
code_md5_hash:
type: string
connector_id:
allOf:
- $ref: '#/components/schemas/ConnectorId'
nullable: true
docstring:
type: string
function_name:
type: string
required:
- function_name
- docstring
- code_md5_hash
- code
type: object
VizDateControlType:
enum:
- date
type: string
CostEstimateRequest:
properties:
avg_pages_per_doc:
format: int64
nullable: true
type: integer
num_documents:
format: int64
nullable: true
type: integer
num_properties:
format: int64
nullable: true
type: integer
operation:
$ref: '#/components/schemas/CostOperation'
row_count:
format: int64
nullable: true
type: integer
source_count:
format: int64
nullable: true
type: integer
target_count:
format: int64
nullable: true
type: integer
use_proxy:
nullable: true
type: boolean
required:
- operation
type: object
VizBooleanControlType:
enum:
- checkbox
type: string
WorkflowNodeOutputUpload:
properties:
cache_final_rows:
format: int64
nullable: true
type: integer
cache_final_size_bytes:
format: int64
nullable: true
type: integer
cache_max_bytes:
format: int64
nullable: true
type: integer
cache_original_rows:
format: int64
nullable: true
type: integer
cache_original_size_bytes:
format: int64
nullable: true
type: integer
cache_truncated:
nullable: true
type: boolean
content:
format: binary
type: string
output_schema:
nullable: true
type: string
required:
- content
type: object
VizQuery:
additionalProperties: false
properties:
id:
type: string
sql:
type: string
required:
- id
- sql
type: object
VizBooleanControl:
additionalProperties: false
properties:
label:
type: string
type:
$ref: '#/components/schemas/VizBooleanControlType'
required:
- type
- label
type: object
VizFigureDefinition:
additionalProperties: false
properties:
expression:
type: string
kind:
$ref: '#/components/schemas/VizFigureKind'
required:
- kind
- expression
type: object
DashboardComponent:
description: A component references a viz node and optional display metadata.
properties:
description:
description: Optional description shown under the component title.
nullable: true
type: string
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
nullable: true
type: integer
title:
description: Display title shown in the dashboard layout.
type: string
required:
- node_name
- title
type: object
WorkflowSessionNodeId:
format: uuid
type: string
WorkflowDAG:
properties:
aborted:
type: boolean
dag_ready_at:
format: date-time
nullable: true
type: string
dashboard_layout:
allOf:
- $ref: '#/components/schemas/Dashboard'
nullable: true
dashboard_specs:
items:
$ref: '#/components/schemas/DashboardItem'
type: array
edges:
items:
$ref: '#/components/schemas/WorkflowSessionEdge'
type: array
error:
nullable: true
type: string
error_traceback:
nullable: true
type: string
is_ready:
type: boolean
nodes:
items:
$ref: '#/components/schemas/WorkflowSessionNode'
type: array
session_id:
$ref: '#/components/schemas/WorkflowSessionId'
required:
- session_id
- aborted
- nodes
- edges
- is_ready
- dashboard_specs
type: object
FinalizeDagRequest:
properties:
dashboard_layout:
allOf:
- $ref: '#/components/schemas/Dashboard'
nullable: true
edges:
items:
$ref: '#/components/schemas/EdgeSpec'
type: array
nodes:
items:
$ref: '#/components/schemas/NodeSpec'
type: array
required:
- nodes
- edges
type: object
JobStatus:
enum:
- Queued
- Running
- Completed
- Failed
type: string
CostOperation:
enum:
- tag
- pdf
- web
- match
type: string
WorkflowNodeExecutionStatus:
enum:
- Unexecuted
- Success
- Failure
- Running
- Aborted
- PendingConfirmation
type: string
ConnectorId:
format: uuid
type: string
VizControlOption:
additionalProperties: false
properties:
label:
type: string
value:
type: string
required:
- label
- value
type: object
TriggerReviewResponse:
properties:
triggered:
type: boolean
required:
- triggered
type: object
DashboardItem:
properties:
file_name:
description: File path relative to repository root.
type: string
spec:
$ref: '#/components/schemas/DashboardSpec'
required:
- file_name
- spec
type: object
JobId:
format: uuid
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
nullable: true
type: integer
required:
- title
- current
- elapsed_seconds
type: object
ProgressStatus:
properties:
current:
format: int32
minimum: 0
type: integer
elapsed_seconds:
format: double
type: number
started_at:
format: date-time
type: string
total:
format: int32
minimum: 0
nullable: true
type: integer
required:
- started_at
- current
- elapsed_seconds
type: object
WorkflowSessionNode:
properties:
cache_final_rows:
format: int64
nullable: true
type: integer
cache_final_size_bytes:
format: int64
nullable: true
type: integer
cache_max_bytes:
format: int64
nullable: true
type: integer
cache_original_rows:
format: int64
nullable: true
type: integer
cache_original_size_bytes:
format: int64
nullable: true
type: integer
cache_truncated:
type: boolean
code:
nullable: true
type: string
code_md5_hash:
type: string
confirmation_status:
nullable: true
type: string
connector_id:
allOf:
- $ref: '#/components/schemas/ConnectorId'
nullable: true
created_at:
format: date-time
nullable: true
type: string
docstring:
type: string
error_message:
nullable: true
type: string
error_traceback:
nullable: true
type: string
estimated_cost:
format: int64
nullable: true
type: integer
execution_status:
$ref: '#/components/schemas/WorkflowNodeExecutionStatus'
execution_time_ms:
format: int64
nullable: true
type: integer
function_name:
type: string
id:
$ref: '#/components/schemas/WorkflowSessionNodeId'
input_row_count:
format: int64
nullable: true
type: integer
manually_edited:
type: boolean
node_index:
format: int32
type: integer
node_name:
type: string
original_node:
allOf:
- $ref: '#/components/schemas/WorkflowSessionNodeId'
nullable: true
output_blob_name:
nullable: true
type: string
output_schema:
nullable: true
progress:
nullable: true
reviewed:
type: boolean
session_id:
$ref: '#/components/schemas/WorkflowSessionId'
updated_at:
format: date-time
type: string
visualization_output:
nullable: true
required:
- id
- node_index
- node_name
- session_id
- function_name
- docstring
- execution_status
- updated_at
- code_md5_hash
- reviewed
type: object
ControlOption:
properties:
label:
type: string
value:
type: string
required:
- value
- label
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
CostEstimateResponse:
properties:
estimated_credits:
format: int64
type: integer
estimated_dollars:
format: double
type: number
required:
- estimated_credits
- estimated_dollars
type: object
UploadDashboardLayoutRequest:
oneOf:
- properties:
layout:
$ref: '#/components/schemas/Dashboard'
required:
- layout
type: object
- properties:
dashboard_specs:
items:
$ref: '#/components/schemas/DashboardSpecUpload'
type: array
required:
- dashboard_specs
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'
nullable: true
status:
$ref: '#/components/schemas/JobStatus'
required:
- id
- status
- run_started_time
- events
type: object
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
UpdateWorkflowNodeRequest:
properties:
error_message:
nullable: true
type: string
error_traceback:
nullable: true
type: string
execution_status:
$ref: '#/components/schemas/WorkflowNodeExecutionStatus'
execution_time_ms:
format: int64
nullable: true
type: integer
required:
- execution_status
type: object
EditNodeOutputResponse:
properties:
error_message:
nullable: true
type: string
type: object
WorkflowSessionEdge:
properties:
created_at:
format: date-time
type: string
id:
$ref: '#/components/schemas/WorkflowSessionEdgeId'
session_id:
$ref: '#/components/schemas/WorkflowSessionId'
source_node_id:
$ref: '#/components/schemas/WorkflowSessionNodeId'
target_node_id:
$ref: '#/components/schemas/WorkflowSessionNodeId'
required:
- id
- session_id
- source_node_id
- target_node_id
- created_at
type: object
WorkflowSessionEdgeId:
format: uuid
type: string
VizNumberControlType:
enum:
- range
type: string
ParquetEdit:
discriminator:
propertyName: type
oneOf:
- allOf:
- $ref: '#/components/schemas/CellEdit'
- properties:
type:
enum:
- edit_cell
type: string
required:
- type
type: object
- properties:
row_index:
minimum: 0
type: integer
type:
enum:
- delete_row
type: string
required:
- row_index
- type
type: object
- properties:
type:
enum:
- add_row
type: string
values:
additionalProperties:
type: string
type: object
required:
- values
- type
type: object
CreateWorkflowSessionRequest:
properties:
chat_session_id:
$ref: '#/components/schemas/ChatSessionId'
parent_chat_message_id:
# --- 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