Version: June 2025

Marker Tool & Converter

This is the official API for our Marker Tool & Converter. All details about the tool itself can be found here: Marker Tool & Converter.

Quick Start

This endpoint can be used to modify and convert marker files.

Endpoint

POST https://api.editingtools.io/v2/markers

Authentication

This API requires Basic Authentication. The "Authorization" header should be set with the Base64 encoded string of "apikey:YOUR_API_KEY".

Authorization: Basic <base64Encoded(apikey:YOUR_API_KEY)>

Headers

Content-Type: multipart/form-data

Specifies the format of the request body.

Authorization: Basic <base64EncodedString>

Authentication credential.

Request Body

The request can contain the following parameters:

Parameter Type Required Description
file File Yes The marker file to be converted.
source String Yes The source format you want to convert. Supported formats:
iOS Apps
com.editingtools.livenotesLive Timecode Notes (.json) [new app]
com.editingtools.timecodenotesLive Timecode Notes - Lite (.txt) [old app - iOS APP Export]
Adobe Premiere Pro
premierepro.xmlAdobe Premiere Pro > Sequence (.xml)
premierepro.csvAdobe Premiere Pro > Markers > CSV Export (.csv)
xml_generatoritemAdobe Premiere Pro > Sequence with Text Fields (Essential Graphics) (.xml)
premierepro_textpanelAdobe Premiere Pro > Text Panel export (.txt) [Experimental]
otioAdobe Premiere Pro > OpenTimelineIO (.otio)
Adobe Prelude Live Logger
preludelivelogger_txtAdobe Prelude Live Logger > Marker (.txt)
Adobe Audition
adobeaudition_csvAdobe Audition > Marker (.csv)
Apple Final Cut Pro X
fiojsonApple Final Cut Pro X (10.4.0 and later) (.fiojson)
xmlApple Final Cut Pro 7 > Timeline & Clip Marker (.xml)
xml_generatoritemApple Final Cut Pro 7 > Text Fields (.xml)
Avid Media Composer
amc_marker_txtAvid Media Composer > Marker Text (.txt)
amc_marker_xmlAvid Media Composer > Marker XML (.xml)
avid_ds_captionAvid Media Composer > DS Caption File / SubCap (.txt)
stlAvid Media Composer > EBU N19 Caption File (.stl)
amc_sequence_reportAvid Media Composer > Sequence Report (.txt)
Avid Pro Tools
protoolstxtAvid Pro Tools > TXT Marker (.txt)
midiAvid Pro Tools > Midi Marker (.mid)
protoolsedlAvid Pro Tools > EDL - Track Listing with Clips (.txt) [Experimental]
Blackmagic Design DaVinci Resolve
resolveDaVinci Resolve > Timeline Markers EDL (.edl)
csvDaVinci Resolve > Edit Index (Clip Markers) (.csv)
OpenTimelineIO
otioOpenTimelineIO (.otio)
NanoLockit by Ambient
nanolockitNanoLockit Logs (.markers)
EDL
edlclipsEDL - Convert clips from EDL into markers (.edl)
edllocEDL - Convert EDL Locators into range markers (.edl)
Frame.io
frameiocsvFrame.io > Comments CSV (.csv)
Dropbox Replay
dropbox.replay.jsonDropbox Replay > Comments (.json)
Vimeo
vimeocsvVimeo Review > Comments (.csv)
X2X Pix Systems
pixPix Systems > Comments (.csv)
NOTETRACKS Pro
adobeaudition_csvNoteTracks.com > Audition Markers (.csv)
Krock.io
krockiocsvKrock.io > Comments (.csv)
Wipster.io
csvunknownWipster.io > Comments (.csv)
Subtitles
srtSubRip Subtitle (.srt)
vttWebVTT / Web Video Text (.vtt)
sbvYouTube / SubViewer (.sbv)
Audio Files
wavWaveform Clip Marker (.wav) [Experimental]
Google Sheets
csvGoogle Sheets > CSV Export (.csv)
Apple Numbers
csv2Apple Numbers > CSV Export (.csv)
oTranscribe
otroTranscribe (.otr)
CSV & TSV
csvunknownCSV (.csv)
csvCSV [comma-separated values] (.csv)
csv2CSV [semicolon-separated values] (.csv)
tsvTSV [tab-separated values] (.tsv)
Textfield
textfieldText (Copy&Paste)
format String Yes The desired output format. Possible values:
PDF
pdfPDF (.pdf)
Adobe Premiere Pro
premierepro2Adobe Premiere Pro → Sequence with Markers (.xml)
Apple Final Cut Pro X
fcpxml_titlesApple Final Cut Pro X → Subtitles as Titles (.fcpxml) [Experimental]
Avid Media Composer
amc_marker_txt16Marker Text (.txt) [16 Colors, Avid 2024.6+]
amc_marker_txtMarker Text (.txt) [8 Colors]
amc_marker_xml16Marker XML (.xml) [16 Colors, Avid 2024.6+]
amc_marker_xmlMarker XML (.xml) [8 Colors]
avid_ds_captionDS Caption File / Subcap (.txt)
Avid Pro Tools
ptxPTX File (.ptx) [Premium]
ptx-trialPTX File (.ptx) [Trial & Test]
midiMidi Marker (.mid)
edlprotoolsEDL (.edl)
Blackmagic Design DaVinci Resolve
resolveDaVinci Resolve → Markers (.edl)
YouTube
yt_txtYouTube Chapter Markers (for description) (.txt)
Microsoft Excel
xlsxExcel Spreadsheet XML (.xlsx)
xlsExcel Spreadsheet (.xls)
Google Sheets
csvGoogle Sheets (.csv)
Apple Numbers
csv2Apple Numbers (.csv)
OpenOffice
odsOpenDocument Spreadsheet (.ods)
CSV & JSON
csvCSV [comma-separated values] (.csv)
csv2CSV [semicolon-separated values] (.csv)
tsvTSV [tab-separated values] (.tsv)
jsonJSON (.json)
Text
txtPlain Text File (.txt)
FFMPEG - Generate marker stills from video
ffmpeg_shShell Script: Generate marker stills from video (.sh)
ffmpeg_sh2Shell Script: Generate video previews from duration markers (.sh)
Subtitle Formats
srtSRT - SubRip (.srt)
vttVTT - Web Video Text (.vtt)
sbvSBV - SubViewer (YouTube) (.sbv)
-Please use our Subtitle Tool & Converter for other formats
EDL
edlEDL Sequence (Marker as Clips) (.edl) [Experimental]
framerate String Yes The framerate of the marker file. If there is no value set, 25 will be used as default value.
Allowed values:
  • Integer: from 8 to 90
  • Double: 23.976 and 59.94
  • String: 29.97DF and 59.94DF for Drop Framerates
base64 Boolean No If set to true, the generated file will be returned as base64 string.
includeClipMarkers Boolean No This includes clip markers, but it only works with xml. Set to true to activate this option.
mergeIdenticalTimecode Boolean No Recommended Option: This merges the comments of markers with identical timecode. Set to true to activate this option.
removeEmptyMarkers Boolean No This removes any empty markers that have no name or comment. Set to true to activate this option.
removeDiacritics Boolean No This removes Diacritics from marker name, comment and user. Set to true to activate this option.
removeLinebreaks Boolean No This removes all line breaks within a marker comment. Set to true to activate this option.
transliterate Boolean No This transliterates Cyrillic alphabet. Set to true to activate this option.
There are more options to choose, please contact our free support for more details how to use them.

cURL Examples

The following examples show how to use the API with cURL commands. You can use https://curlconverter.com to convert the commands for other languages like: PHP, JavaScript, Python, Ruby, Rust, Ansible, C , C#, ColdFusion, Clojure, Dart, Elixir, Go, HAR, HTTP, HTTPie, Java, JSON, Kotlin, MATLAB, Node.js, Objective-C, OCaml, PowerShell, R, Swift and more.

cURL Request Example 1

This is an example of how to convert an xml marker file to CSV with a specified frame rate and the option to merge comments with identical timecodes.

curl -X POST https://api.editingtools.io/v2/markers \
-u "apikey:YOUR_API_KEY" \
-F file=@/path/to/my_markers.xml \
-F source=xml \
-F format=csv \
-F framerate=25 \
-F mergeIdenticalTimecode=true

cURL Request Example 2

This is an example of how to convert a marker file and return the output as a Base64 string.

curl -X POST https://api.editingtools.io/v2/markers \
-u "apikey:YOUR_API_KEY" \
-F file=@/path/to/my_markers.xml \
-F source=xml \
-F format=csv \
-F framerate=25 \
-F base64=1 \
-F mergeIdenticalTimecode=true

Responses

Success (HTTP 200 OK)

If the file was successfully converted, the API will return a 200 OK status code with a JSON object containing the file details.

Field Type Description
code String HTTP status code.
status String A message about the request.
timestamp String Timestamp from server.
data Object An object containing details about the converted file.
data.fileName String Name of generated file.
data.fileBase64 String File encoded as Base64 string. Only if bas64 option is set to true.
data.fileUrl String Download path of the generated file.
data.fileSize Int Size of the generated file in bytes.
data.fileChecksum String MD5 hash of the generated file for validation.

Response Example 1

The request returns the path to the file.

{
    "code": 200,
    "status": "Success",
    "timestamp": "2025-05-22T19:29:27Z",
    "data": {
        "fileName": "Marker.csv",
        "fileUrl": "https://editingtools.io/path/to/file/Marker.csv",
        "fileSize": 631,
        "fileChecksum": "149350685432f7d03ab148cef3dfe926"
    }
}

Response Example 2

The request returns the file as Base64 string.

 {
    "code": 200,
    "status": "Success",
    "timestamp": "2025-05-22T19:29:27Z",
    "data": {
        "fileName": "Marker.csv",
        "fileBase64": "Tm8sVGltZWNvZGUgSW4sVGltZWNvZGUgT3V0LFRpdGxlLER1cmF0aW9uLFRyYWNrLE5vdGUKMiwwMDowMDowMDowMCwwMDowMDozMjoyMSwiQUQwMDY2MDFfRnVlbF90aGVfZmlyZV9TT05PVE9OLm1wMyIsMDA6MzI6MjEsIkFBIiwKMywwMDowMDo0MDowMCwwMDowMTo1NDoxNywiU0NEVjA4OTYwNV9CSVNfSU5fRElFX0VXSUdLRUlUX0FfU09OT1RPTi5tcDMiLDAxOjE0OjE3LCJOT05FIiwKNCwwMDowMjo0MDoyMCwwMDowMzowNzowOCwiQUQwMDY2MDFfRnVlbF90aGVfZmlyZV9TT05PVE9OLm1wMyIsMDA6MjY6MTMsIk5PTkUiLAo1LDAwOjAzOjI3OjAyLDAwOjA0OjA2OjE0LCJTQ0RWMTA4MjA5X0RFRVBMWV9DT05URU5URURfQV9TT05PVE9OLm1wMyIsMDA6Mzk6MTIsIkFBIiwKNiwwMDowNDoyNDoxOSwwMDowNzoxNDoyNCwiU1BSRTAwNDkyMl9SRUFTT05TX1NPTk9UT04ubXAzIiwwMjo1MDowNSwiTk9ORSIsCjcsMDA6MDc6MzI6MTEsMDA6MTA6Mzk6MTksIkRvbWluaWMgRmlrZSAtIDMgTmlnaHRzIChPZmZpY2lhbCBWaWRlbykubXAzIiwwMzowNzowOCwiQUEiLAo4LDAwOjExOjA1OjIyLDAwOjEzOjEyOjI0LCJBRDAwNjYwMV9GdWVsX3RoZV9maXJlX1NPTk9UT04ubXAzIiwwMjowNzowMiwiTk9ORSIsCg==",
        "fileUrl": "https://editingtools.io/path/to/file/Marker.csv",
        "fileSize": 631,
        "fileChecksum": "149350685432f7d03ab148cef3dfe926"
    }
}

Error Responses

Error responses typically include an appropriate HTTP status code and a JSON body containing an error message.

{
    "code": "400",
    "status": "Bad Request",
    "timestamp": "2025-05-22T19:29:27Z"
}

Download File

After the process is successfully completed, the file can be downloaded using the values returned under fileUrl and fileName. The generated file will usually be online for 5 to 20 minutes, depending on caching. After download, you can optionally validate the file with the MD5 hash provided in fileChecksum.

cURL Request Example (macOS or Linux)

Example to download the file to the Desktop. Uses -o to specify the output file path.

curl -o ~/Desktop/{fileName} "{fileUrl}"
	                        
curl -o ~/Desktop/Marker.csv "https://editingtools.io/path/to/file/Marker.csv"

cURL Request Example (Windows with PowerShell)

curl -o "$env:USERPROFILE\Desktop\{fileName}" "{fileUrl}"
	                        
curl -o "$env:USERPROFILE\Desktop\Marker.csv" "https://editingtools.io/path/to/file/Marker.csv"

cURL Request Example (Windows Command Prompt with cURL installed)

curl -o "%USERPROFILE%\Desktop\{fileName}" "{fileUrl}"
	                        
curl -o "%USERPROFILE%\Desktop\Marker.csv" "https://editingtools.io/path/to/file/Marker.csv"

Python3 Request Example

import os
import urllib.request

name = "Marker.csv"
url = "https://editingtools.io/path/to/file/Marker.csv"

# Construct the path to the Desktop for example
local_path = os.path.join(os.path.expanduser("~"), "Desktop", name)

# Download the file
try:
    urllib.request.urlretrieve(url, local_path)
    print(f"File downloaded successfully and saved to: {local_path}")
except Exception as e:
    print(f"Failed to download file: {e}")

wget Request Example (macOS or Linux)

Example to download the file to the Desktop. Uses -O to specify the output file path.

wget -O ~/Desktop/{fileName} "{fileUrl}"

wget -O ~/Desktop/Marker.csv "https://editingtools.io/path/to/file/Marker.csv"

wget Request Example (Windows with PowerShell)

wget -O "$env:USERPROFILE\Desktop\{fileName}" "{fileUrl}"

wget -O "$env:USERPROFILE\Desktop\Marker.csv" "https://editingtools.io/path/to/file/Marker.csv"

wget Request Example (Windows Command Prompt with wget installed)

wget -O "%USERPROFILE%\Desktop\{fileName}" "{fileUrl}"

wget -O "%USERPROFILE%\Desktop\Marker.csv" "https://editingtools.io/path/to/file/Marker.csv"

Endpoint URL

Endpoint URL to convert and modify marker files.

https://api.editingtools.io/v2/markers

Authentication

This API requires Basic Authentication. The "Authorization" header should be set with the Base64 encoded string of "apikey:YOUR_API_KEY".

Authorization: Basic <base64Encoded(apikey:YOUR_API_KEY)>

Data Handling

Request parameters must be UTF-8 encoded. Results are returned as UTF-8-encoded JSON. By default, datasets will be inside the data tag.

Error Handling

This API service uses standard HTTP response codes to indicate whether a method was completed successfully. HTTP response codes in the 2XX range indicate success. Responses in the 4XX range indicate some sort of failure, while responses in the 5XX range indicate an internal system error that cannot be resolved by the user. The following error codes are used by the API:

Code Description
200 OK. The request was successful.
201 Created. The entity was created.
202 Accepted. The request was accepted.
400 Bad request. Please check error message.
401 Unauthorized: Username or Api Key is not valid.
402 Upgrade Required: This feature requires an active Pro subscription.
403 Forbidden: The request is understood, but it has been refused or access is not allowed.
404 Not found: The URI requested is invalid or the resource does not exist.
422 Unprocessable Entity. A process failed.
429 Too Many Requests. Try again in some seconds.
500 Internal Server Error. Something is broken.
502 Bad Gateway. API is down.
503 Service Unavailable. API is up but overloaded with requests.
504 Gateway Timeout: API is up but requests reached timout.

Rate Limits

To prevent abuse and spam, the API has limits at various levels. If you receive error code 429 (Too Many Requests), it means you have reached a rate limit.

If you receive a rate limit error, you should stop making requests temporarily. If the retry-after response header is present, you should not retry your request until after that many seconds has elapsed. To prevent rate-errors, we recommend to wait 300 ms to 800 ms between requests to the same endpoint.

Also there is a general limit to the api and all requests made:

Limit Requests
General limit per minute 50
General limit per hour 1000
Recommended wait time between requests > 200 ms
Recommended wait time between requests to one endpoint > 600 ms

The general limits per minute and per hour can be changed upon request.

Upload Limits

The maximum upload size for any single request — including file uploads — is 100 MB. This is a hard limit and applies regardless of your API plan or usage level.

If your request exceeds this size, it will be rejected before reaching our servers. To ensure successful uploads:

  • Make sure uploaded files are under 100 MB.
  • For larger media, consider splitting files before upload.
  • Requests close to the limit may still fail due to encoding or header overhead.

Timezone

This API endpoint returns the time as an ISO 8601 timestamp in the UTC time zone. These timestamps look like 2025-01-10T15:05:06Z.

Localization and Languages

This API supports multiple languages. For instance, it can display the text of a status message in a different language.

Accept-Language: LANGUAGE

Example

To set the preferred response language to Spanish, add this header:

Accept-Language: es

cURL Example

To apply the language in a cURL request, add the following header:

-H "Accept-Language: es"

Available Languages

The following list contains all the currently available languages. Note that setting a language header does not guarantee a translated response, as not all texts are translated. If no language is set or a translation is unavailable, the default response will be in English.

Code Language
en English
de German
fr French
es Spanish
ru Russian
it Italian
el Greek
pl Polish
pt Portuguese
lt Lithuanian
ko Korean
ja Japanese
zh Chinese
id Indonesian
tr Turkish
nl Dutch
ro Romanian
fi Finnish
cs Czech
hu Hungarian
ar Arabic
nb Norwegian Bokmål
sk Slovak
sl Slovenian
sv Swedish
lv Latvian
et Estonian
bg Bulgarian
uk Ukrainian
da Danish