---
title: "Get Open Reviews Summary"
method: GET
path: "/reviews/open-summary"
tags: ["reviews"]
---

# Get Open Reviews Summary

`GET /reviews/open-summary`

Every open review, annotated with where its current stage stands.

Powers the Reviews page's open view. Distinct from ``/reviews/all``, which
returns the reviews themselves: each row here carries the services in scope
plus the stage-specific progress that ``helpers/review_stage_progress.py``
derives — a questionnaire's due date and who it is out with, the requirements
left to review, the reports produced. The IRA is the one per-service stage,
and its deriver folds the review's services into a single measure rather than
splitting the row, since every other stage is review-level work that a
per-service row would just repeat.

Only the initial and periodic flows and their fintech variants
(``STANDARD_FLOW_REVIEW_TYPES``) are in scope. Inventory refresh and RM
Scorecard walk their own abbreviated stage lists, so their rows would sit in
lanes the rest of the pipeline doesn't have and be measured by stage rules
written for the diligence flow. ``review_type`` narrows within that scope, as
on ``/reviews/all``, so Vendor Management and Fintech Partners each see only
their own pipeline.

Unpaginated on purpose: the page groups rows by stage and needs the whole set
to show how open work distributes across the pipeline.

## Query parameters

- `review_type` ReviewType[], nullable

## Response `200`

Successful Response

- OpenReviewsResponse
  - `rows` OpenReviewRow[], required
    - `review_id` string, uuid, required
    - `services` ReviewServiceSummary[]
      - `service_id` string, uuid, required
      - `service_name` string, required
    - `vendor_id` string, uuid, required
    - `vendor_name` string, nullable
    - `vendor_website` string, nullable
    - `review_type` 'initial' | 'periodic' | 'inventory_refresh' | 'initial_fintech' | 'periodic_fintech' | 'rm_scorecard' | 'initial_no_ira' | 'ira_only', required
    - `started_at` string, date-time, required
    - `assigned_to` string, uuid, nullable
    - `assigned_to_name` string, nullable
    - `progress` ReviewStageProgress, required — Where one open review stands in its current stage, and who owes the next move.
      - `stage` 'inherent_risk_assessment' | 'form_distribution' | 'requirements_gathering' | 'evidence_collection' | 'review' | 'review_reporting' | 'completed' | 'document_sourcing' | 'document_review', required
      - `outstanding_with` StageOutstandingWith, required — Who the review's current stage is waiting on. ``internal`` is the last resort: work sitting on our side names the review's assignee where it has one, so a row says who to chase rather than only that the ball is ours.
        - `kind` 'assignee' | 'vendor' | 'internal', required
        - `parties` StageOutstandingParty[]
          - `kind` 'user' | 'team' | 'internal'
          - `id` string, uuid, nullable
          - `name` string, nullable
          - `email` string, nullable
      - `detail` union
        - IraStageDetail — Where the inherent risk assessment questionnaires stand, across the review's services. ``state`` is the worst of the per-service states and ``due_date`` the soonest deadline carrying it, so the row measures the questionnaire that most needs attention rather than averaging several into something true of none.
          - `kind` 'inherent_risk_assessment'
          - `state` 'complete' | 'overdue' | 'due' | 'outstanding' | 'not_sent', required
          - `due_date` string, date-time, nullable
          - `outstanding_count` integer
        - DiligenceStageDetail — Where due diligence collection stands. The states are the stage's three holders in turn: the vendor while the packet is out (``due``/``overdue``, or ``not_sent`` before it goes), the analyzer once it comes back (``analyzing``/``submitted``), then a reviewer (``awaiting_review``, then ``reviewed``). Only requirements the analyzer has already answered count as review work, so a packet still out never reports a backlog of checks nobody could have looked at yet.
          - `kind` 'evidence_collection'
          - `state` 'awaiting_review' | 'analyzing' | 'submitted' | 'overdue' | 'due' | 'reviewed' | 'not_sent', required
          - `requirements_to_review` integer, nullable
          - `requirements_total` integer, nullable
          - `due_date` string, date-time, nullable
        - ReportingStageDetail — How many reports the reporting stage has produced so far.
          - `kind` 'review_reporting'
          - `report_count` integer, required
      - `checklist_items_remaining` integer
      - `checklist_items_total` integer
      - `stage_work_complete` boolean

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/kobaltlabs/apis/fastapi.md) · [All operations](https://skmtc.dev/kobaltlabs/apis/fastapi/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/kobaltlabs/fastapi/revisions/3ff4c0bd276b/schema)
