# Review and send

> Walk an agent's review queue with the user, approve the right people, and confirm their sequences are queued.

Source: https://rivomi.com/docs/use-cases/review-and-send



**Done when:** every person in `awaiting_review` is approved or rejected, and each approved person
appears in `rivomi_list_enrollments` as `queued` or later.

Needs `send`, and a human must already have accepted the LinkedIn sending terms. Approving puts
real invitations on a real LinkedIn account. **The user decides each approval.** Present the people
and let them choose.

## 1. Check the gate [#1-check-the-gate]

```
rivomi_get_workspace {} → sending_consent.accepted, senders[].invites_left_today
```

If `accepted` is `false`, stop and tell the user: an owner or admin accepts the terms under
Settings › Senders. Rejections still work without it.

## 2. Read the queue [#2-read-the-queue]

```
rivomi_list_agent_queue { agent_id } → awaiting_review[], enrollments[]
```

For each waiting person, show the user the name, the title and company, the signal (what they
said), the score reason and the drafted note. Pull any detail you are missing with
`rivomi_get_prospect`.

## 3. Record the decisions [#3-record-the-decisions]

```
rivomi_review_queue {
  agent_id,
  approve: ["<prospect id>", …],
  reject: ["<prospect id>", …]
}
```

Rejected people leave the agent and become counter-examples for the scorer, so the next run finds
fewer like them. Approved people are queued, not sent: the sender paces them inside its working
hours and the agent's daily cap.

**Step complete when** `rivomi_list_agent_queue` shows an empty `awaiting_review`.

## 4. Confirm [#4-confirm]

```
rivomi_list_enrollments { agent_id, state: "queued" }
```

Report how many were queued, on which sender, and roughly when the first invitations go out given
`invites_left_today`.

## Queueing a list directly [#queueing-a-list-directly]

With no agent involved, queue everyone in a list who has an approved draft:

```
rivomi_enroll_prospects { list_id } → queued[], skipped[]
```

Anyone without an approved draft lands in `skipped` with the reason. Report them rather than
retrying.
