---
title: "Generate a vertical Short from a text prompt (paused: answers 403 reason=disabled)"
method: POST
path: "/api/v1/generate"
deprecated: true
---

# Generate a vertical Short from a text prompt (paused: answers 403 reason=disabled)

`POST /api/v1/generate`

## Request

- Base URL: `https://everpop.app`
- URL: `https://everpop.app/api/v1/generate`
- Auth: HTTP bearer

> **Deprecated.**

Paused: returns 403 with reason=disabled (code=disabled) and creates nothing. Marked deprecated while paused; it may return. To make Shorts now, upload a file and call POST /api/v1/clip.

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `prompt` string, required
  - `clipCount` integer
  - `voice` 'alloy' | 'echo' | 'fable' | 'onyx' | 'nova' | 'shimmer'
  - `tone` 'educational' | 'storytime' | 'hype' | 'calm'
  - `targetSeconds` integer
  - `captionStyle` 'pop' | 'boxed' | 'minimal' | 'clean' | 'hormozi'

## Response `200`

When enabled: render started — poll the returned job (1–3 min).

- JobRefEnvelope
  - `ok` unknown, required
  - `data` JobRef, required
    - `jobId` string, required
    - `status` 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'CANCELED', required
    - `poll` string, required: Relative URL to poll, e.g. /api/v1/jobs/{id}

## Other responses

- `401`: The API key did not authenticate. code=key_missing: no Authorization: Bearer epk_... header. code=key_invalid: the key is unknown or revoked. code=key_expired: the key passed its expiry; the user creates a new one in Dashboard → API.
- `402`: REST and MCP need the Pro or Scale plan. reason=subscription: the account has no active subscription (subscribe, or redeem an invite code). reason=plan: the account's plan doesn't include this (API and agent access need Pro or Scale).
- `403`: reason=disabled (code=disabled): prompt generation is paused and nothing was created. Also code=scope (read-only key) or code=suspended.
- `409`: code=idempotency_conflict — the Idempotency-Key was already used with different options.
- `422`: code=validation_failed — the body did not validate (issues says which field).
- `429`: Too many requests. code=rate_limited: the per-minute limit; wait Retry-After (60) seconds. code=quota_exhausted (with used, limit, resetsAt, retryable: false): the monthly allowance is used up; Retry-After is the seconds until resetsAt — tell the user rather than wait. code=queue_capacity (retryable: true): the render queue is full; retry after Retry-After (180).
- `503`: code=engine_offline — the clipping service is briefly unavailable; nothing was charged. Retry in a few minutes.

---

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