---
title: "Admin Backfill Opus"
method: POST
path: "/v1/admin/articles/backfill-opus"
---

# Admin Backfill Opus

`POST /v1/admin/articles/backfill-opus`

## 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/articles/backfill-opus`
- Auth: none declared

Walk every done render and produce the ``.opus`` sibling in R2
for any key that doesn't have one. Returns immediately after
spawning the background task — poll
``/v1/admin/articles/backfill-opus/status`` for progress.

Earlier revisions enqueued through ``audio_normalize_queue`` (an
in-process asyncio.Queue). That worked for new renders because
the render worker and normalize worker share a process, but not
for this admin endpoint — the API and worker are separate Fly
machines, so keys queued on the API never reach the worker's
consumer. We now do the work directly on whichever machine
receives the call (Docker image is identical so ffmpeg is there
too).

## Query parameters

- `dry_run` boolean
- `limit` integer
- `sleep_between` number

## Headers

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

## 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)
