---
title: "Regenerate or improve content"
method: POST
path: "/content/{id}/regenerate"
tags: ["Content"]
---

# Regenerate or improve content

`POST /content/{id}/regenerate`

## Request

- Base URL: `https://next.frase.io/api/v1`
- URL: `https://next.frase.io/api/v1/content/{id}/regenerate`
- Auth: one of:
  - API key in header `X-API-KEY`
  - HTTP bearer

Regenerate content from its brief (full regeneration) or improve it with specific instructions. When instructions are provided, the content is rewritten using AI with those instructions. Without instructions, the content is fully regenerated from its brief. Both operations run asynchronously.

## Path parameters

- `id` string, uuid, required

## Request body

- object
  - `instructions` string: Improvement instructions for AI rewriting. If omitted, content is fully regenerated from its brief.
  - `brief_id` string, uuid: Brief ID to regenerate from. Uses the content's linked brief if not specified.

## Response `202`

Regeneration started

- object
  - `data` object
    - `id` string, uuid
    - `status` 'generating' | 'improving'
    - `brief_id` string, uuid
    - `status_url` string: URL to check generation status

## Other responses

- `401`: Authentication failed
- `403`: Refused because the organization's SUBSCRIPTION is not in good standing (`subscription_inactive`): canceled, paused, past due beyond the grace period, or an expired trial. Nothing is regenerated and no credit is spent, and none of the quota remedies clear it — an organization admin resolves it in Billing settings. The same status also carries the AUTH-layer refusals, which are about the KEY rather than the account: `insufficient_scope` (the key lacks `write:content`), `ip_not_allowed` (the request came from an address outside the key's allowlist), and `key_missing_user` (the key has no associated user and must be regenerated). Branch on `error.code`, not on the status.
- `404`: Resource not found
- `422`: Validation failed
- `429`: Refused for a quota: the organization's monthly article allowance (`article_limit_exceeded`) or the SITE's own monthly article budget (`site_article_budget_exceeded`). A full regeneration spends from the same allowance a fresh generation does — except when the article was already charged in the current billing period, which is free and never refused for quota. Nothing is regenerated and no credit is spent. `site_article_budget_exceeded` is a separate cap from the organization allowance: paid overage and plan upgrades do NOT lift it. An organization admin raises it in Site settings. `rate_limit_exceeded` is a different thing entirely and DOES clear on a clock: full regeneration (a request with no `instructions`) is capped at 30 calls per hour for each key owner in an organization, and this response carries `Retry-After` (seconds) plus the `X-RateLimit-*` headers. It is what bounds the free case above — a rewrite the billing period already paid for costs nothing, so the hourly cap is the only limit on repeating it. Requests WITH `instructions` take the improvement path and are not subject to it.

---

[API](https://skmtc.dev/frase/apis/frase-api.md) · [All operations](https://skmtc.dev/frase/apis/frase-api/llms.txt) · [OpenAPI document](https://skmtc.dev/frase/apis/frase-api/revisions/7fb75d89f7a4?raw)
