> For the complete documentation index, see [llms.txt](https://docs.autocontentapi.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.autocontentapi.com/quick-start/explainer-videos/from-custom-script.md).

# Create from a Custom Script

The standard `/content/Create` Explainer flow does **not** support exact narration scripts. Its `text` field is an instruction for NotebookLM, which may rewrite, expand, or reorganize the supplied wording. Speaker-labelled text such as `SPEAKER_00:` is rejected for video requests so it cannot be mistaken for an exact-script contract.

If you need exact supplied wording in the legacy API, use the dedicated Avatar/TTS endpoint `/video/CreateShortsFromScript`. It creates an Avatar short rather than the illustrated NotebookLM Explainer produced by `/content/Create`.

```bash
curl -X POST "https://api.autocontentapi.com/video/CreateShortsFromScript" \
  -H "accept: application/json" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "script": [
      {
        "avatarId": 1,
        "text": "Willkommen zurück!"
      },
      {
        "avatarId": 2,
        "text": "Heute erklären wir die wichtigsten Grundlagen."
      }
    ],
    "subtitles": true
  }'
```

Each script entry assigns exact narration text to an Avatar. Get available Avatar IDs from `/video/GetAvatars`; an Avatar uses its configured Voice, which you can change with `/video/UpdateAvatarVoice` using a numeric Voice ID from `/content/GetVoices`.

If you need the illustrated Explainer style, continue to use `/content/Create`, but treat `text` as generation guidance rather than approved narration copy.

For exact narration in illustrated or Avatar-based Short, Explainer, Launch, Product Demo, and Ad videos, use the new Platform API's strongly typed `narration_script` contract. See the [Platform SDK exact-narration examples](https://platform.autocontentapi.com/sdk#sdk-assets) for one- and two-speaker Voice/Avatar requests.

## Try the Avatar/TTS alternative in code

* [C#](/code-samples/explainer-videos/csharp/from-custom-script.md)
* [Node.js](/code-samples/explainer-videos/nodejs/from-custom-script.md)
* [Java](/code-samples/explainer-videos/java/from-custom-script.md)
* [PHP](/code-samples/explainer-videos/php/from-custom-script.md)
* [Python](/code-samples/explainer-videos/python/from-custom-script.md)
