---
title: "List pending deletes"
method: GET
path: "/v1/sync/pending-deletes"
tags: ["Pending deletes"]
---

# List pending deletes

`GET /v1/sync/pending-deletes`

## Request

- Base URL: `https://api.whalesync.com`
- URL: `https://api.whalesync.com/v1/sync/pending-deletes`
- Auth: HTTP bearer

One sync's deletes waiting on a person, newest first. When a record goes missing on one side, Whalesync holds the delete instead of applying it to the other side, so an accidental or API-caused disappearance cannot destroy data. Approving or ignoring a delete is deliberately not in this API: it is irreversible, so it stays a decision a person makes in the app — relay `review_url`.

## Query parameters

- `sync` string, required
- `state` 'awaiting_review' | 'ignored'
- `limit` integer
- `cursor` string

## Response `200`

A page of pending deletes, newest first.

- PendingDeleteList
  - `data` PendingDelete[], required
    - `record_id` string, required: The record this delete is about.
    - `sync_id` string, required
    - `state` 'awaiting_review' | 'ignored', required: `awaiting_review` = waiting on a person; `ignored` = a person chose to keep the record, so the delete is dormant and stops being raised. Neither is resolved: an ignored delete can be restored in the app.
    - `missing_side` 'left' | 'right', required: The side whose record went missing.
    - `delete_from_side` 'left' | 'right', required: The side the record would be deleted from if a person approves.
    - `pending_since` string, date-time, required: When the record was first detected as missing.
    - `ignored_at` string, date-time, nullable, required: When a person chose to ignore this delete, or null while it is still awaiting review.
    - `record` PendingDeleteRecord, required
      - `remote_id` string, nullable, required: The record id in the connected app.
      - `name` string, nullable, required: A display name for the record, if one is known.
      - `url` string, uri, nullable, required: Opens the record in the connected app, so a person can look at it before deciding.
      - `table` RecordTable, required
        - `id` string, required
        - `remote_id` string, required: The table id in the connector, stable across renames.
        - `name` string, required
    - `record_url` string, uri, required: The record's status document in the API.
    - `review_url` string, uri, required: The page where a person approves or ignores this delete. Relay it to them — the API deliberately has no endpoint that decides a delete.
  - `has_more` boolean, required: Whether more pending deletes follow this page.
  - `next_cursor` string, nullable, required: Pass back as `cursor` to fetch the next page.

## Other responses

- `401`: The API key is missing, invalid, or revoked (`missing_api_key`, `invalid_api_key`). Carries a `required_action` linking a person to key creation, naming the smallest scope this endpoint needs.
- `403`: The key's scope does not allow this call (`insufficient_scope` on a mutation with a `read` key).
- `409`: The sync auto-approves deletes (`delete_approval_disabled`), so it has no queue. A sync reports this as `delete_approval` before you call.
- `429`: Rate limit exceeded. Wait for `Retry-After` seconds.

---

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