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

# Writing, research & transcripts

> Thirteen capabilities that produce text rather than pictures — and which one to reach for, because several of them look interchangeable and are not.

These all answer synchronously: you send a body, you wait, you get the result.
There is no job to poll. They are slow by nature — some hold a model for
minutes — so set a generous client timeout rather than a short one with retries.

## Starting from nothing

| You have             | Reach for                | Required                                          |
| -------------------- | ------------------------ | ------------------------------------------------- |
| A subject            | `POST /v1/text/research` | `domain`, `topic`                                 |
| A seed video         | `POST /v1/text/script`   | `sourceUrl`                                       |
| Up to ten references | `POST /v1/video/remix`   | `sources`, `instructions`                         |
| A competitor's post  | `POST /v1/text/adapt`    | `sourceTitle`, `sourcePlatform`, `targetPlatform` |
| A premise            | `POST /v1/text/film`     | `title`, `logline`, `genre`                       |

`text.script` and `video.remix` are the pair worth telling apart. `text.script`
watches **one** video and researches around it, fact-checking its own claims as
it writes and returning a claim ledger with the script. `video.remix` reads **up
to ten** references — URLs it transcribes for you, or transcripts you send — and
synthesises one original script across them. One is depth on a single source; the
other is synthesis across many.

```bash theme={null}
curl -X POST https://api.sigmora.org/v1/text/research \
  -H "Authorization: Bearer $SIGMORA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"domain":"finance","topic":"Why Kenyan SACCOs outperform bank savings rates"}'
```

The response carries the brief under `research`, with its sources. Everything in
this family returns its payload under a field named for what it produced —
`script`, `research`, `paraphrase`, `questions`, `solution`, `outline`, `copy`.

## Starting from something you already wrote

| You have                   | Reach for                  | Required                            |
| -------------------------- | -------------------------- | ----------------------------------- |
| Long-form text to restyle  | `POST /v1/text/paraphrase` | `content`, `contentType`            |
| Content to post natively   | `POST /v1/text/copywrite`  | `platform`, `content`               |
| Source material to test on | `POST /v1/text/questions`  | `text`, `type`, `numberOfQuestions` |
| A question to work through | `POST /v1/text/solve`      | `domain`, `question`                |
| A script and its claims    | `POST /v1/text/article`    | `script`                            |

`text.paraphrase` and `text.copywrite` also look alike and are not.
`paraphrase` restyles long-form **as** long-form — same material, new tone,
audience and register, with `preserveKeywords` for terms that must survive
verbatim. `copywrite` rewrites content **down** into one platform's native post,
with that platform's conventions, length ceiling and hashtag habits.

`text.article` is the one that turns a finished script into something
publishable: it carries the citations through and returns Schema.org markup
alongside the prose, under `jsonLd`.

## Working from a transcript

| Capability                | What it does                                                                            | Required          |
| ------------------------- | --------------------------------------------------------------------------------------- | ----------------- |
| `POST /v1/text/localize`  | Translates into many languages with cue-accurate captions, optionally dubbed            | `targetLanguages` |
| `POST /v1/video/moments`  | Scores a transcript and returns the spans worth cutting                                 | —                 |
| `POST /v1/text/packaging` | Turns a finished edit's transcript into titles, description, tags and thumbnail prompts | `channel`, `asr`  |

<Warning>
  `text.localize` and `video.moments` each take their transcript **one of two
  ways**: `transcript` sent inline, or `assetId` naming one this workspace has
  already had transcribed. Send exactly one — not both, and not neither. Both
  would leave it ambiguous which was translated and which was priced, and those
  must be the same thing.
</Warning>

Both are priced off the transcript, so the response tells you what was counted:
`languageMinutes` for localize, `transcriptMinutes` for moments. Cue and segment
timings are validated — an `end` earlier than its `start` is refused rather than
rendered.

## The two that are not text

They belong here because they are synchronous and file into the same project:

* `POST /v1/image/thumbnail` — a platform-sized thumbnail from a title, with the
  brief LLM-refined first. Only `title` is required, but `contentSummary` is the
  biggest lever on quality after `subject`: a thumbnail written from a title
  alone is guessing at the content. Returns `thumbnail.url`.
* `POST /v1/audio/music` — music from weighted prompts, up to three minutes.
  Returns `music.url` and the `blocks` you were billed for.

Both return a URL you fetch directly, the same rule as
[renders](/document-to-video).

## Prices are live, not in this table

Deliberately absent above. `GET /v1/capabilities` reads the same table the charge
is taken from, so it cannot disagree with your invoice — and it tells you which
of these this deployment actually serves:

```bash theme={null}
curl https://api.sigmora.org/v1/capabilities \
  -H "Authorization: Bearer $SIGMORA_API_KEY"
```

Every response carries `credits` — what was **actually** taken, not what was
quoted — and `creditBalance` after it. A call that fails, including one whose
engine answered `200` carrying nothing usable, is free.

<CardGroup cols={2}>
  <Card title="From a document to a video" icon="film" href="/document-to-video">
    Once you have the writing, this is how it becomes a narrated file.
  </Card>

  <Card title="Errors" icon="triangle-exclamation" href="/errors">
    The pairs that share a status code and call for opposite responses.
  </Card>
</CardGroup>
