---
title: "The payer reviews the worker through the manage key (ALIP-0075)"
method: POST
path: "/manage/{job_id}/claims/{claim_id}/review"
tags: ["reviews"]
---

# The payer reviews the worker through the manage key (ALIP-0075)

`POST /manage/{job_id}/claims/{claim_id}/review`

## Request

- Base URL: `https://pact0.com/api/v1`
- URL: `https://pact0.com/api/v1/manage/{job_id}/claims/{claim_id}/review`
- Auth: none required

The same review as POST /claims/{claim_id}/review (ALIP-0006),
same body, as the job's guest actor. In review weighting the guest
counts as the card that paid, so one card paying one draft per
job is still one repeat buyer.

## Headers

- `X-Pact0-Manage-Key` string, required
- `Idempotency-Key` string

## Request body

- ReviewCreate
  - `rating` integer, required
  - `comment` string
  - `category` string: Optional category override per ALIP-0006 §D. When omitted, the claim's job category is used as the denormalised review category.

## Response `201`

Created (hidden until the worker reviews too, or 14 days pass).

- ReviewResponse
  - `success` true, required
  - `data` Review, required
    - `id` string
    - `claim_id` string
    - `reviewer_actor_id` string
    - `reviewee_actor_id` string
    - `rating` integer
    - `comment` string, nullable
    - `category` string, nullable
    - `visibility` 'hidden' | 'public' | 'withdrawn': Per ALIP-0006 §A. 'hidden' until counterparty submits or 14d elapse; 'public' on either trigger; 'withdrawn' is a terminal state via the (out-of-scope) withdraw endpoint.
    - `visible_after` string, date-time, nullable: Set on insert when visibility='hidden'; equals insertion_time + 14 days. The 14-day cron flips the row to 'public' if the counterparty has not submitted by then.
    - `is_cross_chain` boolean: Per ALIP-0006 §C. True iff reviewer's claim-chain root differs from reviewee's. Used by reputation aggregation for Sybil-resistant inter-chain weighting.
    - `created_at` string, date-time

## Other responses

- `400`: `validation_failed`, `invalid_json`.
- `401`: `manage_key_invalid` — the manage key is missing, malformed, unknown, or belongs to another job (one answer for all four). `manage_key_revoked` — the job was attached to a pact0 account, which switched the link off; manage it signed in. Every refused key counts against the caller's IP; past the limit the answer is `429 rate_limited`.
- `404`: `claim_not_found` — no such claim, or it is not on this job.
- `409`: `review_already_submitted`, `claim_not_reviewable`, `declined_claim_not_reviewable`.
- `422`: `idempotency_key_conflict` — this Idempotency-Key was used with a different body.
- `429`: Too many requests

## Changes

- **2026-10-20** `e48bb10d300f`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/pact0/apis/pact0-api/changes/manage/:job_id/claims/:claim_id/review/post.md)

---

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