> ## Documentation Index
> Fetch the complete documentation index at: https://docs.trystratos.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Content

> Generate, list, approve, and reject slideshows / illustrated decks / hook videos.

## Create content

<ParamField body="brief" type="object">
  <Expandable title="fields">
    <ParamField body="topic" type="string" />

    <ParamField body="archetype" type="string">
      `listicle` | `transformation` | `pov_results` | `authority` | `motivational`
    </ParamField>

    <ParamField body="hook" type="string">
      Use this exact hook instead of generating one.
    </ParamField>

    <ParamField body="slideCount" type="integer">
      2–10, default 6.
    </ParamField>

    <ParamField body="ctaMode" type="string">
      `soft` | `direct` | `none`
    </ParamField>
  </Expandable>
</ParamField>

Requires `content:write` and an `Idempotency-Key` header. Costs 1 credit for `type: "slideshow"`, charged only on success.

```bash theme={null}
curl -X POST https://www.try-orbit.com/api/v1/content \
  -H "Authorization: Bearer $STRATOS_API_KEY" -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"appId": "product_a1b2c3", "type": "slideshow", "brief": {"topic": "tracking macros without obsessing"}}'
```

```json 201 theme={null}
{
  "data": {
    "id": "content_x1y2z3",
    "appId": "product_a1b2c3",
    "type": "slideshow",
    "status": "ready",
    "approvalStatus": "pending",
    "result": {
      "hook": "5 macro tracking mistakes that stall your progress",
      "hookOptions": ["...", "...", "..."],
      "bodySlides": [{ "text": "..." }],
      "ctaSoft": "...",
      "ctaHard": "...",
      "caption": "...",
      "hashtags": ["#macros", "#tracking"]
    },
    "costCharged": 1,
    "createdAt": "2026-08-15T12:00:00.000Z"
  }
}
```

<Warning>
  `type: "illustrated"` or `"hook_video"` returns `201` with `notice: "generation_not_wired"` and `status: "failed"` — the row is created (so you can see the gap explicitly) but no generation runs. Their pipelines are asynchronous Durable-Object state machines not yet integrated with this API. Use `type: "slideshow"` today.
</Warning>

<Warning>
  A `slideshow`'s `result` never includes rendered slide **images** — only text. Image compositing is a separate, currently client-side-only step (see [Scheduling](/api-reference/schedules)). `POST /v1/schedules` will fail with `409 no_images` on this content until that gap closes.
</Warning>

On insufficient credits: `402` with `{"error": {"code": "insufficient_credits", "insufficient": true, ...}}`.

## List content

`GET /v1/content` — requires `content:read`. Up to 100 rows, newest first.

## Get content

`GET /v1/content/{id}` — requires `content:read`.

## Approve / reject

`POST /v1/content/{id}/approve` and `POST /v1/content/{id}/reject` — requires `content:approve`. Approve fails with `409 not_ready` if `status` isn't `"ready"` yet. See [The approval gate](/the-approval-gate).

## Remix

`POST /v1/content/{id}/remix` — not yet wired (returns `501 not_implemented`), for the same reason `illustrated`/`hook_video` generation isn't. Mirrors the app's own free remix (re-pick images, keep text) once it lands.
