---
title: "List, and unless dry_run delete, one author's demo or unmatched entry rows (operators only)"
method: POST
path: "/v1/admin/tenants/{tenant}/entries/purge"
tags: ["admin"]
---

# List, and unless dry_run delete, one author's demo or unmatched entry rows (operators only)

`POST /v1/admin/tenants/{tenant}/entries/purge`

## Request

- Base URL: `https://api.sixminute.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.sixminute.ai/v1/admin/tenants/{tenant}/entries/purge`
- Auth: HTTP bearer

DESTRUCTIVE: a deleted row cannot be undone and has no backup. `demo` selects the rows tools/demo-seed minted, its released ones listed under `kept` and never deleted; `unmatched` selects engine-written rows charged to no matter; at least one is required, and so is `author`. The listing and the delete run in ONE transaction in the author's own scope, and the delete removes exactly the listed ids. `dry_run` answers the list and writes nothing, and is not audited.

## Path parameters

- `tenant` string, required

## Request body

- object
  - `author` string, required
  - `demo` boolean
  - `unmatched` boolean
  - `dry_run` boolean

## Response `200`

The listed rows, and on a real run the deleted counts.

- object
  - `tenant` string, required
  - `author` string, required
  - `user` string, required
  - `dry_run` boolean, required
  - `rows` object, required
    - `demo` object[], required
      - `id` string, required
      - `day` string, required
      - `worked_hours` number, required
      - `matter_id` string, nullable, required
      - `status` string, required
      - `narrative` string, required
    - `unmatched` object[], required
      - `id` string, required
      - `day` string, required
      - `worked_hours` number, required
      - `matter_id` string, nullable, required
      - `status` string, required
      - `narrative` string, required
  - `kept` object
    - `demo` object[], required
      - `id` string, required
      - `day` string, required
      - `worked_hours` number, required
      - `matter_id` string, nullable, required
      - `status` string, required
      - `narrative` string, required
  - `deleted` object, nullable, required
    - `demo` integer, required
    - `unmatched` integer, required
    - `total` integer, required

## Other responses

- `400`: The body, query or path did not validate; `errors` lists the fields.
- `401`: No bearer token, or one that does not verify or has expired.
- `403`: The token verified but may not do this: no organisation, not provisioned, wrong role, or a device problem.
- `404`: No such row for this tenant.
- `503`: A capability this service was not configured with, or a practice system that could not be reached; the `type` says which.

---

[API](https://skmtc.dev/sixminute/apis/sixminute-api.md) - [All operations](https://skmtc.dev/sixminute/apis/sixminute-api/llms.txt) - [OpenAPI document](https://skmtc.dev/sixminute/apis/sixminute-api/revisions/605577eadc10?raw)
