# Send an email card

> Approve and send an email draft or reply Revnu wrote, optionally with an edited reply body. This sends real email.

Canonical: https://revnu.com/docs/review-send
Last updated: 2026-10-20

This is the only route that sends email, and it sends only what Revnu drafted: cards whose `sourceType` is `gmail_draft` (an outreach email) or `gmail_reply` (a reply in a live conversation). They go through here rather than `/answer` because sending holds a one-shot delivery lease, so a retry never sends twice.

```bash
curl -X POST -H "Authorization: Bearer $REVNU_API_TOKEN" \
  -H "content-type: application/json" \
  -d '{"body":"Thanks Priya, Thursday at 2 works."}' \
  https://revnu.com/api/v1/review/k97…/send
```

## Body

| Field | Meaning |
|---|---|
| `body` | Optional, replies (`gmail_reply`) only. Send this text instead of the draft. Cannot be empty if present. A `body` on a `gmail_draft` card is a `400`: a draft always sends the copy that was reviewed. |

## Responses

`200 { "ok": true, "data": { "outcome": "sent", "queued": false, "messageId": "<id>" } }` once the provider accepted it; `messageId` is the delivery receipt. When the mailbox paces its sending, the email is queued instead: `data` has `queued: true` and, once the queue has placed it, `leavesAt` (ISO 8601) and `timing`. A provider refusal is also a `200`, as `{ "ok": false, "error": { "kind", "detail" } }`; `kind` is one of `rate_limited`, `out_of_credits`, `not_found`, `network`, `upstream_5xx`, `schema_drift`, `bad_input`, `missing_key` or `budget_exhausted`. The full shape is in [/openapi.json](https://revnu.com/openapi.json). `409` if the card was already handled or is not an email card. `503 delivery_pending` with a `Retry-After` header if the provider's answer was lost: the send is fenced for reconciliation rather than risked twice, so wait and retry the same call. `503 unavailable`, also with `Retry-After`, when the delivery service could not be reached.

## Frequently asked questions

### Can I send my own email through the API?

This route sends a draft or reply Revnu wrote, with your edits to a reply at most, so every email that goes out has been through Revnu and your approval. There's no route for an email you composed yourself.

### Do replies ever send on their own?

No. A reply inside a live conversation always waits for a person to send it, whatever the approval settings say.

### Which scope does this need?

`review:write`. A token without it gets `403` with `requiredScope` in the body. `GET /me` shows a token's scopes.

### Are responses cached?

No. Every response is `Cache-Control: no-store`, so what you read is current.
