---
title: "Queue rendered content production"
method: POST
path: "/content/jobs"
tags: ["Content"]
---

# Queue rendered content production

`POST /content/jobs`

## Request

- Base URL: `https://app.getprolifik.com/api/v1`
- URL: `https://app.getprolifik.com/api/v1/content/jobs`
- Auth: HTTP bearer

Queues a rendered batch in any Content Studio format and returns before generation finishes. Poll /content/jobs/{jobId}; job status moves queued → generating → ready_for_review | completed | partially_failed (or canceled). Pieces carry signed output URLs once status is ready. Each piece uses one render from the plan's monthly render budget (GET /usage); a job needing more renders than remain is refused with 402.

## Headers

- `Idempotency-Key` string, required

## Request body

- CreateContentJob
  - `brandId` string, uuid, required
  - `contentSourceId` string, uuid: A ready content source to write from. Omit to write from the brand context alone.
  - `format` 'carousel' | 'kinetic-type' | 'scene-swap' | 'b-roll' | 'caption-card' | 'talking-head', required: carousel = Image Carousel, kinetic-type = Text Story, scene-swap = Meme Reaction, b-roll = Clip Montage, caption-card = Caption Meme, talking-head = Video Hook & Demo (requires demoVideoKey).
  - `demoVideoKey` string: talking-head only, and required there. Key of the product recording that plays after the hook: a video from GET /content/media (the user's media library) or a key from POST /content/uploads. Must be an mp4, mov or webm of at most 100 MB and 60 seconds.
  - `hookVideoKey` string: talking-head only, optional, at most 15 seconds. Your own hook clip: a video key from GET /content/media (e.g. an AI Studio talking head) or an upload key from POST /content/uploads. Omit it and each piece gets a library hook clip.
  - `count` integer
  - `deliveryMode` 'download' | 'schedule': Intent only; pieces are published explicitly through /content/pieces/{pieceId}/publish either way.
  - `includeLogo` boolean
  - `mentionBrand` boolean
  - `customTexts` object[]: Your own copy per post, used verbatim instead of AI-written text. One entry per post in order; null lets AI write that post. Carousel entries use slides, every other format uses text.
    - `text` string
    - `slides` string[]
  - `assetFilters` object: Per-format library filters. carousel: theme, personTags. kinetic-type: personTags, audioMood. b-roll: theme, personTags, audioMood. scene-swap: memePersonTags, backgroundPersonTags, memeReactions. talking-head: audioMood. caption-card accepts none.
    - `theme` string: A library category name for the format.
    - `personTags` string[]
    - `audioMood` 'none' | 'upbeat' | 'chill' | 'cinematic' | 'motivational' | 'dramatic': none = no music.
    - `memePersonTags` string[]: Only meme clips carrying one of these tags. Tags are matched case-insensitively against the clip's tags.
    - `backgroundPersonTags` string[]: Only background clips carrying one of these tags. Tags are matched case-insensitively against the clip's tags.
    - `memeReactions` string[]: Reaction-first filter: narrows the meme pool to clips the casting pass scored at least 60/100 on one of these reactions, and the caption is written to set up that reaction. When no clip qualifies the whole audible pool is used instead and a warning is logged.

## Response `202`

Content job accepted

- object

## Other responses

- `400`: Request failed
- `401`: Request failed
- `402`: Payment required. error.code is subscription_required (the plan does not include this feature, or the key's account no longer has a plan: API keys are paid-only, so every write from a key whose account has none is refused; see error.upgradeUrl), insufficient_credits (the AI-credit balance is short; see error.needed, error.balance, error.upgradeUrl), or quota_exceeded (a plan quota such as monthly videos or clip minutes).
- `403`: Request failed
- `409`: Request failed
- `429`: Request failed

---

[API](https://skmtc.dev/getprolifik/apis/prolifik-public-api.md) · [All operations](https://skmtc.dev/getprolifik/apis/prolifik-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/getprolifik/apis/prolifik-public-api/revisions/301e79c5763c?raw)
