Skip to main content

Bulk delete rows

Admit a durable row-deletion operation. A queued response does not mean rows have been deleted.

POST/api/tables/{table_id}/rows/bulk-delete
HTTP referenceScope tables:writeUpdated October 16, 2026

This page documents the canonical HTTP contract for this endpoint.

Deletion is destructive and asynchronous. Exact-ID admission records the supplied references, subject to the runtime limit of 100,000 distinct references. Descriptor admission saves the selection without expanding its matching rows in the HTTP request. Runtime v2 later pages the descriptor into an immutable manifest before deletion, so the queued response does not confirm descriptor membership has already been frozen. Use exact IDs when a fixed reviewed target set is required, and inspect the intended filters before submitting a descriptor.

Poll the returned operation run with a key that also has jobs:read. requestedCount is the explicit reference count in ID mode and null in descriptor mode; it is not a completed deletion count. A conflicting destructive operation on the table returns 409.

Path parameters

  • table_idrequired

    string

    Target table ID.

Body parameters

  • rowIds · optional

    array<string>

    Explicit row IDs; omitted or empty only if selection.mode is descriptor. Runtime admission supports at most 100,000 distinct explicit references.

  • selection · optional

    object | null

    Only mode=descriptor activates descriptor selection. Optional filters/sort must be objects; excludedRowIds (or excluded_row_ids) is read as a list. Descriptor selection takes precedence over rowIds; malformed filters/sort are treated as absent. The descriptor is saved at admission; Runtime v2 resolves its matching membership into an immutable manifest after admission. Deletion is asynchronous.

Errors

StatusMeaning
400At least one non-empty row ID is required in ID mode.
401Invalid API key or missing auth.
403Access denied, missing tables:write scope, or missing delete actor authority.
409A destructive row mutation is already active for this table.
422Request body must contain rowIds or selection.mode=descriptor.

Docs