---
title: "Admin Patch Publisher Removal"
method: PATCH
path: "/v1/admin/publishers/{tenant_slug}/removal"
tags: ["admin-publisher-removal"]
---

# Admin Patch Publisher Removal

`PATCH /v1/admin/publishers/{tenant_slug}/removal`

## Request

- Base URL: `https://api.storyflo.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.storyflo.com/v1/admin/publishers/{tenant_slug}/removal`
- Auth: none declared

Record (or clear) a publisher's removal request. Idempotent.

Re-running with ``revoked: true`` is a no-op on ``takedown_at`` — the
original stamp is kept and ``already_revoked`` comes back true — but it
WILL re-pause any source that has since been re-activated, and it will
update ``takedown_reason`` when a new one is supplied. That is
deliberate: the endpoint's job is to make the current state match the
creator's instruction every time it is called.

## Path parameters

- `tenant_slug` string, required

## Headers

- `x-storyflo-email-token` string, nullable

## Request body

- PublisherRemovalPatch: ``revoked`` is required and has no default — recording a removal and undoing one must both be typed out, never inferred from an empty body.
  - `revoked` boolean, required: true = removal is on record; ingestion mints no further rows. false = clear the stamp (does not resume paused sources).
  - `reason` string, nullable: Operator provenance — where the request came from. e.g. 'C&D via inbox msg 412, 2026-06-05'. Stored on publishers.takedown_reason.

## Response `200`

Successful Response

- object

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/storyflo/apis/storyflo-inference-router.md) · [All operations](https://skmtc.dev/storyflo/apis/storyflo-inference-router/llms.txt) · [OpenAPI document](https://skmtc.dev/storyflo/apis/storyflo-inference-router/revisions/c3a1a735ac7a?raw)
