Submit user access reviews (bulk)
POST/recertification/campaigns/:campaignID/reviews
Records one or more review decisions for users in the specified campaign.
Scope: cidaas:campaign_review. Management scopes (campaign_read, campaign_write) are not accepted. Authorisation is enforced by campaign assignment — caller must appear in groups[].reviewers for at least one group the subject belongs to.
Limits: 1–100 entries in reviews. Empty list → 417.
Atomicity: Not atomic. Each entry is processed independently; successful rows
are persisted even when others fail. HTTP 207 Multi-Status when at least one entry
failed; response body contains all per-entry results with individual status codes so
callers can identify which subs need to be retried. HTTP 200 only when every entry
succeeded.
Per-entry rules:
- Campaign must be
IN_PROGRESSand within timeframe. - Payload
groupsmust belong to subject; reviewer must have campaign scope for the subject (listed on at least one campaign group the subject belongs to). - Exactly one
reviewobject per group;decisionmust beKEEP,REDUCE, orREVOKE. reviewerin payload is overwritten with token sub;campaignIdis stamped from path.PARALLEL_ONE: once any reviewer has finalised the decision for a subject+group, all further submissions for that pair are rejected.PARALLEL_ALL: once a reviewer has submitted for a subject+group they cannot resubmit, even before quorum is reached. The user cannot be re-reviewed once atCOMPLETEDstatus.- Self-review is allowed — a reviewer may review their own group access.
Strategy behavior: all groups — campaign and non-campaign alike — use the campaign
strategy. For PARALLEL_ALL, quorum for every group uses the required reviewer set:
the deduplicated union of reviewers from all campaign groups the subject belongs to.
Request
Responses
- 200
- 207
- 400
- 401
- 403
- 404
- 409
- 417
All entries succeeded
One or more entries failed — per-entry status codes in reviewUpdateResults
Invalid payload, validation failure, or business rule violation
Missing/invalid token or insufficient reviewer role
Token valid but role/scope insufficient
Campaign ID not found
Optimistic concurrency conflict — a seenRoles value in the request does not match
the subject's current roles in that group. Code RECERT-011. Reload the review page
and re-evaluate before re-submitting.
Empty reviews list