Scripts
Generate scripts separately for preview and editing before converting to audio (video coming soon). This workflow allows you to review and modify the generated script before committing to media generation.
Two-Step Workflow
The scripts API enables a preview-edit-convert workflow:
- Generate Script - Create a script from your changelog content
- Review & Edit - Preview the script and make any desired changes
- Convert to Media - Generate audio (video coming soon) from the (optionally edited) script
Note: Scripts expire after 2 hours. Make sure to convert your script before it expires, or generate a new one.
Generate a script
POST
/scriptsGenerate a script
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
X-Organization-ID | string | Optional | Specify organization context for multi-org users. If omitted, uses default org for API key. |
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
content | string | Required | |
mode | string changelogproduct-feature | Optional(default: changelog) | |
settings | object | Optional | |
screenshot_urls | string[] | Optional | |
additional_context | string | Optional | Additional context for the AI script generator |
further_details | string | Optional | Deprecated alias for additional_context |
use_history | boolean | Optional(default: true) | |
history_limit | integer | Optional(default: 10) |
settings
| Parameter | Type | Required | Description |
|---|---|---|---|
product_name | string | Optional | |
version | string | Optional | |
tone | string casualprofessionalenthusiastictechnical | Optional(default: casual) | |
audience | string | Optional | |
verbosity | string briefnormaldetailed | Optional(default: normal) | |
duration | string briefnormaldetailed | Optional(default: normal) | Alias for verbosity |
Body
{"content": "## v2.0.0 Release\n- New feature A\n- Bug fix B","mode": "changelog","settings": {"product_name": "MyApp","tone": "casual"},"additional_context": "Focus on developer experience improvements.","use_history": true,"history_limit": 10}
Convert a script to audio
POST
/scripts/{id}/convertConvert a script to audio
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Required | Script ID in format script_xxxxxxxxxxxx |
X-Organization-ID | string | Optional | Specify organization context for multi-org users. If omitted, uses default org for API key. |
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
output_format | string audiovideo | Required | |
edited_content | string | Optional | Optionally provide edited script content to use instead of the original |
settings | object | Optional | |
webhook_url | string | Optional | |
wait | boolean | Optional(default: false) | |
voice | object | Optional | TTS voice configuration. Applies to ElevenLabs when provider is "elevenlabs". |
settings
| Parameter | Type | Required | Description |
|---|---|---|---|
tone | string | Optional | |
audience | string | Optional | |
verbosity | string | Optional |
voice
| Parameter | Type | Required | Description |
|---|---|---|---|
provider | string geminielevenlabs | Optional(default: gemini) | Text-to-speech provider |
delivery_preset | string measureddynamictheatrical | Optional | Controls the pacing and energy of the narration |
expression_settings.emotional_range | string subtlemoderatefull | Optional | |
expression_settings.allow_whispering | boolean | Optional | |
expression_settings.allow_laughter | boolean | Optional | |
expression_settings.emphasis_style | string pausesboth | Optional | |
expression_settings.emotional_arc | boolean | Optional | |
pronunciation_notes | string | Optional | Pronunciation guidance for product names, acronyms, etc. |
voice_id | string | Optional | ElevenLabs voice ID for single-speaker mode |
model | string v3flash_v2 | Optional | ElevenLabs model to use |
host_voice_ids.host1 | string | Optional | ElevenLabs voice ID for host 1 |
host_voice_ids.host2 | string | Optional | ElevenLabs voice ID for host 2 |
Body
{"output_format": "audio","edited_content": "Updated script content with edits..."}
Script Expiration
Generated scripts expire after 2 hours. Attempting to convert an expired script returns a 410 Gone error:
{"success": false,"error": {"code": "SCRIPT_NOT_FOUND","message": "Script has expired","documentation_url": "https://docs.logtalk.io/errors/resources#script"},"request_id": "req_1kn5f2a_a3b4c5d6e7f8","timestamp": "2026-01-18T17:00:00.000Z"}
If your script expires, simply generate a new one with POST /v1/scripts.