---
title: "Approve or reject the reviewer's posts"
method: PUT
path: "/v2/scheduler/review-portals/{publicId}/posts/approvals"
tags: ["Brand review portal"]
---

# Approve or reject the reviewer's posts

`PUT /v2/scheduler/review-portals/{publicId}/posts/approvals`

## Request

- Base URL: `https://app.metricool.com/api`
- URL: `https://app.metricool.com/api/v2/scheduler/review-portals/{publicId}/posts/approvals`
- Auth: none declared

Authenticated (brand reviewer session only). Records this reviewer's approve/reject decision on one or more posts in their pending set — one id or many, same contract — and returns a per-post result. An unknown {publicId}, or one that belongs to another reviewer, returns 404 (the two are indistinguishable, on purpose, so the status can't be used to probe which portals exist); an internal Metricool user session is rejected with 403. Applied best-effort: a post that is not in the reviewer's set or is no longer actionable is reported as a failed result, not a 4xx. At most 100 posts are acted on per call; extra ids (after de-duplication) are ignored.

## Path parameters

- `publicId` string, required

## Request body

- ReviewerPostsDecisionRequest: A brand reviewer's approve/reject decision applied to one or more of their posts.
  - `postIds` integer[], required: Ids of the posts to decide on. One id for a single action, several for bulk. At most 100 distinct ids are processed per call; any beyond the first 100 are ignored.
  - `status` 'approved' | 'rejected', required: The decision, applied to every listed post.
  - `note` string: Optional note; used only when rejecting. Attached as a post note and included in the rejection email to each post's creator.

## Response `200`

OK

- JsonOkResponseReviewerPostsDecisionResponse
  - `metadata` object
  - `page` JsonPaging
    - `next` string
  - `data` ReviewerPostsDecisionResponse: Per-post outcomes of a reviewer's approve/reject action, one entry per requested post.
    - `results` ReviewerPostDecisionResult[]: One result per requested post, in request order.
      - `postId` integer: The post this result refers to.
      - `reviewerStatus` 'approved' | 'rejected': This reviewer's new decision on the post.
      - `postApprovalStatus` string: Recomputed post-level approval status after this decision. Informational; normally present on success, absent only if the post was removed or the re-read failed.
      - `error` 'NOT_FOUND' | 'NOT_ACTIONABLE' | 'FORBIDDEN' | 'ERROR': Failure reason when the decision was not applied to a post. NOT_FOUND, NOT_ACTIONABLE and FORBIDDEN are terminal; ERROR is transient and retryable.

---

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