---
title: "Get a Compliance Orchestrator workflow"
method: GET
path: "/compliance/orchestrator/workflows/{workflowId}"
tags: ["Compliance Orchestrator (Beta)"]
---

# Get a Compliance Orchestrator workflow

`GET /compliance/orchestrator/workflows/{workflowId}`

## Request

- Base URL: `https://api.fireblocks.io/v1`
- URL: `https://api.fireblocks.io/v1/compliance/orchestrator/workflows/{workflowId}`
- Auth: none declared
- TypeScript: <https://skmtc.dev/fireblocks/apis/fireblocks-api/docs/compliance/orchestrator/workflows/:workflowId/get.ts> (a function with typed inputs; its response is checked against the schema)

Returns a workflow's status and its steps in execution order. Read it to see what a given `workflowId` will screen, and which fields its rules may reference.

## Path parameters

- `workflowId` string, required

## Response `200`

Workflow

- GetWorkflowResponse: A workflow's current definition, including its steps and each step's rule sets. A workflow is the configuration a screening runs against: an ordered list of steps, each backed by one connector. It must be `ACTIVE` before a screening will accept it — `DRAFT` is the editing state, so a screening never runs against a half-finished configuration.
  - `workflowId` string, required: Unique identifier of the workflow.
  - `templateId` string, nullable: The template this workflow was provisioned from, if any.
  - `status` 'ACTIVE' | 'DRAFT', required: A workflow's status, which controls whether it can be screened against. - `DRAFT` — the editing state. Rules can be changed while nothing is screening against them, so a screening never runs against a half-finished configuration. - `ACTIVE` — `POST /v1/compliance/orchestrator/screenings` accepts screenings against this workflow.
  - `title` string, required: User-facing display name for the workflow.
  - `description` string, nullable: User-facing free-text description of the workflow's purpose.
  - `createdAt` string, required: Unix timestamp in seconds when the workflow was provisioned, encoded as a string.
  - `steps` StepConfig[], required: Flat list — one step per connector.
    - `stepId` string, required: Unique within the workflow.
    - `connectorId` string, required: Identifies which connector this step invokes.
    - `operations` StepOperationConfig[], required: One entry per operation the step's connector handles.
      - `operation` 'ADDRESS_SCREENING' | 'TRANSACTION_SCREENING' | 'REGISTER_TRANSACTION': What the caller wants Compliance Orchestrator to do. The target workflow must have a step configured for the operation; the error names the supported set when it does not. - `ADDRESS_SCREENING` — screen an address on its own, before anything exists on-chain. Answers whether the address itself carries risk. - `TRANSACTION_SCREENING` — screen a whole transfer: source and destination, amount and direction, not the destination alone. - `REGISTER_TRANSACTION` — record a confirmed transfer with the provider for ongoing monitoring. Not a gate: it files the transfer so the provider's own rules can raise alerts later, which is what feeds its AML model.
      - `requiredParameters` string[]: Resolved server-side on every `GetWorkflow` call from the step's connector definition for this operation. Read-only: ignored on write.
      - `optionalParameters` string[]: Like `requiredParameters`, but optional inputs to the operation.
      - `triggerRuleParameters` string[]: Fields a condition in `triggerRuleSetStruct` may reference.
      - `outcomeEvaluationParameters` string[]: Provider response fields a condition in `outcomeRuleSetStruct` may reference.
      - `outcomeMetaParameters` string[]: Additional provider response fields returned with the result; not usable in `outcomeRuleSetStruct` conditions.
      - `triggerRuleSetStruct` RuleSet: An ordered set of rules. Rules are evaluated top to bottom, and the first one that matches wins.
        - `rules` Rule[]: Ordered rule list, evaluated top to bottom; the first match wins.
          - `ruleId` string: UUID, unique within the rule set.
          - `conditions` RuleCondition[]: Conditions AND-ed together within this rule.
            - `field` string, required: The input context field this condition tests. Allowed values depend on the rule set type (trigger vs. outcome) and the step's connector/operation.
            - `operator` 'EQUALS' | 'NOT_EQUALS' | 'GT' | 'GTE' | 'LT' | 'LTE', required: The comparison applied between a rule condition's `field` and its `value`.
            - `value` string, required: The value `field` is compared against, using `operator`.
          - `ruleAction` 'SCREEN' | 'PASS' | 'FREEZE' | 'ACCEPT' | 'REJECT' | 'ALERT' | 'WAIT': What happens when a rule matches. Which values are legal depends on the rule set the rule belongs to — a trigger rule decides whether to screen, an outcome rule decides what the answer means. The enum is the union of both sets, so neither set accepts all of its values: `FREEZE` is the one value shared by the two, and every other value belongs to exactly one of them. Trigger rules: - `SCREEN` — call the connector - `PASS` — let the subject through without screening - `FREEZE` — hold for manual action Outcome rules: - `ACCEPT` — the step passes - `REJECT` — the step fails - `ALERT` — the step passes but is flagged for review - `FREEZE` — hold for manual action - `WAIT` — come back later; refused once the deadline has passed
          - `order` integer: Zero-based evaluation order among the rule set's rules, lowest first.
          - `title` string, nullable: User-facing label for the rule. Cosmetic only — not read by rule evaluation.
      - `triggerRuleSetJson` string, nullable: The tenant's trigger rules, as a JSON-encoded string. Set for steps whose rules are still defined as a legacy screening policy rather than natively in Compliance Orchestrator, and refreshed on every read. Mutually exclusive with `triggerRuleSetStruct`.
      - `outcomeRuleSetStruct` RuleSet: An ordered set of rules. Rules are evaluated top to bottom, and the first one that matches wins.
        - `rules` Rule[]: Ordered rule list, evaluated top to bottom; the first match wins.
          - `ruleId` string: UUID, unique within the rule set.
          - `conditions` RuleCondition[]: Conditions AND-ed together within this rule.
            - `field` string, required: The input context field this condition tests. Allowed values depend on the rule set type (trigger vs. outcome) and the step's connector/operation.
            - `operator` 'EQUALS' | 'NOT_EQUALS' | 'GT' | 'GTE' | 'LT' | 'LTE', required: The comparison applied between a rule condition's `field` and its `value`.
            - `value` string, required: The value `field` is compared against, using `operator`.
          - `ruleAction` 'SCREEN' | 'PASS' | 'FREEZE' | 'ACCEPT' | 'REJECT' | 'ALERT' | 'WAIT': What happens when a rule matches. Which values are legal depends on the rule set the rule belongs to — a trigger rule decides whether to screen, an outcome rule decides what the answer means. The enum is the union of both sets, so neither set accepts all of its values: `FREEZE` is the one value shared by the two, and every other value belongs to exactly one of them. Trigger rules: - `SCREEN` — call the connector - `PASS` — let the subject through without screening - `FREEZE` — hold for manual action Outcome rules: - `ACCEPT` — the step passes - `REJECT` — the step fails - `ALERT` — the step passes but is flagged for review - `FREEZE` — hold for manual action - `WAIT` — come back later; refused once the deadline has passed
          - `order` integer: Zero-based evaluation order among the rule set's rules, lowest first.
          - `title` string, nullable: User-facing label for the rule. Cosmetic only — not read by rule evaluation.
      - `outcomeRuleSetJson` string, nullable: The tenant's outcome rules, as a JSON-encoded string. Set for steps whose rules are still defined as a legacy screening policy rather than natively in Compliance Orchestrator, and refreshed on every read. Mutually exclusive with `outcomeRuleSetStruct`.
    - `order` integer, required: Execution order among the workflow's steps, lowest first.

## Other responses

- `400`: Invalid request arguments.
- `404`: Workflow not found.
- `default`: Error Response

---

[API](https://skmtc.dev/fireblocks/apis/fireblocks-api.md) - [All operations](https://skmtc.dev/fireblocks/apis/fireblocks-api/llms.txt) - [OpenAPI document](https://skmtc.dev/fireblocks/apis/fireblocks-api/revisions/4eba9965659a?raw)
