> ## Documentation Index
> Fetch the complete documentation index at: https://docs.qa.esectra.com/llms.txt
> Use this file to discover all available pages before exploring further.

# `GET /v1/transactions/{transaction_id}/screening`.

> Answers the question a decision alone cannot: what was actually consulted.
A customer holding a transfer needs to tell "we are still waiting on the
vendor" apart from "the vendor found something", and from outside those
look identical when only the outcome is exposed.

Scoped to the caller's tenant at every lookup. This returns sanctions
findings and screening provenance for a named transaction, so a scoping
mistake here hands one customer another customer's investigation.

# Errors

Returns `401` when the caller is not authenticated, `404` when the tenant
has no such transaction, and `503` when a store cannot be reached.



## OpenAPI

````yaml /openapi.json get /v1/transactions/{transaction_id}/screening
openapi: 3.1.0
info:
  title: Esectra API
  description: >-
    Transaction screening, identity verification, and wallet risk.


    Every create route accepts `Idempotency-Key`; replaying one returns the
    original record with `200` where the first call returned `201`. `POST
    /v1/transactions` requires the header, because a duplicated transaction is a
    duplicated financial record.
  license:
    name: proprietary
    identifier: proprietary
  version: 0.1.0
servers:
  - url: https://qa.esectra.com
    description: Esectra QA Documentation
security: []
paths:
  /v1/transactions/{transaction_id}/screening:
    get:
      tags:
        - Transactions
      summary: '`GET /v1/transactions/{transaction_id}/screening`.'
      description: >-
        Answers the question a decision alone cannot: what was actually
        consulted.

        A customer holding a transfer needs to tell "we are still waiting on the

        vendor" apart from "the vendor found something", and from outside those

        look identical when only the outcome is exposed.


        Scoped to the caller's tenant at every lookup. This returns sanctions

        findings and screening provenance for a named transaction, so a scoping

        mistake here hands one customer another customer's investigation.


        # Errors


        Returns `401` when the caller is not authenticated, `404` when the
        tenant

        has no such transaction, and `503` when a store cannot be reached.
      operationId: get_screening_status_handler
      parameters:
        - name: transaction_id
          in: path
          description: Transaction identifier
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Screening status
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScreeningStatusBody'
        '401':
          description: No usable credentials
        '404':
          description: No such transaction in this tenant
        '503':
          description: A backing store could not be reached
      security:
        - api_key: []
        - session_cookie: []
components:
  schemas:
    ScreeningStatusBody:
      type: object
      description: Tenant-scoped KYT status for one transaction.
      required:
        - transaction_id
        - mode
        - started_at
        - sufficient
        - evidence
      properties:
        completed_at:
          type:
            - string
            - 'null'
          description: RFC 3339 completion time, absent while the run is open.
        decision:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/ScreeningDecisionBody'
              description: >-
                The decision currently in force, which may supersede an earlier
                one.
        evidence:
          type: array
          items:
            $ref: '#/components/schemas/EvidenceBody'
          description: Every kind of evidence and how far it got.
        mode:
          type: string
          description: How much evidence the run set out to gather.
        started_at:
          type: string
          description: RFC 3339 start time.
        sufficient:
          type: boolean
          description: Whether the run gathered everything its mode required.
        transaction_id:
          type: string
          description: Transaction this is about.
    ScreeningDecisionBody:
      type: object
      description: The decision a screening produced.
      required:
        - id
        - decision
        - risk_level
        - reasons
        - review_status
        - created_at
      properties:
        created_at:
          type: string
          description: RFC 3339 time it was made.
        decision:
          $ref: '#/components/schemas/Decision'
          description: The outcome.
        id:
          type: string
          description: Decision identifier.
        reasons:
          type: array
          items:
            $ref: '#/components/schemas/DecisionReason'
          description: Every contributing reason, including the escalations.
        review_status:
          $ref: '#/components/schemas/ReviewStatus'
          description: Review lifecycle state.
        risk_level:
          $ref: '#/components/schemas/RiskLevel'
          description: Aggregate risk level.
        supersedes:
          type:
            - string
            - 'null'
          description: |-
            The decision this one replaced, when a later answer superseded an
            earlier one.
    EvidenceBody:
      type: object
      description: One kind of evidence and how far it got, as a customer sees it.
      required:
        - kind
        - state
        - usable
      properties:
        detail:
          type:
            - string
            - 'null'
          description: Operator-facing detail, such as a correlation or an error.
        kind:
          type: string
          description: Which check.
        observed_at:
          type:
            - string
            - 'null'
          description: RFC 3339 time it was gathered, when it was.
        state:
          type: string
          description: |-
            How far it got: `PRESENT`, `PENDING`, `STALE`, `UNSUPPORTED` or
            `UNAVAILABLE`.
        usable:
          type: boolean
          description: >-
            Whether this check may contribute to clearing the transaction.


            Sent explicitly rather than left for the caller to derive from
            `state`.

            A customer's integration that had to maintain its own list of which

            states count would silently start treating a new state as passing.
    Decision:
      type: string
      description: Decision emitted by an automated or human-assisted workflow.
      enum:
        - ALLOW
        - WARN
        - BLOCK
        - HOLD
        - REVIEW_REQUIRED
        - FLAG
        - BLOCK_RECOMMENDED
        - SUSPEND
        - END_STREAM
    DecisionReason:
      type: object
      description: Human-readable reason with a stable machine code.
      required:
        - code
        - message
      properties:
        code:
          type: string
          description: Stable reason code.
        message:
          type: string
          description: Explainable user/operator-facing message.
    ReviewStatus:
      type: string
      description: Human review lifecycle for a decision.
      enum:
        - PENDING
        - APPROVED
        - OVERTURNED
        - NOT_REQUIRED
    RiskLevel:
      type: string
      description: Explainable risk level.
      enum:
        - LOW
        - MEDIUM
        - HIGH
        - CRITICAL
  securitySchemes:
    api_key:
      type: http
      scheme: bearer
      description: >-
        A tenant API key. Acts for exactly one tenant and cannot conclude a
        case, because a conclusion records a person.
    session_cookie:
      type: apiKey
      in: cookie
      name: esectra_session
      description: >-
        A signed-in reviewer's session. httpOnly and SameSite=Lax; set by `POST
        /v1/control/sessions` and only usable once the second factor is met.

````