# Subtitle Converter & Resync — SRT/VTT/ASS (`lumaxys/subtitle-converter-and-resync`) Actor

Convert SRT, VTT, ASS/SSA and JSON subtitles, then fix timing with a global offset, framerate conversion or two-point synchronization. Supports batch processing and multiple output formats without third-party APIs.

- **URL**: https://apify.com/lumaxys/subtitle-converter-and-resync.md
- **Developed by:** [François Fernandez](https://apify.com/lumaxys) (community)
- **Categories:** Developer tools, Videos, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 1,000 converted subtitle files

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Subtitle Converter & Resync — SRT, VTT, ASS, TXT, JSON

Convert subtitle files between formats and **fix broken timing**, including the drift that a simple offset can never repair.

No video or audio upload. No transcription. No third-party API key. Pure text processing keeps runs fast and inexpensive, even for long subtitle files.

---

### Which Actor should I use?

| I want to… | Use |
|---|---|
| Convert a subtitle format, or fix subtitle timing | **This Actor** |
| Turn a video or audio file into translated subtitles | [**Video & Audio to Translated Subtitles**](https://apify.com/lumaxys/professional-subtitle-formatter) |
| Check and repair an existing SRT/VTT against professional rules | [**Professional Subtitle QC**](https://apify.com/lumaxys/subtitle-qc) |
| Do everything: transcribe, translate, QC and burn subtitles into a video | [**Professional Subtitle Translator & Video Captioner**](https://apify.com/lumaxys/media-to-professional-subtitles) |

---

### What it does

**Format conversion** — SRT, VTT, ASS/SSA and JSON in; SRT, VTT, ASS, TXT and JSON out. Ask for several output formats in one run.

**Timing repair**, three ways:

| Your problem | Use |
|---|---|
| Subtitles are late (or early) by the same amount all the way through | **Global offset** |
| Subtitles start fine, then drift further and further out | **Framerate conversion** or **two-point sync** |
| They drift and you do not know the framerates | **Two-point sync** |

### Common uses

- Convert subtitle files for Premiere Pro, DaVinci Resolve, CapCut, Final Cut Pro, players, or delivery platforms
- Repair a constant subtitle delay without editing every cue
- Correct progressive drift caused by a framerate mismatch
- Resynchronize a file from two known dialogue timestamps
- Convert several subtitle files or create several output formats in one automated run
- Integrate subtitle conversion into Make, Zapier, API, or agent workflows

#### Why an offset is often not enough

A constant lag and a framerate mismatch look identical in the first minute and behave completely differently by minute ninety. A file authored at 25 fps played against a 23.976 fps video drifts by about **4%** — roughly three and a half minutes over a feature film. No offset fixes that, because the error grows with time.

Two-point sync solves both at once. Give the current and correct timestamps of two lines far apart — ideally the first and the last of the file — and the Actor computes the scale and the shift together.

---

### Input

| Field | Description |
|---|---|
| `subtitleText` | **Easiest option:** paste the complete contents of one SRT, VTT, ASS/SSA or JSON file. No upload storage is needed. |
| `pastedFileName` | Optional filename used for outputs created from pasted content. Default `pasted-subtitles.srt`. |
| `subtitleStore` | Select the same Apify Key-Value Store used by `subtitleFiles`. This grants read-only access to private uploads under Apify limited permissions. Not needed for public direct URLs. |
| `subtitleFiles` | Upload one or more SRT, VTT, ASS/SSA or JSON files directly in the Apify Console. |
| `subtitleUrls` | Optional direct download URLs. **Direct file URLs, not YouTube or TikTok page links.** |
| `outputFormats` | Any of `srt`, `vtt`, `ass`, `txt`, `json`. Default `srt`. |
| `offsetMs` | Shift every cue. Negative = earlier, positive = later. |
| `sourceFps` / `targetFps` | Framerate the file was authored against, and the framerate of your video. Must be set together. |
| `useAnchorSync` + the four anchor fields | Two-point sync. The anchors must be at least 30 seconds apart. |
| `dropNegativeCues` | Remove cues pushed before zero instead of clamping them to 00:00:00. |
| `keepLineBreaksInTxt` | Preserve the original line layout in TXT output. |

Up to 20 files can be processed in one run. Each file may be up to 32 MB.
Uploaded files and direct URLs can be combined in the same batch.

#### Recommended: paste subtitle content

For the simplest Console workflow, copy all the text from one subtitle file
into **Paste your subtitles here — easiest option**, choose the output formats, and
run the Actor. This avoids private-storage permissions entirely and works with
SRT, VTT, ASS/SSA and JSON.

```json
{
  "subtitleText": "1\n00:00:01,000 --> 00:00:03,000\nHello world!\n",
  "pastedFileName": "episode-01.srt",
  "outputFormats": ["vtt", "json"],
  "offsetMs": 0
}
````

#### Advanced: private file uploads on Apify

Apify runs Store Actors with limited permissions. When uploading a private
file, first select a Key-Value Store under **Upload storage**, then choose that
same store in the **Subtitle files** uploader. The Actor receives read-only
access to that store for the duration of the run. No API token or environment
variable is required.

#### Example — fix a 2-second lag and export both formats

```json
{
  "subtitleUrls": ["https://example.com/episode-01.srt"],
  "outputFormats": ["srt", "vtt"],
  "offsetMs": -2000
}
```

#### Example — two-point sync on a drifting file

```json
{
  "subtitleUrls": ["https://example.com/feature.srt"],
  "outputFormats": ["srt"],
  "useAnchorSync": true,
  "anchorObservedA": "00:00:04,120",
  "anchorDesiredA": "00:00:02,000",
  "anchorObservedB": "01:38:12,400",
  "anchorDesiredB": "01:34:57,000"
}
```

### Free readiness check

Running the Actor without a subtitle file or URL performs a zero-cost readiness
check. It validates the input configuration, writes an `OUTPUT` record with
`status: "ready"`, and does not charge `actor-start` or `converted-file`.

***

### Output

Converted files land in the **key-value store**, one per input file per format, keeping the original filename stem.

The **dataset** holds one row per input file: detected format, cue count, the retiming that was applied, how many cues were clamped or dropped, the files written, and any parse errors found.

The `OUTPUT` record contains the complete run summary: requested and converted
file counts, failures, output formats, retiming, generated storage keys, safe
error messages, and charged events.

#### Secure file delivery

Generated subtitle files remain in the run's private Key-Value Store. Open the
run's **Storage > Key-value store** tab to download them. API users retrieve
the listed storage keys with their own Apify token. The Actor does not create
unsigned public download links.

#### Example output summary

```json
{
  "status": "success",
  "filesRequested": 1,
  "filesConverted": 1,
  "filesFailed": 0,
  "outputFormats": ["srt", "vtt", "json"],
  "retiming": "offset -2000 ms",
  "chargedEvents": {
    "actor-start": 1,
    "converted-file": 1
  },
  "files": [
    {
      "file": "episode-01.srt",
      "outputs": {
        "srt": "episode-01.srt",
        "vtt": "episode-01.vtt",
        "json": "episode-01.json"
      },
      "error": null
    }
  ]
}
```

***

### Pricing

This Actor uses pay-per-event pricing.

| Event | Price | When it is charged |
|---|---:|---|
| `actor-start` | $0.01 | Once per valid processing run |
| `converted-file` | $0.02 | Once per input file, **only after its output files exist** |

A file that produced nothing usable is never billed beyond the start event. Asking for five output formats costs the same as asking for one.

Typical custom-event totals:

- One successfully converted input file, with one or five output formats: **$0.03**
- Five successfully converted input files: **$0.11**
- One unreadable file that produces no output: **$0.01**

The Apify Console displays and enforces the maximum permitted run cost before
execution. Platform usage is included according to the Actor's pricing setup.

***

### Notes on robustness

The parser is deliberately **tolerant**: a malformed file produces reported issues, not a crashed run. Unreadable blocks are listed in `parseErrors` and the rest of the file is still converted.

- BOM, CRLF, Windows-1252 and Latin-1 files are handled.
- WebVTT `NOTE`, `STYLE` and `REGION` blocks are skipped correctly.
- ASS override tags (`{\an8}`, `{\pos(...)}`), drawing blocks and `\N` breaks are handled; `Comment:` events are dropped; out-of-order events are re-sorted.
- ASS centiseconds are read correctly — `0:00:01.50` is 1500 ms, not 1050 ms.
- Cues that round to zero duration are given 1 ms so players still display them.
- Files above 32 MB are rejected as not being subtitle files.
- One broken file does not stop the other files in the same batch.
- HTTP and HTTPS are the only accepted URL schemes.
- Localhost, private-network addresses, embedded credentials, and every
  unsafe redirect are rejected.
- The Apify token is attached only to official private Key-Value Store record
  URLs and is never forwarded to another host.
- Signed URL query strings and credentials are not copied into output errors.

### Limits

| Limit | Value |
|---|---|
| Accepted input formats | SRT, WebVTT, ASS/SSA, JSON |
| Available output formats | SRT, WebVTT, ASS, TXT, JSON |
| Input files per run | 20 maximum |
| File size | 32 MB maximum per file |
| Retiming anchors | At least 30 seconds apart |

Social-platform page links such as YouTube, TikTok, Instagram, Facebook, or X
are not subtitle-file URLs and are refused.

### Privacy

Conversion and retiming run entirely inside the Actor container. Subtitle text
is not sent to a transcription provider, translation provider, AI model, or
other third-party API. Uploaded inputs and generated outputs remain in Apify
storage according to the account's retention settings.

### Limitations

This Actor does not transcribe media, translate dialogue, check spelling or
meaning, perform professional subtitle QC, align cues to shot changes, or burn
subtitles into video. ASS styling is converted conservatively: positioning and
override tags are removed when producing text-oriented outputs. Use the linked
QC or full-pipeline Actor when those additional operations are required.

### Support

Include the Apify run ID, the selected input format, and a minimal reproducible
subtitle file when reporting a problem. Do not include private API tokens.

***

Built by Lumaxys.

# Actor input Schema

## `subtitleText` (type: `string`):

Paste the complete contents of one SRT, VTT, ASS/SSA or JSON subtitle file, choose an output format, then run. No upload storage is required.

## `pastedFileName` (type: `string`):

Optional output filename stem for Quick input, for example episode-01.srt. Used only when pasted subtitle content is provided.

## `outputFormats` (type: `array`):

One file is written per format. TXT drops all timings and produces a clean transcript.

## `subtitleStore` (type: `string`):

Required when uploading files: select a Key-Value Store here, then select that exact same store in Step 2. This safely grants read-only access to the uploaded files. Leave empty only when using public direct URLs.

## `subtitleFiles` (type: `array`):

Upload SRT, VTT, ASS/SSA or JSON files and choose the SAME Key-Value Store as in Step 1. You can upload several files and apply the same conversion and retiming to all of them.

## `subtitleUrls` (type: `array`):

Optional direct HTTP(S) download URLs to SRT, VTT, ASS/SSA or JSON files. Not YouTube or TikTok page links. Uploaded files and URLs can be combined in the same run.

## `offsetMs` (type: `integer`):

Shift every cue. Negative makes subtitles appear EARLIER, positive LATER. Use this when the lag is the same at the start and at the end of the file. If the lag grows over time, it is drift — use the framerate or two-point options instead.

## `sourceFps` (type: `string`):

The framerate the subtitles were authored against. Leave empty unless you know it.

## `targetFps` (type: `string`):

The framerate of the video you are syncing to. Must be set together with the source framerate.

## `useAnchorSync` (type: `boolean`):

The reliable fix when you do not know the framerates. Give the current and correct timestamps of two lines far apart — ideally the first and the last of the file — and both the constant lag and the progressive drift are solved at once.

## `anchorObservedA` (type: `string`):

As written in the file, e.g. 00:00:04,120. Seconds also accepted.

## `anchorDesiredA` (type: `string`):

When it should actually appear, e.g. 00:00:02,000.

## `anchorObservedB` (type: `string`):

Must be at least 30 seconds after the first anchor, or the computed scale is unreliable.

## `anchorDesiredB` (type: `string`):

When the last line should actually appear.

## `dropNegativeCues` (type: `boolean`):

Off by default: cues shifted before zero are clamped to 00:00:00, which is what a player does anyway. Turn on when you are trimming a leading section rather than correcting a lag.

## `keepLineBreaksInTxt` (type: `boolean`):

Off by default, so each cue becomes one paragraph. Turn on to preserve the original two-line layout.

## Actor input object example

```json
{
  "pastedFileName": "pasted-subtitles.srt",
  "outputFormats": [
    "srt"
  ],
  "subtitleUrls": [],
  "offsetMs": 0,
  "sourceFps": "",
  "targetFps": "",
  "useAnchorSync": false,
  "dropNegativeCues": false,
  "keepLineBreaksInTxt": false
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `files` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "subtitleUrls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("lumaxys/subtitle-converter-and-resync").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "subtitleUrls": [] }

# Run the Actor and wait for it to finish
run = client.actor("lumaxys/subtitle-converter-and-resync").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "subtitleUrls": []
}' |
apify call lumaxys/subtitle-converter-and-resync --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=lumaxys/subtitle-converter-and-resync",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Subtitle Converter & Resync — SRT/VTT/ASS",
        "description": "Convert SRT, VTT, ASS/SSA and JSON subtitles, then fix timing with a global offset, framerate conversion or two-point synchronization. Supports batch processing and multiple output formats without third-party APIs.",
        "version": "1.7",
        "x-build-id": "uUlf8tyPuek3DEZgd"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/lumaxys~subtitle-converter-and-resync/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-lumaxys-subtitle-converter-and-resync",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/lumaxys~subtitle-converter-and-resync/runs": {
            "post": {
                "operationId": "runs-sync-lumaxys-subtitle-converter-and-resync",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/lumaxys~subtitle-converter-and-resync/run-sync": {
            "post": {
                "operationId": "run-sync-lumaxys-subtitle-converter-and-resync",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "subtitleText": {
                        "title": "Paste your subtitles here — easiest option",
                        "type": "string",
                        "description": "Paste the complete contents of one SRT, VTT, ASS/SSA or JSON subtitle file, choose an output format, then run. No upload storage is required."
                    },
                    "pastedFileName": {
                        "title": "Filename for pasted subtitles",
                        "type": "string",
                        "description": "Optional output filename stem for Quick input, for example episode-01.srt. Used only when pasted subtitle content is provided.",
                        "default": "pasted-subtitles.srt"
                    },
                    "outputFormats": {
                        "title": "Choose output formats",
                        "type": "array",
                        "description": "One file is written per format. TXT drops all timings and produces a clean transcript.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "srt",
                                "vtt",
                                "ass",
                                "txt",
                                "json"
                            ],
                            "enumTitles": [
                                "SRT (SubRip)",
                                "VTT (WebVTT)",
                                "ASS (Advanced SubStation)",
                                "TXT (plain transcript)",
                                "JSON (structured cues)"
                            ]
                        },
                        "default": [
                            "srt"
                        ]
                    },
                    "subtitleStore": {
                        "title": "Select upload storage",
                        "type": "string",
                        "description": "Required when uploading files: select a Key-Value Store here, then select that exact same store in Step 2. This safely grants read-only access to the uploaded files. Leave empty only when using public direct URLs."
                    },
                    "subtitleFiles": {
                        "title": "Advanced upload — upload files",
                        "maxItems": 20,
                        "type": "array",
                        "description": "Upload SRT, VTT, ASS/SSA or JSON files and choose the SAME Key-Value Store as in Step 1. You can upload several files and apply the same conversion and retiming to all of them.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "subtitleUrls": {
                        "title": "Direct subtitle file URLs",
                        "maxItems": 20,
                        "type": "array",
                        "description": "Optional direct HTTP(S) download URLs to SRT, VTT, ASS/SSA or JSON files. Not YouTube or TikTok page links. Uploaded files and URLs can be combined in the same run.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "offsetMs": {
                        "title": "Global offset (milliseconds)",
                        "type": "integer",
                        "description": "Shift every cue. Negative makes subtitles appear EARLIER, positive LATER. Use this when the lag is the same at the start and at the end of the file. If the lag grows over time, it is drift — use the framerate or two-point options instead.",
                        "default": 0
                    },
                    "sourceFps": {
                        "title": "Source framerate",
                        "enum": [
                            "",
                            "23.976",
                            "24",
                            "25",
                            "29.97",
                            "30",
                            "50",
                            "59.94",
                            "60"
                        ],
                        "type": "string",
                        "description": "The framerate the subtitles were authored against. Leave empty unless you know it.",
                        "default": ""
                    },
                    "targetFps": {
                        "title": "Target framerate",
                        "enum": [
                            "",
                            "23.976",
                            "24",
                            "25",
                            "29.97",
                            "30",
                            "50",
                            "59.94",
                            "60"
                        ],
                        "type": "string",
                        "description": "The framerate of the video you are syncing to. Must be set together with the source framerate.",
                        "default": ""
                    },
                    "useAnchorSync": {
                        "title": "Two-point sync (fixes lag AND drift)",
                        "type": "boolean",
                        "description": "The reliable fix when you do not know the framerates. Give the current and correct timestamps of two lines far apart — ideally the first and the last of the file — and both the constant lag and the progressive drift are solved at once.",
                        "default": false
                    },
                    "anchorObservedA": {
                        "title": "First line — current timestamp",
                        "type": "string",
                        "description": "As written in the file, e.g. 00:00:04,120. Seconds also accepted."
                    },
                    "anchorDesiredA": {
                        "title": "First line — correct timestamp",
                        "type": "string",
                        "description": "When it should actually appear, e.g. 00:00:02,000."
                    },
                    "anchorObservedB": {
                        "title": "Last line — current timestamp",
                        "type": "string",
                        "description": "Must be at least 30 seconds after the first anchor, or the computed scale is unreliable."
                    },
                    "anchorDesiredB": {
                        "title": "Last line — correct timestamp",
                        "type": "string",
                        "description": "When the last line should actually appear."
                    },
                    "dropNegativeCues": {
                        "title": "Drop cues pushed before zero",
                        "type": "boolean",
                        "description": "Off by default: cues shifted before zero are clamped to 00:00:00, which is what a player does anyway. Turn on when you are trimming a leading section rather than correcting a lag.",
                        "default": false
                    },
                    "keepLineBreaksInTxt": {
                        "title": "Keep line breaks in TXT output",
                        "type": "boolean",
                        "description": "Off by default, so each cue becomes one paragraph. Turn on to preserve the original two-line layout.",
                        "default": false
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
