---
title: "Article Render Now"
method: POST
path: "/v1/articles/{slug}/render-now"
---

# Article Render Now

`POST /v1/articles/{slug}/render-now`

## 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/articles/{slug}/render-now`
- Auth: none declared

Listener-driven render-on-demand.

Resolves the article by ``slug``. If a ``done`` render-job already
exists, returns 200 + the audio URL immediately (idempotent). Else
enqueues a fresh job with ``priority="high"`` and returns 202 with
a Location header pointing at the public audio polling endpoint
``/v1/articles/{slug}/audio``.

Concurrency: at most ``MAX_IN_FLIGHT_RENDERS_PER_LISTENER`` queued/
running render-jobs may exist at once for articles the listener
has forwarded (intake_listener_email match). Excess requests get a
429 with a ``Retry-After`` so the client backs off — matches the
contract of the per-IP rate-limit but uses worker depth as the
signal.

## Path parameters

- `slug` string, required

## Request body

- RenderNowRequest: POST body for /v1/articles/{slug}/render-now. ``listener_token`` is required so we can authenticate the request and bill / cap to the right listener. A 32-hex token is the canonical shape; the field is bounded to 64 chars to accept legacy longer-form tokens without DoS.
  - `listener_token` string, required

## Response `200`

Successful Response

- unknown

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