# Performance review operations

Five read methods return campaigns, stage cards and manager-stage questions, and one write method saves a manager's draft answer or finalises the review. Switch methods in the tabs — each has its own parameters, response fields and error codes.

**Scope:** `performan` | **Base URL:** `https://vibecode.bitrix24.com/v1` | **Authorization:** `X-Api-Key`

## Operations

- [Review campaigns](./campaigns.md) — `GET /v1/performan/review/campaigns`
- [Self-review cards](./self-reviews.md) — `GET /v1/performan/review/self-reviews`
- [Peer-review cards](./peer-reviews.md) — `GET /v1/performan/review/peer-reviews`
- [Manager-stage questions](./manager-questions.md) — `GET /v1/performan/review/manager/questions`
- [Manager review cards](./manager-reviews.md) — `GET /v1/performan/review/manager/reviews`
- [Manager answer](./manager-answer.md) — `POST /v1/performan/review/manager/answers`

## Access

The `performan` scope is required. It does not widen data visibility: the methods return only what belongs to the key owner — their campaigns, their self-review and peer-review cards, the manager relations where they are the reviewer. An account administrator gets the same slice as everybody else.

Writing is allowed to the reviewer of that card. Another employee's card and a card that does not exist answer the same way — `403 BITRIX_ACCESS_DENIED`.

## Pagination

All five lists are traversed by cursor. The `limit` parameter sets the page size, 200 at most, 50 by default. The value from `meta.nextCursor.id` goes into the `afterCursorId` parameter of the next request, and so on until a response where `meta.nextCursor` equals `null`.

Records in every list are ordered by descending `id`. These methods have no `offset` parameter and return no total count.

## Typical scenario

1. Get the campaigns: [`GET /v1/performan/review/campaigns`](./campaigns.md). Take the `id` of the campaign you need.
2. Read the manager-stage questions: [`GET /v1/performan/review/manager/questions`](./manager-questions.md) with the `campaignId` parameter.
3. Find the card for an employee: [`GET /v1/performan/review/manager/reviews`](./manager-reviews.md) with the `campaignId` and `revieweeUserId` parameters. Take the `id` from the response — it is the `relationId` of the write.
4. Save a draft: [`POST /v1/performan/review/manager/answers`](./manager-answer.md). Take `stateHash` from the response for the next write on that card.

## See also

- [Performance review](/docs/performan)
- [Users](/docs/entities/users)
- [Errors](/docs/errors)
