---
title: "A report version's review tips"
method: GET
path: "/reports/{id}/versions/{versionId}/review"
tags: ["Reports"]
---

# A report version's review tips

`GET /reports/{id}/versions/{versionId}/review`

## Request

- Base URL: `https://api.greentally.ai/v1`
- URL: `https://api.greentally.ai/v1/reports/{id}/versions/{versionId}/review`
- Auth: HTTP bearer

Report review (spec 2026-10-06 §12). The latest wording run, the counts and every tip of one version, in document order (completeness and wording interleaved; the client groups them). Completeness tips are derived from the frozen version on every read, and a row is stored only when one is applied or dismissed, so a GET never writes. Wording tips are stored by a run and carry state (current or out_of_date, recomputed on every read) and, when current, the sentence's UTF-16 span. Template issues are never returned. 404 while REPORT_REVIEW_ENABLED or REPORTS_V2_ENABLED is off, for a report the request cannot reach, and for a version of another report; 409 REPORT_NOT_REVIEWABLE for an earlier builder's version. Needs report.edit_draft.

## Path parameters

- `id` string, required
- `versionId` string, required

## Response `200`

The version's review

- ReportReviewResponse
  - `data` ReportReview, required
    - `counts` ReportReviewCounts, required
      - `applied` integer, required
      - `completenessOpen` integer, required
      - `dismissed` integer, required
      - `outOfDate` integer, required
      - `wordingOpen` integer, required: Open wording tips whose sentence is unchanged.
    - `currentVersionId` string: The report's current version (the published one when no redraft exists), where tips are applied and dismissed.
    - `editedSinceReview` boolean: The version is a draft whose text was saved after the shown run started (an edit during the run counts). A draft is edited in place under the same version id, so the run's tips may predate the text; each tip's state still says whether its sentence changed. A save made by applying one of the review's tips does not set it. false for a published version and when the shown run is not done.
    - `findings` ReportReviewFinding[], required
      - `anchor` ReportReviewAnchor, required: Where a tip sits. blockId is the block its marker sits beside (absent when no block holds it); completeness adds datapointId, checkId or rowKey (the row's first cell); wording (P2) adds sentenceIndex, sentenceHash and span (UTF-16 code units, [start, end)).
        - `blockId` string
        - `checkId` string
        - `datapointId` string
        - `rowKey` string
        - `sentenceHash` string
        - `sentenceIndex` integer
        - `span` object
          - `end` integer, required
          - `start` integer, required
      - `appliedVersionId` string: The version a wording apply wrote (P2); absent for completeness.
      - `category` 'share_as_predicate' | 'missing_subject' | 'omitted_key_fact' | 'unclear' | 'redundancy' | 'tone' | 'missing_item' | 'failed_check' | 'month_without_data' | 'site_without_data' | 'scope3_unassessed', required
      - `fix` ReportReviewFix, required: How the tip is fixed; type says which fields are set. none: nothing to apply or follow (dismiss only). rewrite (P2): original, rewrite (display texts); rewrite absent or empty (redundancy, tone or unclear only) means remove the sentence. answer: datapointId, year, item (as readiness shows it, pre-filled only from its stored suggestion), focusRow (a Scope 3 category), answeredSince (answered after this version was made: update the report). link: target, a place the client routes to.
        - `answeredSince` boolean
        - `datapointId` string
        - `focusRow` integer
        - `item` ReportReadinessItem
          - `answerable` boolean, required
          - `applicable` boolean, required
          - `choices` object[]
            - `label` string, required
            - `value` string, required
          - `citation` string
          - `columns` object[]
          - `display` string, required
          - `help` string
          - `id` string, required
          - `label` string, required
          - `origin` object
          - `question` string
          - `reason` string
          - `requirement` 'required' | 'if_applicable' | 'optional', required
          - `source` 'ledger' | 'profile' | 'derived' | 'user', required
          - `status` 'reported' | 'not_applicable' | 'omitted_sensitive' | 'not_estimated' | 'missing', required
          - `suggestion` ReportingProfileAnswer
            - `answeredAt` string, date-time, required
            - `answeredBy` string, required
            - `reason` string
            - `source` 'user' | 'tally', required
            - `status` 'reported' | 'not_applicable' | 'omitted_sensitive' | 'not_estimated', required
            - `unit` string
            - `value` unknown
          - `suggestionOrigin` 'override_last_year' | 'default_last_year': Where suggestion came from (last year's override row or last year's Default workspace row). Set only with suggestion.
          - `type` 'number' | 'integer' | 'money_eur' | 'percent' | 'tonnes' | 'text' | 'bool' | 'enum' | 'year' | 'date' | 'list' | 'table', required
          - `unit` string
        - `original` string
        - `rewrite` string
        - `target` 'emissions_data' | 'sites' | 'organization_profile' | 'answer_sheet'
        - `type` 'rewrite' | 'answer' | 'link' | 'none', required
        - `year` integer
      - `id` string, required
      - `kind` 'wording' | 'completeness', required: Template issues are stored for a central fix and never returned.
      - `originFindingId` string: Wording tips only: the tip's first row before any copy on write (its own id when not carried). Clients match a tip across versions by it.
      - `reason` string, required: Core's sentence; never model text.
      - `severity` 'high' | 'medium' | 'low': A fixed map by category
      - `state` 'current' | 'out_of_date', required: Completeness tips are always current.
      - `status` 'open' | 'applied' | 'dismissed', required
      - `statusAt` string, date-time
      - `statusBy` string
      - `title` string, required: Core's label of the tip (the item's label
    - `isCurrentVersion` boolean, required: This version is the report's current draft version; only its tips can be applied or dismissed.
    - `profileWritable` boolean: Sent when the version has open answer tips; false when the request's workspace keeps no answers of its own.
    - `reportId` string, required
    - `reviewedAt` string, date-time, nullable, required
    - `run` ReportReviewRun, required
      - `counts` object, required
        - `dropped` integer, required
        - `findings` integer, required
        - `unitsFailed` integer, required
      - `createdAt` string, date-time, required
      - `error` object
        - `code` string, required
        - `message` string, required
      - `finishedAt` string, date-time
      - `id` string, required
      - `outcome` 'reviewed' | 'unavailable'
      - `startedAt` string, date-time
      - `status` 'pending' | 'running' | 'done' | 'failed', required
    - `versionId` string, required
    - `wordingAvailable` boolean, required: false when no gateway is configured. The client then offers no "Run review".
    - `writtenText` boolean, required: The version has a written sentence a review can rewrite; false disables "Run review".

## Other responses

- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not Found
- `409`: Conflict

## Changes

- **2026-10-09** `840a458f7a4d`: 3 info
  - added the optional property `data/currentVersionId` to the response with the `200` status
  - added the optional property `data/editedSinceReview` to the response with the `200` status
  - added the optional property `data/findings/items/originFindingId` to the response with the `200` status
- **2026-10-08** `adccfaee8514`: 3 info
  - added the optional property `data/profileWritable` to the response with the `200` status
  - added the required property `data/isCurrentVersion` to the response with the `200` status
  - added the required property `data/writtenText` to the response with the `200` status
- **2026-10-07** `5c524454c847`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/greentally/apis/esgai-api/changes/reports/:id/versions/:versionId/review/get.md)

---

[API](https://skmtc.dev/greentally/apis/esgai-api.md) · [All operations](https://skmtc.dev/greentally/apis/esgai-api/llms.txt) · [OpenAPI document](https://skmtc.dev/greentally/apis/esgai-api/revisions/7eab940f1dd0?raw)
