---
title: "Get workflow by ID"
method: GET
path: "/public/v1/workflows/{workflow_id}/"
tags: ["Approval Policies"]
---

# Get workflow by ID

`GET /public/v1/workflows/{workflow_id}/`

Retrieve a single approval workflow by its ID, including all steps, conditions, and approvers.

## Path parameters

- `workflow_id` integer, required

## Response `200`

OK

- PublicWorkflowSchemaOut — Schema for workflow output.
  - `id` integer, required
  - `record_type` 'invoice' | 'bill' | 'journal_entry' | 'bank_transfer' | 'purchase_order' | 'sales_order' | 'intercompany_journal_entry' | 'contract' | 'customer_credit' | 'direct_expense' | 'cash_sale' | 'customer_prepayment' | 'customer_deposit' | 'customer_payment' | 'customer_refund' | 'vendor_prepayment_application' | 'customer_prepayment_application' | 'vendor_payment' | 'vendor_credit' | 'vendor_refund' | 'vendor_prepayment' | 'vendor' | 'customer', required — Supported record types for workflows.
  - `name` string, required
  - `is_active` boolean, required
  - `description` string, required
  - `version` integer, required
  - `priority` integer, required
  - `company_ids` integer[], required
  - `applies_to_all_companies` boolean, required
  - `allow_self_approval` boolean, required
  - `steps` PublicStepSchemaOut[], required
    - `name` string, required
    - `order` integer, required
    - `conditions` PublicConditionItemSchemaOut[], required
      - `field` string, required
      - `operator` 'eq' | 'neq' | 'gt' | 'lt' | 'gte' | 'lte' | 'contains' | 'not_contains' | 'starts_with' | 'ends_with' | 'in' | 'not_in' | 'between' | 'contains_any' | 'contains_all' | 'not_contains_any' — Comparison operators for workflow conditions.
      - `value` union
        - object
        - unknown[]
          - unknown
        - string
        - integer
        - number
        - boolean
      - `logical_operator` 'and' | 'or' | 'not' — Logical operators for connecting conditions.
    - `substeps` PublicSubstepSchemaOut[], nullable, required
      - `order` integer, required
      - `approver_ids` integer[], required
      - `approve_condition` 'any' | 'all', required — Condition for approving a substep.
    - `approver_ids` integer[], nullable, required
    - `approve_condition` 'any' | 'all', required — Condition for approving a substep.
  - `pending_approval_count` integer, required
  - `roles` object, required

## Other responses

- `400` — Bad Request
- `404` — Not Found
- `500` — Internal Server Error

---

[API](https://skmtc.net/dualentry/apis/dualentry-public-api-2.md) · [All operations](https://skmtc.net/dualentry/apis/dualentry-public-api-2/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/dualentry/dualentry-public-api-2/revisions/77cd3c6ec719/schema)
