---
title: "Get a Compliance Orchestrator screening's result"
method: GET
path: "/compliance/orchestrator/screenings/{screeningId}"
tags: ["Compliance Orchestrator (Beta)"]
---

# Get a Compliance Orchestrator screening's result

`GET /compliance/orchestrator/screenings/{screeningId}`

## Request

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

Returns the result of a screening started by `POST /v1/compliance/orchestrator/screenings`, with a result per workflow step and an audit log. Safe to poll: a screening still in flight reports `PENDING` or `RUNNING`. Only screenings owned by the requesting tenant are returned.

## Path parameters

- `screeningId` string, required

## Response `200`

Screening result

- GetScreeningResultResponse: The current status, outcome, per-step results, and audit log for a screening.
  - `screeningId` string, required: Identifier of the screening being queried.
  - `workflowId` string, required: Identifier of the workflow that produced this screening.
  - `screeningStatus` 'PENDING' | 'RUNNING' | 'COMPLETED' | 'FAILED', required: A screening's lifecycle status. - `PENDING` — accepted, not started - `RUNNING` — one or more steps in flight - `COMPLETED` — every step finished and the workflow outcome is set - `FAILED` — the screening could not be completed
  - `outcome` 'ACCEPT' | 'REJECT', nullable: An `ACCEPT`/`REJECT` decision — the workflow's own outcome, a step's outcome, or the result of evaluating a step's outcome rules. `null` on a workflow outcome that is not decided yet.
  - `steps` StepResult[], required: Flat step list.
    - `stepId` string, required: Identifier of this step within the workflow.
    - `connectorId` string, required: Identifier of the connector that executed this step.
    - `operation` 'ADDRESS_SCREENING' | 'TRANSACTION_SCREENING' | 'REGISTER_TRANSACTION', required: 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.
    - `triggerRuleOutcome` 'EXECUTE' | 'PASS' | 'FAIL', required: Whether the step's trigger rules caused its connector to run. This is a decision about running, not about risk — `ACCEPT`/`REJECT` belong to the outcome fields. - `EXECUTE` — a rule called for screening, so the connector ran - `PASS` — a rule let the subject through without screening - `FAIL` — the step could not run; see `bypassReason`
    - `matchedTriggerRule` Rule, nullable: A single rule within a rule set. The first rule whose conditions match wins, and its `ruleAction` is applied.
      - `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.
    - `outcomeRuleOutcome` 'ACCEPT' | 'REJECT', nullable, required: An `ACCEPT`/`REJECT` decision — the workflow's own outcome, a step's outcome, or the result of evaluating a step's outcome rules. `null` on a workflow outcome that is not decided yet.
    - `matchedOutcomeRule` Rule, nullable: A single rule within a rule set. The first rule whose conditions match wins, and its `ruleAction` is applied.
      - `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.
    - `outcome` 'ACCEPT' | 'REJECT', nullable, required: An `ACCEPT`/`REJECT` decision — the workflow's own outcome, a step's outcome, or the result of evaluating a step's outcome rules. `null` on a workflow outcome that is not decided yet.
    - `metadata` StepResultMetadata: Connector-specific data, keyed by the connector's configured outcomeMetaParameters for this operation.
    - `ticketId` string, nullable: The connector-side screening ticket identifier.
    - `verdict` 'ACCEPT' | 'REJECT' | 'ALERT', nullable: The connector's own verdict for a step, before the step's outcome rules are applied. `null` on a step that did not reach the provider.
    - `connectorStatus` 'COMPLETED' | 'BYPASSED' | 'FAILED' | 'FROZEN', nullable: The connector's own processing status for a step. - `COMPLETED` — the provider answered - `BYPASSED` — no provider call was made; see `bypassReason` - `FAILED` — the provider call did not succeed - `FROZEN` — the step is held pending manual action
    - `bypassReason` 'MANUAL' | 'UNSUPPORTED_ASSET' | 'UNSUPPORTED_ROUTE' | 'PASSED_BY_POLICY' | 'BYPASSED_FAILURE' | 'TIMED_OUT' | 'BAD_CREDENTIALS' | 'CONFIGURATION_ERROR' | 'DROPPED_BY_BLOCKCHAIN' | 'PROCESS_DISMISSED', nullable: Why a step's screening did not run. A verbatim mirror of the platform's `BypassReason` vocabulary, shared with the rest of Fireblocks screening. Only `PASSED_BY_POLICY` is an approval — the policy deliberately let the subject through. Every other value means the check could not be performed, and the step is rejected rather than passed. A bypass is not a pass. - `MANUAL` — a person bypassed it - `UNSUPPORTED_ASSET` — the provider does not screen this asset or chain - `UNSUPPORTED_ROUTE` — the provider does not screen this route - `PASSED_BY_POLICY` — a policy rule let it through without screening - `BYPASSED_FAILURE` — screening failed and policy allowed a bypass - `TIMED_OUT` — the provider did not answer within the deadline - `BAD_CREDENTIALS` — the tenant's provider credentials were rejected - `CONFIGURATION_ERROR` — the connector is misconfigured for this tenant - `DROPPED_BY_BLOCKCHAIN` — the transaction never confirmed - `PROCESS_DISMISSED` — the surrounding process was cancelled
    - `risk` 'SEVERE' | 'HIGH' | 'MEDIUM' | 'LOW' | 'UNKNOWN', nullable: The provider's risk assessment for a step, normalised across connectors. `null` on a step that did not reach the provider — the absence of a risk level is not the same as low risk.
  - `auditLog` AuditLogEntry[], required: Append-only audit trail for this screening.
    - `timestamp` string, required: Unix timestamp in seconds when the event occurred, encoded as a string.
    - `eventType` 'STATUS_TRANSITION' | 'STEP_TRIGGER_RULE_EVALUATED' | 'CONNECTOR_CALL' | 'STEP_OUTCOME_RULE_EVALUATED' | 'STEP_METADATA_RECORDED' | 'WORKFLOW_OUTCOME', required: The kind of event an audit entry records. - `STATUS_TRANSITION` — the screening moved between statuses - `STEP_TRIGGER_RULE_EVALUATED` — a step's trigger rules were evaluated - `CONNECTOR_CALL` — a connector was called; `data.phase` distinguishes the request from its terminal result - `STEP_OUTCOME_RULE_EVALUATED` — a step's outcome rules read the response - `STEP_METADATA_RECORDED` — connector metadata was attached to a step - `WORKFLOW_OUTCOME` — the workflow outcome was derived from its steps.
    - `data` string, byte, required: The event payload, JSON serialised and then base64 encoded. Its shape depends on `eventType` — decode it to read the event.

## Other responses

- `400`: Invalid request arguments.
- `404`: Screening result 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)
