# Build a Review Screen

> Put your review queue on a wall, in Slack or in your admin, driven entirely by each card's actions.

Canonical: https://revnu.com/docs/build-a-review-screen

The review queue is the agent's inbox for you. Putting it somewhere you already look, a TV in the office, a Slack channel, a tab in your own admin, is the single biggest thing you can do to keep work shipping.

## The rule that makes it easy

Every card carries two fields:

- `actions`: the exact verbs the API accepts for this card right now.
- `primaryLabel`: what the dashboard's main button would say, for example "Send Reply" or "Approve + Publish".

Render one primary button with `primaryLabel` and a secondary control per remaining verb. Never branch on `sourceType` or `kind`; the rules that decide what a card accepts live in one place on the server and change without you.

| Verb in `actions` | Call |
|---|---|
| `approve`, `answer`, `choose` | `POST /review/{id}/answer` with `action` set to the verb |
| `send` | `POST /review/{id}/send` |
| `request_changes` | `POST /review/{id}/request-changes` |
| `snooze` | `POST /review/{id}/snooze` |
| `dismiss` | `POST /review/{id}/dismiss` |

## Polling

`GET /review` returns pending and needs-revision cards, newest first within priority band. Every 10 to 30 seconds is plenty and far inside the read limit. Diff by `id` and `updatedAt` to animate changes.

## Handling a 409

Two people, or a person and the trust ladder, can act on the same card. A verb the card no longer accepts is a `409` whose body carries the current `actions`. Re-render from that and move on; nothing was double-applied.

## Frequently asked questions

### Can I show the full draft on the screen?

Yes. `GET /review/{id}` returns the card's payload with long text capped at 8 KB per field, which is enough for any draft the agent writes.

### What happens to a card nobody touches?

If the trust ladder has earned it, the card ships itself at `autoResolveAt`. Snoozing cancels that deadline.
