Netter steps API
The steps API from Netter — 16 operation(s) for steps.
The steps API from Netter — 16 operation(s) for steps.
openapi: 3.1.0
info:
title: DMI Backend actions steps API
version: 0.1.0
tags:
- name: steps
paths:
/api/v1/steps/:
get:
tags:
- steps
summary: List Steps
description: List steps, optionally filtered by project.
operationId: list_steps_api_v1_steps__get
parameters:
- name: project_id
in: query
required: false
schema:
anyOf:
- type: string
format: uuid
- type: 'null'
title: Project Id
responses:
'200':
description: Successful Response
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/StepRead'
title: Response List Steps Api V1 Steps Get
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
post:
tags:
- steps
summary: Create Step
operationId: create_step_api_v1_steps__post
parameters:
- name: project_id
in: query
required: true
schema:
type: string
format: uuid
title: Project Id
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/StepCreate'
responses:
'201':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/StepRead'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/v1/steps/{step_id}:
get:
tags:
- steps
summary: Get Step
operationId: get_step_api_v1_steps__step_id__get
parameters:
- name: step_id
in: path
required: true
schema:
type: string
format: uuid
title: Step Id
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/StepRead'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
patch:
tags:
- steps
summary: Update Step
operationId: update_step_api_v1_steps__step_id__patch
parameters:
- name: step_id
in: path
required: true
schema:
type: string
format: uuid
title: Step Id
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/StepUpdate'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/StepRead'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
delete:
tags:
- steps
summary: Delete Step
operationId: delete_step_api_v1_steps__step_id__delete
parameters:
- name: step_id
in: path
required: true
schema:
type: string
format: uuid
title: Step Id
responses:
'204':
description: Successful Response
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/v1/steps/{step_id}/code:
get:
tags:
- steps
summary: Get Step Code
description: Serve step code from S3.
operationId: get_step_code_api_v1_steps__step_id__code_get
parameters:
- name: step_id
in: path
required: true
schema:
type: string
format: uuid
title: Step Id
responses:
'200':
description: Successful Response
content:
application/json:
schema:
type: object
additionalProperties: true
title: Response Get Step Code Api V1 Steps Step Id Code Get
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
put:
tags:
- steps
summary: Update Step Code
description: Verbatim-save a custom_code step's Python source to S3.
operationId: update_step_code_api_v1_steps__step_id__code_put
parameters:
- name: step_id
in: path
required: true
schema:
type: string
format: uuid
title: Step Id
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/StepCodeUpdate'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
type: object
additionalProperties: true
title: Response Update Step Code Api V1 Steps Step Id Code Put
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/v1/steps/{step_id}/suppress:
post:
tags:
- steps
summary: Suppress Step
description: Soft-delete a step. Deactivates its trigger if any.
operationId: suppress_step_api_v1_steps__step_id__suppress_post
parameters:
- name: step_id
in: path
required: true
schema:
type: string
format: uuid
title: Step Id
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/StepRead'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/v1/steps/project/{project_id}/batch:
put:
tags:
- steps
summary: Batch Replace Steps
description: Replace all steps in a project (deploy-time).
operationId: batch_replace_steps_api_v1_steps_project__project_id__batch_put
parameters:
- name: project_id
in: path
required: true
schema:
type: string
format: uuid
title: Project Id
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/StepBatchReplace'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/StepRead'
title: Response Batch Replace Steps Api V1 Steps Project Project Id Batch Put
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/v1/steps/project/{project_id}/validate:
post:
tags:
- steps
summary: Validate Project Dag
description: Validate the current step DAG for a project.
operationId: validate_project_dag_api_v1_steps_project__project_id__validate_post
parameters:
- name: project_id
in: path
required: true
schema:
type: string
format: uuid
title: Project Id
responses:
'200':
description: Successful Response
content:
application/json:
schema:
type: object
additionalProperties: true
title: Response Validate Project Dag Api V1 Steps Project Project Id Validate Post
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/v1/steps/{step_id}/swap-candidates:
get:
tags:
- steps
summary: Get Swap Candidates
operationId: get_swap_candidates_api_v1_steps__step_id__swap_candidates_get
parameters:
- name: step_id
in: path
required: true
schema:
type: string
format: uuid
title: Step Id
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/SwapCandidateList'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/v1/steps/{step_id}/swap-input:
post:
tags:
- steps
summary: Post Swap Input
operationId: post_swap_input_api_v1_steps__step_id__swap_input_post
parameters:
- name: step_id
in: path
required: true
schema:
type: string
format: uuid
title: Step Id
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SwapInputRequest'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/SwapInputResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/v1/steps/{step_id}/trigger:
post:
tags:
- steps
summary: Create Trigger
operationId: create_trigger_api_v1_steps__step_id__trigger_post
parameters:
- name: step_id
in: path
required: true
schema:
type: string
format: uuid
title: Step Id
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TriggerCreate'
responses:
'201':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/TriggerRead'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
patch:
tags:
- steps
summary: Update Trigger
operationId: update_trigger_api_v1_steps__step_id__trigger_patch
parameters:
- name: step_id
in: path
required: true
schema:
type: string
format: uuid
title: Step Id
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TriggerUpdate'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/TriggerRead'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
delete:
tags:
- steps
summary: Delete Trigger
operationId: delete_trigger_api_v1_steps__step_id__trigger_delete
parameters:
- name: step_id
in: path
required: true
schema:
type: string
format: uuid
title: Step Id
responses:
'204':
description: Successful Response
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/v1/steps/project/{project_id}/run:
post:
tags:
- steps
summary: Trigger Run
description: "Trigger a new run for a project.\n\n- root_step_id=None → run all active steps (Run All).\n- root_step_id=<id> → refresh that output: runs its ancestor closure back to roots.\n The target must be a ``database`` step."
operationId: trigger_run_api_v1_steps_project__project_id__run_post
parameters:
- name: project_id
in: path
required: true
schema:
type: string
format: uuid
title: Project Id
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RunCreate'
responses:
'201':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/app__steps__schemas__RunRead'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/v1/steps/project/{project_id}/runs:
get:
tags:
- steps
summary: List Runs
description: List recent runs for a project.
operationId: list_runs_api_v1_steps_project__project_id__runs_get
parameters:
- name: project_id
in: path
required: true
schema:
type: string
format: uuid
title: Project Id
- name: limit
in: query
required: false
schema:
type: integer
default: 20
title: Limit
responses:
'200':
description: Successful Response
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/app__steps__schemas__RunRead'
title: Response List Runs Api V1 Steps Project Project Id Runs Get
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/v1/steps/run/{run_id}:
get:
tags:
- steps
summary: Get Run
description: 'Get run details including step runs.
``auth`` is declared to enforce authentication via FastAPI''s dependency
system; the project-perm check is resolved against the run''s own company
so multi-company users polling a run (e.g. dashboard InputForm) are not
404''d when their selected ``X-Company-ID`` differs from ``run.company_id``.'
operationId: get_run_api_v1_steps_run__run_id__get
parameters:
- name: run_id
in: path
required: true
schema:
type: string
format: uuid
title: Run Id
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/app__steps__schemas__RunRead'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/v1/steps/run/{run_id}/cancel:
post:
tags:
- steps
summary: Cancel Run
description: Cancel a running DAG execution.
operationId: cancel_run_api_v1_steps_run__run_id__cancel_post
parameters:
- name: run_id
in: path
required: true
schema:
type: string
format: uuid
title: Run Id
responses:
'200':
description: Successful Response
content:
application/json:
schema:
type: object
additionalProperties: true
title: Response Cancel Run Api V1 Steps Run Run Id Cancel Post
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/v1/steps/{step_id}/auto-fix:
post:
tags:
- steps
summary: Auto Fix Step
description: 'Dispatch an auto-fix job for a failed step.
Finds the most recent failed StepRun and sends error context to the agent
for automatic code repair.'
operationId: auto_fix_step_api_v1_steps__step_id__auto_fix_post
parameters:
- name: step_id
in: path
required: true
schema:
type: string
format: uuid
title: Step Id
responses:
'202':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/v1/projects/{project_id}/changes:
get:
tags:
- steps
summary: List Changes
operationId: list_changes_api_v1_projects__project_id__changes_get
parameters:
- name: project_id
in: path
required: true
schema:
type: string
format: uuid
title: Project Id
- name: since
in: query
required: false
schema:
anyOf:
- type: string
format: date-time
- type: 'null'
title: Since
- name: until
in: query
required: false
schema:
anyOf:
- type: string
format: date-time
- type: 'null'
title: Until
- name: actor_type
in: query
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Actor Type
- name: action
in: query
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Action
- name: include_orphans
in: query
required: false
schema:
type: boolean
default: false
title: Include Orphans
- name: limit
in: query
required: false
schema:
type: integer
maximum: 500
default: 200
title: Limit
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/ChangesListResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/v1/projects/{project_id}/changes/goto:
post:
tags:
- steps
summary: Goto Change
description: 'Move the project''s timeline head to ``body.event_id``.
Browser-style: replays events forward or applies inverses backward
until the live DAG matches the state at the target event. No new
events are emitted. Subsequent edits truncate any ''future'' events
relative to the new head. ``event_id=None`` rewinds to the initial
state (pre-log).'
operationId: goto_change_api_v1_projects__project_id__changes_goto_post
parameters:
- name: project_id
in: path
required: true
schema:
type: string
format: uuid
title: Project Id
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/GotoRequest'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
type: object
additionalProperties:
anyOf:
- type: string
- type: 'null'
title: Response Goto Change Api V1 Projects Project Id Changes Goto Post
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
components:
schemas:
CodeType:
type: string
enum:
- python
- sql
title: CodeType
description: Runtime language for the step code.
StepBatchReplace:
properties:
steps:
items:
$ref: '#/components/schemas/StepBatchItem'
type: array
title: Steps
type: object
required:
- steps
title: StepBatchReplace
description: Replace all steps in a project (used at deploy time).
TriggerRead:
properties:
id:
type: string
format: uuid
title: Id
step_id:
type: string
format: uuid
title: Step Id
trigger_type:
$ref: '#/components/schemas/TriggerType'
trigger_config:
additionalProperties: true
type: object
title: Trigger Config
is_active:
type: boolean
title: Is Active
last_triggered_at:
anyOf:
- type: string
format: date-time
- type: 'null'
title: Last Triggered At
created_at:
type: string
format: date-time
title: Created At
type: object
required:
- id
- step_id
- trigger_type
- trigger_config
- is_active
- last_triggered_at
- created_at
title: TriggerRead
description: Trigger response.
TriggerType:
type: string
enum:
- on_click
- schedule
title: TriggerType
description: 'How a root step can be triggered.
EVENT (polling) was deprecated in commit c523d2be (2026-05-02) and
deleted entirely in Phase 5: cross-dataset reactive updates use the
cascade model (database_dep) instead. ON_CLICK is implicit (every
dataset can be refreshed manually via the UI, no row needed) and is
only kept here for the rejection branch in CreateTrigger.'
Severity:
type: string
enum:
- compatible
- partial
- risky
- no_match
title: Severity
TriggerCreate:
properties:
trigger_type:
$ref: '#/components/schemas/TriggerType'
trigger_config:
additionalProperties: true
type: object
title: Trigger Config
default: {}
type: object
required:
- trigger_type
title: TriggerCreate
description: Attach a trigger to a root step.
StepRunRead:
properties:
id:
type: string
format: uuid
title: Id
run_id:
type: string
format: uuid
title: Run Id
step_id:
anyOf:
- type: string
format: uuid
- type: 'null'
title: Step Id
status:
type: string
title: Status
error:
anyOf:
- type: string
- type: 'null'
title: Error
logs:
anyOf:
- type: string
- type: 'null'
title: Logs
started_at:
anyOf:
- type: string
format: date-time
- type: 'null'
title: Started At
finished_at:
anyOf:
- type: string
format: date-time
- type: 'null'
title: Finished At
rows_processed:
anyOf:
- type: integer
- type: 'null'
title: Rows Processed
output_row_count:
anyOf:
- type: integer
- type: 'null'
title: Output Row Count
rows_new:
anyOf:
- type: integer
- type: 'null'
title: Rows New
rows_changed:
anyOf:
- type: integer
- type: 'null'
title: Rows Changed
rows_removed:
anyOf:
- type: integer
- type: 'null'
title: Rows Removed
ai_rows_cached:
anyOf:
- type: integer
- type: 'null'
title: Ai Rows Cached
ai_rows_processed:
anyOf:
- type: integer
- type: 'null'
title: Ai Rows Processed
type: object
required:
- id
- run_id
- step_id
- status
- error
- logs
- started_at
- finished_at
title: StepRunRead
description: StepRun response.
StepUpdate:
properties:
slug:
anyOf:
- type: string
- type: 'null'
title: Slug
title:
anyOf:
- type: string
- type: 'null'
title: Title
description:
anyOf:
- type: string
- type: 'null'
title: Description
step_type:
anyOf:
- $ref: '#/components/schemas/StepType'
- type: 'null'
code_type:
anyOf:
- $ref: '#/components/schemas/CodeType'
- type: 'null'
sink_target:
anyOf:
- $ref: '#/components/schemas/SinkTarget'
- type: 'null'
provider_id:
anyOf:
- type: string
format: uuid
- type: 'null'
title: Provider Id
parent_step_ids:
anyOf:
- items:
type: string
format: uuid
type: array
- type: 'null'
title: Parent Step Ids
in_format:
anyOf:
- type: string
- type: 'null'
title: In Format
out_format:
anyOf:
- type: string
- type: 'null'
title: Out Format
status:
anyOf:
- type: string
- type: 'null'
title: Status
input_schema:
anyOf:
- items:
additionalProperties: true
type: object
type: array
- type: 'null'
title: Input Schema
operator_type:
anyOf:
- type: string
- type: 'null'
title: Operator Type
operator_config:
anyOf:
- additionalProperties: true
type: object
- type: 'null'
title: Operator Config
type: object
title: StepUpdate
description: Patch a step (all fields optional).
SwapColumnDiff:
properties:
matching:
items:
type: string
type: array
title: Matching
missing_in_candidate:
items:
type: string
type: array
title: Missing In Candidate
extra_in_candidate:
items:
type: string
type: array
title: Extra In Candidate
retyped:
items:
$ref: '#/components/schemas/SwapRetyped'
type: array
title: Retyped
type: object
required:
- matching
- missing_in_candidate
- extra_in_candidate
- retyped
title: SwapColumnDiff
RunCreate:
properties:
root_step_id:
anyOf:
- type: string
format: uuid
- type: 'null'
title: Root Step Id
force_full:
type: boolean
title: Force Full
default: false
type: object
title: RunCreate
description: 'Trigger a new run.
``root_step_id`` is the target output (a database step).
Null ``root_step_id`` means Run All — run every active step in the project.
``force_full`` bypasses the AI Lambda''s content-addressed cache / the
custom Lambda''s api_action ledger for this run only — used for manual
replays after schema changes or bug fixes. Cascade-created runs leave
this False (see spec §7d — force_full does not propagate through
cascade).'
StepCodeUpdate:
properties:
code:
type: string
title: Code
type: object
required:
- code
title: StepCodeUpdate
description: Verbatim replacement of a custom_code step's Python source.
TriggerUpdate:
properties:
trigger_type:
anyOf:
- $ref: '#/components/schemas/TriggerType'
- type: 'null'
trigger_config:
anyOf:
- additionalProperties: true
type: object
- type: 'null'
title: Trigger Config
type: object
title: TriggerUpdate
description: Patch a trigger.
SwapCandidate:
properties:
id:
type: string
format: uuid
title: Id
name:
type: string
title: Name
type:
type: string
enum:
- database
- user_file
title: Type
owner_project_id:
anyOf:
- type: string
format: uuid
- type: 'null'
title: Owner Project Id
owner_project_name:
anyOf:
- type: string
- type: 'null'
title: Owner Project Name
is_shared:
type: boolean
title: Is Shared
similarity_score:
type: number
title: Similarity Score
severity:
$ref: '#/components/schemas/Severity'
diff:
$ref: '#/components/schemas/SwapColumnDiff'
type: object
required:
- id
- name
- type
- owner_project_id
- owner_project_name
- is_shared
- similarity_score
- severity
- diff
title: SwapCandidate
StepCreate:
properties:
slug:
type: string
title: Slug
title:
type: string
title: Title
default: ''
description:
type: string
title: Description
default: ''
step_type:
$ref: '#/components/schemas/StepType'
code_type:
$ref: '#/components/schemas/CodeType'
default: python
sink_target:
anyOf:
- $ref: '#/components/schemas/SinkTarget'
- type: 'null'
provider_id:
anyOf:
- type: string
format: uuid
- type: 'null'
title: Provider Id
parent_step_ids:
items:
type: string
format: uuid
type: array
title: Parent Step Ids
default: []
in_format:
type: string
title: In Format
default: ''
out_format:
type: string
title: Out Format
default: ''
input_schema:
anyOf:
- items:
additionalProperties: true
type: object
type: array
- type: 'null'
title: Input Schema
operator_type:
anyOf:
- type: string
- type: 'null'
title: Operator Type
operator_config:
anyOf:
- additionalProperties: true
type: object
- type: 'null'
title: Operator Config
type: object
required:
- slug
- step_type
title: StepCreate
description: Create a new step in a project DAG.
StepBatchItem:
properties:
slug:
type: string
title: Slug
title:
type: string
title: Title
defaul
# --- truncated at 32 KB (44 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/netter/refs/heads/main/openapi/netter-steps-api-openapi.yml