---
title: "List Project Steps"
method: GET
path: "/api/v1/project-steps/{project_id}/steps"
tags: ["project-steps"]
---

# List Project Steps

`GET /api/v1/project-steps/{project_id}/steps`

List all non-suppressed steps in a project.

## Path parameters

- `project_id` string, uuid, required

## Response `200`

Successful Response

- StepRead[]
  - `id` string, uuid, required
  - `project_id` string, uuid, required
  - `company_id` string, uuid, required
  - `user_id` string, uuid, required
  - `slug` string, required
  - `title` string, required
  - `description` string, required
  - `step_type` 'source' | 'data_read' | 'process' | 'data_sink' | 'database' | 'dashboard', required — The role a step plays in the project DAG.
  - `code_type` 'python' | 'sql', required — Runtime language for the step code.
  - `sink_target` 'database', required — Where a data_sink step writes its output.
  - `provider_id` string, uuid, nullable, required
  - `parent_step_ids` string[], required
  - `order` integer, required
  - `code_url` string, required
  - `in_format` string, required
  - `out_format` string, required
  - `referenced_database_ids` string[], required
  - `input_schema` object[], nullable, required
  - `operator_type` string, nullable
  - `operator_config` object, nullable
  - `extra_metadata` object, nullable
  - `entity_id` string, uuid, nullable
  - `status` string
  - `is_suppressed` boolean, required
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `database_name` string, nullable
  - `trigger` TriggerRead — Trigger response.
    - `id` string, uuid, required
    - `step_id` string, uuid, required
    - `trigger_type` 'on_click' | 'schedule', required — 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.
    - `trigger_config` object, required
    - `is_active` boolean, required
    - `last_triggered_at` string, date-time, nullable, required
    - `created_at` string, date-time, required

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/netter/apis/dmi-backend.md) · [All operations](https://skmtc.net/netter/apis/dmi-backend/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/netter/dmi-backend/versions/a59877bf911b/schema)
