---
title: "Decide a review"
method: POST
path: "/api/v1/reviews/{review_id}/decision"
---

# Decide a review

`POST /api/v1/reviews/{review_id}/decision`

## Request

- Base URL: `https://spoolis.com`
- URL: `https://spoolis.com/api/v1/reviews/{review_id}/decision`
- Auth: HTTP bearer

## Path parameters

- `review_id` string, required

## Request body

- ReviewDecisionInput
  - `verdict` 'confirm' | 'dispute', required
  - `reason` string, required
  - `counter_evidence` CounterEvidenceInput[], nullable
    - `type` 'text' | 'url', required
    - `value` string, required

## Response `200`

Recorded review decision

- object
  - `review` ReviewRequest
    - `id` string, required
    - `spool_id` string, required
    - `receipt_id` string, required
    - `scope` union, required
      - object
        - `kind` 'units', required
        - `units` integer[], required
      - object
        - `kind` 'outcome', required
    - `reviewer` object, required
    - `requested_by` string, required
    - `requested_at` string, date-time, required
    - `deadline_at` string, date-time, required
    - `on_timeout` 'hold' | 'reject' | 'keep_accepted', required
    - `status` 'pending' | 'decided' | 'expired' | 'cancelled', required
    - `decision` object, nullable
    - `grant_id` string, nullable, required
    - `updated_at` string, date-time, required
  - `dispute` Dispute: A policy-bound objection. While open, disputed value is not currently final or payable; this does not restrict money.
    - `id` string, required
    - `spool_id` string, required
    - `receipt_id` string, required
    - `scope` union, required
      - object
        - `kind` 'units', required
        - `units` integer[], required
      - object
        - `kind` 'outcome', required
    - `opened_by` string, required
    - `opened_at` string, date-time, required
    - `reason` string, required
    - `counter_evidence_ids` string[], required
    - `window_ends_at` string, date-time, required
    - `frozen` object, required
      - `mode` 'freeze_all' | 'freeze_disputed_value', required
      - `amount` string, required
    - `figures` object, required
      - `claimed` object, required
        - `minor_units` integer, required
        - `currency` string, required
      - `accepted` object, required
        - `minor_units` integer, required
        - `currency` string, required
      - `disputed` object, required
        - `minor_units` integer, required
        - `currency` string, required
      - `final` object, required
        - `minor_units` integer, required
        - `currency` string, required
      - `payable` object, required
        - `minor_units` integer, required
        - `currency` string, required
    - `status` 'open' | 'resolved' | 'expired', required
    - `resolution` object, nullable
    - `updated_at` string, date-time, required
  - `receipt` OutcomeReceipt: Signed spoolis/outcome-receipt@1 artifact.
    - `recipe` object
      - `slug` string, required
      - `hash` string, required
      - `conditions` object[], required
    - `agreement` object
      - `acceptance` object
        - `mode` 'unilateral', required
        - `provider_accepted_in_spoolis` unknown, required
        - `accepted_by` 'initiator', required
    - `amounts` object
      - `earned` string, required
      - `committed` string: Omitted when verification ran without max_amount_cents.
      - `asset` string, required
      - `decimals` integer, required
    - `condition_results` object[]
      - `required_evidence` object[]
        - `requirement_id` string, required
        - `state` 'present' | 'missing' | 'stale' | 'unavailable' | 'provenance_unsatisfied', required
        - `satisfied` boolean, required
        - `evidence_ref` string
        - `reason` string
    - `evidence_completeness` object
      - `required` integer, required
      - `satisfied` integer, required
      - `missing` integer, required
      - `stale` integer, required
      - `unavailable` integer, required
      - `unsatisfied_provenance` integer, required
    - `units` object
      - `unit_results` object[]
        - `identity` object
          - `id` string, required: SHA-256 over the private per-Spool salt and unit identity value.
          - `label` string
    - `supersedes` object
      - `receipt_id` string, required
      - `reason` 'verification_defect' | 'appeal_reversal' | 'dispute_resolution' | 'review_decision', required: Backward link to the receipt replaced by a correction, dispute resolution, or human review decision.
    - `review` object
      - `window_seconds` integer, required
      - `window_ends_at` string, date-time, required
      - `who_may_dispute` string[], required
      - `scope` 'outcome' | 'units', required
      - `on_dispute` 'freeze_all' | 'freeze_disputed_value', required

## Other responses

- `400`: Machine-readable API error
- `401`: Machine-readable API error
- `403`: Machine-readable API error
- `404`: Machine-readable API error
- `409`: Machine-readable API error
- `413`: Machine-readable API error
- `422`: Machine-readable API error
- `429`: Machine-readable API error
- `500`: Machine-readable API error
- `503`: Machine-readable API error

---

[API](https://skmtc.dev/spoolis/apis/spoolis-public-api.md) · [All operations](https://skmtc.dev/spoolis/apis/spoolis-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/spoolis/apis/spoolis-public-api/revisions/e438bfc05c01?raw)
