---
title: "Put a journaled write back"
method: POST
path: "/credits/catalog/changes/{requestId}/revert"
tags: ["Catalog"]
---

# Put a journaled write back

`POST /credits/catalog/changes/{requestId}/revert`

## Request

- Base URL: `https://api.paywithlocus.com/api`
- URL: `https://api.paywithlocus.com/api/credits/catalog/changes/{requestId}/revert`
- Auth: one of:
  - HTTP bearer
  - HTTP bearer

Restores the rows one whole-catalog write moved, each to exactly what it held before (an explicit on or off, or inherit), and only where the write is still the last word on it: the row must read as the write left it (a turn-on left explicit on rows; a turn-off left provider rows off and the tool rows it converged at inherit) and no later write may have journaled the slug. Anything else was decided since and is skipped and counted, never clobbered. Rows are never deleted, so putting an earlier write back afterwards still finds them. A tool pinned now stays on and counts as skipped: putting a turn-on back never takes a pin away. Any other tool put back off drops its MCP pin; a tool put back on does not get its pin back, but pass the unpinned slugs the write answered with as repin and the answer names those that came back on. Only the id a whole-catalog write answered with (all-on:… or all-off:…) is accepted: other writers converge exceptions their journals do not record, so their state cannot be rebuilt exactly. The revert is journaled like any other write, under this request's id.

## Path parameters

- `requestId` string, required

## Request body

- object
  - `repin` string[]: Tool slugs whose pins the write cleared (its unpinned answer).

## Response `200`

Rows restored where they still held; skipped counts rows decided since; repin names the asked-about tools now back on

- object
  - `success` unknown, required
  - `reverted` integer, required
  - `skipped` integer, required
  - `skippedSlugs` string[], required: The first 200 slugs left alone because they were decided since; skipped is the full count.
  - `repin` string[], required: Of the slugs asked about, those whose tool this revert put back on.
  - `requestId` string, required

## Other responses

- `400`: requestId empty, longer than 200 characters, or not one a whole-catalog write answered with; or a body that is not { repin?: string[] }
- `403`: The authenticated management credential lacks one or more required scopes
- `404`: No catalog changes are journaled for that request

---

[API](https://skmtc.dev/paywithlocus/apis/locus-pro-api.md) - [All operations](https://skmtc.dev/paywithlocus/apis/locus-pro-api/llms.txt) - [OpenAPI document](https://skmtc.dev/paywithlocus/apis/locus-pro-api/revisions/aab8fa5d6cef?raw)
