---
title: "Recall a send"
method: POST
path: "/products/notify/sends/{sendId}/recall"
tags: ["notify"]
---

# Recall a send

`POST /products/notify/sends/{sendId}/recall`

Close the reveal on a sealed send: revoke the access grants, or destroy the sealed content outright. Idempotent, and partial by design — one recipient failing never stops the rest, and every failure is reported. A plaintext send has no grant to revoke and is refused.

## Path parameters

- `sendId` string, required

## Request body

- NotifyRecallRequest — Omit `recipient_ids` to recall the whole audience.
  - `recipient_ids` string[] — Recall only these recipients. Ids not on the send come back in `not_found` rather than failing the call.
  - `mode` 'grant' | 'content' — `grant` revokes the access grants, leaving the content intact for any other share. `content` destroys the sealed content itself.

## Response `200`

The recall ran; the body reports what it reached.

- object
  - `data` NotifyRecallResponse, required
    - `send_id` string, required
    - `mode` 'grant' | 'content', required
    - `recalled` integer, required — Grants revoked. Idempotent: an already-revoked grant counts as recalled.
    - `failed` integer, required
    - `not_found` string[], required — Requested recipient ids that are not on this send.
    - `failures` object[], required — One entry per recipient whose recall failed. The rest still ran.
      - `recipient_id` string
      - `error` string
  - `meta` ResponseMeta — Envelope metadata present on every successful response.
    - `api_version` string
    - `request_id` string
    - `response_ms` integer
    - `timestamp` integer — Unix seconds.
    - `pools` object — Storage and bandwidth capacity snapshot for the account.
    - `billing` object
      - `past_due` boolean
    - `quota` object — This minute of the account request budget. Present on authenticated success responses that passed the throttle; absent otherwise.
      - `limit` integer
      - `used` integer
      - `remaining` integer
      - `resets_at` integer — Unix seconds.

## Other responses

- `400` — VALIDATION_ERROR — an unknown mode, an empty recipient_ids array, or a plaintext send, which mints no grants.
- `401` — AUTHENTICATION_ERROR — missing or invalid credentials.
- `403` — FORBIDDEN — the caller may not act on this account.
- `404` — NOT_FOUND — no such send on this account.
- `429` — RATE_LIMIT_EXCEEDED — the account exceeded 5000 requests this minute. `Retry-After` carries the seconds to wait, and `details` carries limit/resets_at, plus `used` whenever the request was counted. A request refused because the limiter itself was unavailable reports no `used`.

---

[API](https://skmtc.dev/sparkvault/apis/sparkvault-api.md) · [All operations](https://skmtc.dev/sparkvault/apis/sparkvault-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/sparkvault/sparkvault-api/revisions/a7807da394b8/schema)
