---
title: "Admin Articles Rerender Stale Audio"
method: POST
path: "/v1/admin/articles/rerender-stale-audio"
---

# Admin Articles Rerender Stale Audio

`POST /v1/admin/articles/rerender-stale-audio`

## 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/rerender-stale-audio`
- Auth: none declared

Re-enqueue audio render jobs for articles whose ``body_text`` was
rewritten (typically by the PII sanitizer scrub) after the canonical
audio was already cached in R2. The audio in R2 still narrates the
pre-scrub text — we need fresh renders so listeners hear the cleaned
body.

Resolution per article:
  * Pick the voice_id from the most-recent done RenderJob (the voice
    the audio listeners are currently hearing). Falls back to the
    publisher's preferred_voice_id, else "kira" — the platform
    default and a member of VALID_VOICE_IDS.
  * Use the article's current cleaned ``body_text``.
  * Inherit ``speed`` from the most-recent done job; default 1.0.
  * Enqueue with ``job_priority='low'`` so this backfill doesn't
    starve foreground listener intake.

Idempotent: an article is skipped if its most-recent done RenderJob
already rendered the current body_text (i.e. text matches).

## Headers

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

## Request body

- RerenderStaleBody
  - `article_ids` string[], nullable
  - `all_stale` boolean
  - `limit` integer
  - `dry_run` boolean

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