---
title: "List the review queue"
method: GET
path: "/api/v1/review"
tags: ["API Reference"]
---

# List the review queue

`GET /api/v1/review`

## Request

- Base URL: `https://revnu.com`
- URL: `https://revnu.com/api/v1/review`
- Auth: HTTP bearer

What is waiting for the customer's approval, each card carrying the verbs it offers and the label for its main button. LinkedIn and gift cards list approve but are approved in the dashboard only.

Requires the `review:read` scope.

**Response.** `{ "items": [card, …] }`, newest first within priority band. A card:

```json
{
  "id": "k97…",
  "kind": "approval",
  "sourceType": "gmail_draft",
  "status": "pending",
  "title": "Reply to Priya at Acme",
  "prompt": "…",
  "summary": "…",
  "detail": null,
  "priority": "high",
  "options": null,
  "textInput": null,
  "budgetChange": null,
  "payload": { "…": "the draft, the research; long text capped at 8 KB" },
  "actions": ["send", "snooze", "dismiss"],
  "primaryLabel": "Send Reply",
  "autoResolveAt": 1758326400000,
  "dueAt": null, "snoozedUntil": null,
  "leadId": "…", "leadContactId": null, "postId": null,
  "createdAt": 1758240000000, "updatedAt": 1758240000000, "resolvedAt": null, "resolution": null
}
```

`actions` lists the verbs the card offers right now. Drive your UI from `actions` and `primaryLabel`; see [Build a Review Screen](/docs/build-a-review-screen). Which verbs send or publish is on [Answer a card](/docs/review-answer#what-approve-does) and [Send an email card](/docs/review-send).

**LinkedIn invites and messages** (`linkedin_invite`, `linkedin_message`) and **gifts** (`gift_send`) are approved only on the Review page in the dashboard, so their `actions` never include `approve`. `primaryLabel` still names the dashboard button, so a UI can link there. The refusals are listed under [Answer a card](/docs/review-answer#what-approve-does).

A card that waits seven days without an answer expires and leaves the queue, unless it was set to ship on its own at `autoResolveAt`.

## Query parameters

- `status` string
- `limit` integer

## Response `200`

{ "items": [card, …] }, newest first within priority band. A card: ``json { "id": "k97…", "kind": "approval", "sourceType": "gmail_draft", "status": "pending", "title": "Reply to Priya at Acme", "prompt": "…", "summary": "…", "detail": null, "priority": "high", "options": null, "textInput": null, "b

- object
  - `items` ReviewCardWire[], required
    - `id` string, required
    - `kind` 'approval' | 'choice' | 'follow_up' | 'question' | 'review' | 'setup' | 'update', required
    - `status` 'cancelled' | 'dismissed' | 'done' | 'expired' | 'needs_revision' | 'pending' | 'snoozed', required
    - `sourceType` 'ads_budget' | 'ads_launch' | 'agent' | 'blog_draft' | 'blog_edit' | 'booking_link' | 'gift_send' | 'gmail_draft' | 'gmail_reply' | 'lead' | 'lead_contact' | 'linkedin_invite' | 'linkedin_message' | 'measurement_charter' | 'memory_rule' | 'outbound_setup' | 'outreach_sequence' | 'reddit_comment' | 'system' | 'null', nullable
    - `title` string, required
    - `prompt` string, required
    - `summary` string, nullable, required
    - `detail` string, nullable, required
    - `priority` 'high' | 'low' | 'normal', required
    - `dueAt` number, nullable, required
    - `snoozedUntil` number, nullable, required
    - `autoResolveAt` number, nullable, required
    - `options` object[], nullable, required
      - `label` string, required
      - `value` string, required
    - `textInput` object, nullable, required
      - `placeholder` string, nullable, required
      - `required` boolean, required
    - `budgetChange` object, nullable, required
      - `currency` string, required
      - `previousMonthlyCap` number, required
      - `monthlyCap` number, required
    - `leadId` string, nullable, required
    - `leadContactId` string, nullable, required
    - `postId` string, nullable, required
    - `payload` object, nullable, required
    - `createdAt` number, required
    - `updatedAt` number, required
    - `resolvedAt` number, nullable, required
    - `resolution` object, nullable
      - `note` string
      - `text` string
      - `optionValues` string[]
      - `decidedBy` 'admin' | 'agent' | 'auto_ship' | 'chat' | 'customer' | 'same_recipient' | 'standing_approval'
      - `action` string, required
    - `actions` ReviewActionVerb[], required
    - `primaryLabel` string, required

## Other responses

- `400`: The request is malformed; the error names the problem.
- `401`: Missing, malformed, unknown or revoked token.
- `402`: `setup_pending`: the account hasn't started its trial. Finish setup with `GET /setup`.
- `403`: The token lacks the scope in `requiredScope`.
- `429`: Rate limited.
- `503`: Temporarily unavailable; retry the same call.

---

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