Version: June 2025

Music Cue Sheets

This is the API documentation to our tool "Music Cue Sheet (Converter)" and "Music Cue Sheet Manager". The tool makes it easy to create and manage music cue sheets.

We welcome your feedback! Is there a feature you need to access via API? If so, please let us know, along with the workflow you are trying to create.

Quick Start (Convert file)

This Endpoint can be used to quickly convert a sequence file from an NLE into a music cue sheet document. It only converts the file and does not create a new project that can be edited later. It's a simple way to convert EDL, XML, or other sequence formats into tables like Excel or CSV. You can find more details about the tool here: Music Cue Sheet (Converter)

(i) This Endpoint will not add any metadata from Production Music Libraries.

Endpoint

This endpoint is used to convert a file.

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

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 API supports file uploads using a multipart/form-data request. The request can contain the following parameters:

Parameter Type Required Description
file File Yes The sequence file to upload and convert. Accepted formats are:
  • .edl (CMX3600, File16, File32,...)
  • .xml (Final Cut 7 XML, Premiere Pro)
  • .xml (Media Composer XML)
  • .fcpxml (Final Cut Pro X)
  • .txt (Pro Tools TXT -> Session Info as text)
  • .csv (Please check presets for correct format)
Recommended max file size: 10MB
Max request size (including files): 100 MB
(i) If the sequence file is larger than 10 MB (e.g. XML or FCPXML), it may contain unnecessary layers, such as video tracks, or it may be incorrect. Larger files might fail. It is recommended that you upload files that only contain relevant audio tracks.
(i) .aaf is only supported in Cue Sheet Projects and is not accepted with this endpoint.
(i) .fcpxmld (Directories) from newer Final Cut Pro projects need to be converted into .fcpxml first!
framerate String Yes The framerate of the sequence 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
format String Yes This defines the export format. The possible export format values are:
  • json (returns entries also in response)
  • csv (separated by comma)
  • csv2 (separated by semicolon)
  • xls (Excel)
  • xlsx (Excel)
  • pdf
  • ods
  • txt (PlainText)
preset String No This can be used to select a predefined document style.
(i) If a predefined document style is selected, the format needs to be set to xlsx.
Available preset values:
  • cisac_preset CISAC Cue Sheet
  • apra_preset APRA Cue Sheet
mergeOverlappingClips Boolean No If set to true, any overlapping identical clips are merged and their total duration recalculated.
Default value is true. Set to false to disable this feature.
deduplicateClips Boolean No If set to true, all identical clips (in the whole sequence) will be merged so that each appears only once. The clip duration will be summed. Timecode In and Out information might become useless. Only use if Timecode In and Out information is not so important.
Default is false. Set to true to enable.
base64 Boolean No If set to true, the generated file will be returned as base64 string.

cURL Examples

The following examples show how to use the API with cURL commands. If you are using a different language, we recommend using 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 a simple .edl with 25 fps file into a CSV document.

curl -X POST https://api.editingtools.io/v2/cuesheet \
-u "apikey:YOUR_API_KEY" \
-F file=@/Users/path/Demo_Sequence_25fps.edl \
-F framerate=25 \
-F format=csv \
-F mergeOverlappingClips=true

cURL Request Example 2

This is an example of how to convert a .edl sequence with 23.976 fps into an Excel spreadsheet in CISAC Standard.

curl -X POST https://api.editingtools.io/v2/cuesheet \
-u "apikey:YOUR_API_KEY" \
-F file=@/Users/path/Demo_Sequence_25fps.edl \
-F framerate=23.976 \
-F format=xlsx \
-F preset=cisac_preset \
-F mergeOverlappingClips=true

cURL Request Example 3

This is an example of how to convert a .edl sequence with 29.97 drop frame into an Excel spreadsheet and return the file as base64 string.

curl -X POST https://api.editingtools.io/v2/cuesheet \
-u "apikey:YOUR_API_KEY" \
-F file=@/Users/path/Demo_Sequence_25fps.edl \
-F framerate=29.97DF \
-F format=xlsx \
-F base64=true

cURL Request Example 4

We recommend that developers who want to process input directly from the response use the json format. The following example shows how to convert a simple .edl file with a frame rate of 25 fps into JSON. The json will be part of the response (see JSON Response Example).

curl -X POST https://api.editingtools.io/v2/cuesheet \
-u "apikey:YOUR_API_KEY" \
-F file=@/Users/path/Demo_Sequence_25fps.edl \
-F framerate=25 \
-F format=json \
-F mergeOverlappingClips=true

Demo File

Demo sequence file (.edl) to test requests: Demo_Sequence_25fps.edl

Responses

Success (HTTP 200 OK)

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

Response Example

{
    "code": 200,
    "status": "The sequence was successfully converted into a music cue sheet document.",
    "timestamp": "2025-05-01T10:00:00Z",
    "data": {
    	"fileName": "Demo_Sequence_25fps.csv",
        "fileUrl": "https://editingtools.io/download/demo/path/Demo_Sequence_25fps.csv",
        "fileBase64": "Tm8uLFRpbWVjb2Rl...IsIiIK",
        "fileSize": 1830,
        "fileChecksum": "06abe8b0662afabe9ba8e1f0b0efe0b7"
    }
}

JSON Response Example

If the file is converted to json, as in Request Example 4, all basic cue sheet data will be included in the response. Please note that this will not include track metadata from production music libraries.

{
    "code": 200,
    "status": "The sequence was successfully converted into a music cue sheet document.",
    "timestamp": "2025-05-01T10:00:00Z",
    "data": {
    	"fileName": "Demo_Sequence_25fps.csv",
        "fileJson": {
            "name": "Music Cue Sheet - Demo Sequence 1",
            "color": "blue",
            "creationDate": "2025-06-12T12:15:05Z",
            "framerate": "25",
            "tool": "EditingTools.io - Music Cue Sheet Tool",
            "entries": [
                {
                    "number": 1,
                    "name": "PRTM009701_FORGOTTEN_CITY_SONOTON",
                    "fileName": "PRTM009701_FORGOTTEN_CITY_SONOTON.mp3",
                    "timecodeIn": "00:00:04:20",
                    "timecodeOut": "00:01:08:15",
                    "duration": "00:01:03:20",
                    "durationInSeconds": "64",
                    "sourceStart": "00:00:00:00",
                    "sourceEnd": "00:01:03:20",
                    "note": ""
                },
                {
                    "number": 2,
                    "name": "ANW3317_005_Why-Dont-We-Fall-In-Love",
                    "fileName": "ANW3317_005_Why-Dont-We-Fall-In-Love.mp3",
                    "timecodeIn": "00:02:09:20",
                    "timecodeOut": "00:03:24:20",
                    "duration": "00:01:15:00",
                    "durationInSeconds": "75",
                    "sourceStart": "00:00:00:00",
                    "sourceEnd": "00:01:15:00",
                    "note": ""
                }
            ]
        },

    }
}


Field Type Description
code String HTTP status code.
status String A descriptive message about the process.
timestamp String Server time of the request (ISO 8601).
data Object An object containing details about the file.
data.fileName String Name of generated file.
data.fileUrl String Download path of the generated file.
data.fileJson String Returns the uploaded sequence as json. (Only if format is json)
data.fileSize Int Size of the generated file in bytes.
data.fileChecksum String MD5 hash of the generated file for validation.
data.fileBase64 String File encoded as Base64 string.

Error Responses

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

{
    "code": "400",
    "status": "The upload could not be completed.",
    "timestamp": "2025-05-01T10:00:00Z"
}

Download File

After the conversion is successfully completed, the file can be downloaded using the values returned under fileUrl and fileName.

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/Demo_Sequence_25fps.csv "https://editingtools.io/download/demo/path/Demo_Sequence_25fps.csv"

cURL Request Example (Windows with PowerShell)

curl -o "$env:USERPROFILE\Desktop\{fileName}" "{fileUrl}"
	                        
curl -o $env:USERPROFILE\Desktop\Demo_Sequence_25fps.csv "https://editingtools.io/download/demo/path/Demo_Sequence_25fps.csv"

cURL Request Example (Windows Command Prompt with cURL installed)

curl -o "%USERPROFILE%\Desktop\{fileName}" "{fileUrl}"
	                        
curl -o %USERPROFILE%\Desktop\Demo_Sequence_25fps.csv "https://editingtools.io/download/demo/path/Demo_Sequence_25fps.csv"

Python3 Request Example

import os
import urllib.request

name = "Demo_Sequence_25fps.csv"
url = "https://editingtools.io/download/demo/path/Demo_Sequence_25fps.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/Demo_Sequence_25fps.csv "https://editingtools.io/download/demo/path/Demo_Sequence_25fps.csv"

wget Request Example (Windows with PowerShell)

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

wget -O "$env:USERPROFILE\Desktop\Demo_Sequence_25fps.csv" "https://editingtools.io/download/demo/path/Demo_Sequence_25fps.csv"

wget Request Example (Windows Command Prompt with wget installed)

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

wget -O "%USERPROFILE%\Desktop\Demo_Sequence_25fps.csv" "https://editingtools.io/download/demo/path/Demo_Sequence_25fps.csv"

Best Practices (Find Metadata)

A common use case is to find metadata for files in a cue sheet via the API. If the "Search Metadata" endpoint is unavailable for your use case, we recommend the following workflow.

You may need an active PRO subscription to use this workflow without limitations.
  1. Use the Create Project endpoint to create a new cue sheet that includes all tracks of your project. Make sure to add the attribute scanLibraries and set it to all or another value. Once an entry is added to the project, the scanning process for metadata will automatically start.
  2. Wait until the scan is finished. Depending on how many tracks are in a project, the scan can take several minutes. You can set up a webhook to receive a callback when the project scanning is finished, or you can check the project details. Use the "Get Project" endpoint to check the project details. The status of the scan process is indicated in the metadataScan attribute.
  3. Use the "Get Entries" endpoint to retrieve the cue sheet entries including track metadata. Alternatively, export the cue sheet in another format using the "Export" endpoint.
  4. If you no longer need the project after this, delete it and all its entries from the EditingTools server using the "Delete Project" endpoint.

(!) If you provide a tool that processes cue sheets from various customers, we recommend replacing the project name value in the name attribute with the project ID from your service.

Create Project

This endpoint is used to create a new cue sheet project for the Music Cue Sheet Manager on the server.

Endpoint

POST https://api.editingtools.io/v2/cuesheets/project

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: application/json

Specifies the format of the request body.

Authorization: Basic <base64EncodedString>

Authentication credential (as described above).

Request Body (JSON)

The request body should be a UTF8 JSON object containing the following parameters:

Parameter Type Required Description
name String Yes The name of the project or sequence (String 3-200 characters).
color String No The color of the project. If there is no value set, "blue" will be used as default value.
Allowed colors: blue, cyan, fuchsia, green, lavender, lemon, mint, orange, pink, purple, red, sky, yellow, white
framerate String No The framerate of the project. 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
entries Object No Optional object with music track entries.
Parameter Type Required Description
fileName String Yes Filename
clipName String No Title of Track
timecodeIn String Yes Timecode of cue in sequence in SMPTE format (HH:MM:SS:FF)
timecodeOut String Yes Timecode of End of cue in sequence in SMPTE format (HH:MM:SS:FF)
duration String No Cue duration in SMPTE format (HH:MM:SS:FF)
sourceStart String No Source Timecode Start in SMPTE format (HH:MM:SS:FF)
sourceEnd String No Source Timecode End in SMPTE format (HH:MM:SS:FF)
audioTrack String No Name of Audio Track
isArchived Boolean No Defines if a project is active or archived. Default value is false.
false = Active, true = Archived
scanLibraries String No (Optional) If you want the tool to automatically search for metadata, submit a list of libraries separated by commas. These libraries will be searched for metadata automatically once a track is added to the project. If you want to scan all libraries, use "all".
productionType String No (Optional) Default: null
F = Film (Standalone), S = Series
productionCategory String No (Optional) Default: null
  • ANI = Animation/Cartoon
  • COM = Commercials
  • DOC = Documentary
  • FIL = Feature Film, TV Movie, etc.
  • INF = Infomercial
  • MIN = Mini-Series
  • MUL = Multimedia
  • NEW = News
  • ONO = One Offs / Shows (Song contest, Concert, Quiz show, etc.)
  • OTH = Other production
  • REA = Reality / Unscripted television
  • SER = TV Series, Cable Series, etc.
  • SOP = Soap Opera, Tele-Novelas
  • SPC = Specials (single television production that features a topic, or a particular performer)
  • SPE = Sporting Event, Sports Related Programme
  • TRL = Trailers
episodeTitle String No (Optional) Default: null (max. 100 characters)
episodeNumber String No (Optional) Default: null (max. 100 characters)
seasonNumber String No (Optional) Default: null (max. 100 characters)
yearOfProduction YEAR No (Optional) Default: null
country String No (Optional) Default: null
Use two digit country code.

Example Request Body 1 - only required parameters

Create a new music cue sheet project without any music track entries.

{
    "name": "My New Cue Sheet Project"
}

Example Request Body 2 - with music tracks

Create a new music cue sheet project with music track entries.

{
    "name": "My New Cue Sheet Project",
    "color": "green",
    "framerate": "23.976",
    "entries" : [
    	{"filename" : "mysong.mp3", "timecodeIn" : "10:02:12:03", "timecodeOut" : "10:02:16:12" },
    	{"filename" : "song_2.mp3", "timecodeIn" : "10:03:20:01", "timecodeOut" : "10:04:23:21" }
    ]
}

Example Request Body 3 - with cues and scan for metadata

Create a new music cue sheet project with music track entries and set auto scan for all metadata libraries. This will automatically search for external metadata for each track.

{
    "name": "My New Cue Sheet Project",
    "color": "green",
    "framerate": "23.976",
    "scanLibraries": "all",
    "entries" : [
    	{"filename" : "mysong.mp3", "timecodeIn" : "10:02:12:03", "timecodeOut" : "10:02:16:12" },
    	{"filename" : "song_2.mp3", "timecodeIn" : "10:03:20:01", "timecodeOut" : "10:04:23:21" }
    ]
}

cURL Examples

The following examples show how to use the API with cURL commands. If you are using a different language, we recommend using 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 - only required parameters

curl -X POST https://api.editingtools.io/v2/cuesheets/project \
  -u "apikey:YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "My New Cue Sheet Project"
}'

cURL Request Example 2 - with cues

curl -X POST https://api.editingtools.io/v2/cuesheets/project \
  -u "apikey:YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  	"name": "My New Cue Sheet Project",
    "color": "green",
    "framerate": "23.976",
    "entries" : [
    	{"filename" : "mysong.mp3", "timecodeIn" : "10:02:12:03", "timecodeOut" : "10:02:16:12" },
    	{"filename" : "song_2.mp3", "timecodeIn" : "10:03:20:01", "timecodeOut" : "10:04:23:21" }
    ]
}'

cURL Request Example 3 - with cues and scan for metadata

curl -X POST https://api.editingtools.io/v2/cuesheets/project \
  -u "apikey:YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  	"name": "My New Cue Sheet Project",
    "color": "green",
    "framerate": "23.976",
    "scanLibraries": "all",
    "entries" : [
    	{"filename" : "mysong.mp3", "timecodeIn" : "10:02:12:03", "timecodeOut" : "10:02:16:12" },
    	{"filename" : "song_2.mp3", "timecodeIn" : "10:03:20:01", "timecodeOut" : "10:04:23:21" }
    ]
}'

Responses

Success (HTTP 201 Created)

If the request is successful, the API will return a 201 Created status code with a JSON object containing project details. The JSON will contain some informations.

Field Type Description
code String HTTP status code.
status String Status message.
timestamp String Timestamp of server time (ISO 8601).
data Object An object containing details about the created project.
data.projectId String The unique identifier of the project.
data.creationDate String Timestamp of project creation (ISO 8601).

Example

{
    "code": "201",
    "status": "The project was successfully created.",
    "timestamp": "2025-01-01T19:10:00Z",
    "data": {
        "projectId": "rcwo9binm0xo8wt9vpfz16pt5pypju",
        "creationDate": "2025-01-01T19:10:00Z"
    }
}

Error Responses (Example)

Error responses will typically include an appropriate HTTP status code (e.g., 400 Bad Request, 401 Unauthorized) and a JSON body with an error message.

It's recommended that the content of the "status" field be shown to end users as it can contain useful information. For example, it could be shown in an error dialog.

{
    "code": "400",
    "status": "Missing required parameter: name",
    "timestamp": "2025-01-01T19:10:00Z"
}
{
    "code": "401",
    "status": "Invalid API Key",
    "timestamp": "2025-01-01T19:10:00Z"
}

Duplicate Project

This endpoint is used to duplicate an existing music cue sheet project on the server. The project is identified by its projectId in the URL path.

Endpoint

POST https://api.editingtools.io/v2/cuesheets/project/{projectId}/copy

Replace {projectId} with the project's unique ID.

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: application/json

Specifies the format of the request body.

Authorization: Basic <base64EncodedString>

Authentication credential (as described above).

Path Parameters

Parameter Type Description
projectId String The unique identifier of the project.

Request Body (JSON)

The request body should be a UTF8 JSON object containing the following parameters:

Parameter Type Required Description
name String Yes The name of the new project copy (String 3-200 characters).
copyEntries Boolean No Defines if all music track entries should be copied as well into the new project. Default value is false.
false = No (Do not copy),true = Yes (Copy to new project)

Example Request Body

Duplicate a project with all music track entries.

{
    "name": "My New Cue Sheet Project (Copy)",
    "copyEntries": true
}

cURL Request Example

Replace {projectId} with the project id.

curl -X POST https://api.editingtools.io/v2/cuesheets/project/{projectId}/copy \
  -u "apikey:YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "My New Cue Sheet Project (Copy)",
    "copyEntries": true
}'

Responses

Success (HTTP 201 Created)

If the request is successful, the API will return a 201 Created status code with a JSON object containing project details. The JSON will contain some informations.

Field Type Description
code String HTTP status code.
status String Status message.
timestamp String Timestamp of server time (ISO 8601).
data Object An object containing details about the created project.
data.projectId String The unique identifier of the project.
data.creationDate String Timestamp of project creation (ISO 8601).

Example

{
    "code": "201",
    "status": "The music cue sheet has been duplicated successfully.",
    "timestamp": "2025-01-01T19:10:00Z",
    "data": {
        "projectId": "rcwo9binm0xo8wt9vpfz16pt5pypju",
        "creationDate": "2025-01-01T19:10:00Z"
    }
}

Error Responses (Example)

Error responses will typically include an appropriate HTTP status code (e.g., 400 Bad Request, 401 Unauthorized, 404 Not found) and a JSON body with an error message.

It's recommended that the content of the "status" field be shown to end users as it can contain useful information. For example, it could be shown in an error dialog.

{
    "code": "400",
    "status": "Please enter a project name with at least 3 characters.",
    "timestamp": "2025-01-01T19:10:00Z"
}

Get Projects (List)

This endpoint allows to get a list of all music cue sheet project connected to the API account on EditingTools.io.

Endpoint

GET https://api.editingtools.io/v2/cuesheets/projects

Headers

Content-Type: application/json

Specifies the format of the request body.

Authorization: Basic <base64EncodedString>

Authentication credential using your `YOUR_API_KEY`.

cURL Request Example 1

curl -X GET https://api.editingtools.io/v2/cuesheets/projects \
   -u "apikey:YOUR_API_KEY"

Responses

Success (HTTP 200 OK)

If the projects were successfully loaded, the API will return a 200 OK status code with a JSON object containing all existing projects.

Field Type Description
code String HTTP status code.
status String Status message.
timestamp String Timestamp of server time (ISO 8601).
data Object An object containing details about the projects.
Field Type Description
projectId String A unique identifier for the project.
name String The name of the project.
color String The color of the project.
lastUpdate String Timestamp of project update (ISO 8601).
creationDate String Timestamp of project creation (ISO 8601).

Example

{
    "code": "200",
    "status": "The projects were successfully loaded.",
    "data": [
        {
            "projectId": "6u00p3lz1ycwixs3g2kq0nx3qkroskxiw8o578wx99dor8zn",
            "name": "Late Night Show - Episode 38",
            "color": "green",
            "lastUpdate": "2025-05-17T09:17:52Z",
            "createdDate": "2025-05-01T08:20:00Z"
        },
        {
            "projectId": "nz1thfewx86pirs8etj51huxnfk6sbaytmlb62lghyt64kvs",
            "name": "Late Night Show - Episode 37",
            "color": "blue",
            "lastUpdate": "2025-05-12T10:00:34Z",
            "createdDate": "2025-05-02T10:20:52Z"
        }
    ]
    
}

Error Responses

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

{
    "code": "400",
    "status": "The projects could not be loaded.",
    "timestamp": "2025-01-01T19:10:00Z"
}

Get Project (Details)

This endpoint allows to get details of a selected project. The projectId have to be specify directly in the URL path.

Endpoint

GET https://api.editingtools.io/v2/cuesheets/project/{projectId}

Replace {projectId} with the project's unique ID.

Headers

Content-Type: application/json

Specifies the format of the request body.

Authorization: Basic <base64EncodedString>

Authentication credential using your `YOUR_API_KEY`.

Path Parameters

Parameter Type Description
projectId String The unique identifier of the project.

cURL Request Example 1

curl -X GET https://api.editingtools.io/v2/cuesheets/project/{project_id} \
   -u "apikey:YOUR_API_KEY"

Responses

Success (HTTP 200 OK)

If the project was successfully loaded, the API will return a 200 OK status code with a JSON object.

Field Type Description
code String HTTP status code.
status String Status message.
timestamp String Timestamp of server time (ISO 8601).
data Object An object containing details about the project.
Field Type Description
projectId String A unique identifier for the project.
name String The name of the project.
color String The color of the project.
scanLibraries String List of libraries that scan automatically once a file is added to the cue sheet. This attribute will only be returned if the auto metadata scan is active.
scanComplete Boolean Returns true if all files were finished scanning for metadata. If the scan is still running for some files, it returns false. This attribute will only be returned if the auto metadata scan is active.
lastUpdate String Timestamp of project update (ISO 8601).
creationDate String Timestamp of project creation (ISO 8601).

Example

{
    "code": "200",
    "status": "The projects were successfully loaded.",
    "data": {
        "projectId": "6u00p3lz1ycwixs3g2kq0nx3qkroskxiw8o578wx99dor8zn",
        "name": "Late Night Show - Episode 38",
        "color": "green",
        "lastUpdate": "2025-05-17T09:17:52Z",
        "createdDate": "2025-05-01T08:20:00Z"
    }
}

Error Responses

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

{
    "code": "404",
    "status": "The project with the chosen ID could not be found.",
    "timestamp": "2025-01-01T19:10:00Z"
}

Delete Project

This endpoint is used to delete a project from server. The project is identified by its projectId in the URL path.

Endpoint

DELETE https://api.editingtools.io/v2/cuesheets/project/{projectId}

Replace {projectId} with the project's unique ID.

Headers

Content-Type: application/json

Specifies the format of the request body.

Authorization: Basic <base64EncodedString>

Authentication credential using `YOUR_API_KEY`.

Path Parameters

Parameter Type Description
projectId String The unique identifier of the project.

cURL Request Example

curl -X DELETE https://api.editingtools.io/v2/cuesheets/project/{projectId} \
  -u "apikey:YOUR_API_KEY" 

Replace {projectId} with the project id.

Responses

Success (HTTP 200 OK)

If the project was deleted successfully, the API will return a 200 OK status code with a JSON object confirming the deletion.

{
    "code": "200",
    "status": "The music cue sheet project has been successfully deleted.",
    "timestamp": "2025-01-01T19:10:00Z"
}

Error Responses

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

{
    "code": "404",
    "status": "The project with the chosen projectId could not be found.",
    "timestamp": "2025-01-01T19:10:00Z"
}

Add entries

This endpoint is used to add new music track entries to an existing music cue sheet project. Existing entries will not be changed or deleted.

(!) The current limit is 100 new track entries per call. You may need multiple calls if you have more files to add.

Endpoint

POST https://api.editingtools.io/v2/cuesheets/project/{projectId}/entries

Replace {projectId} with the project's unique ID.

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: application/json

Specifies the format of the request body.

Authorization: Basic <base64EncodedString>

Authentication credential (as described above).

Path Parameters

Parameter Type Description
projectId String The unique identifier of the project.

Request Body (JSON)

The request body should be a UTF8 JSON object containing the following parameters:

Parameter Type Required Description
fileName String Yes Filename
clipName String No Title of Track
timecodeIn String Yes Timecode of cue in sequence in SMPTE format (HH:MM:SS:FF)
timecodeOut String Yes Timecode of End of cue in sequence in SMPTE format (HH:MM:SS:FF)
duration String No Cue duration in SMPTE format (HH:MM:SS:FF)
sourceStart String No Source Timecode Start in SMPTE format (HH:MM:SS:FF)
sourceEnd String No Source Timecode End in SMPTE format (HH:MM:SS:FF)

Example Request Body 1 - only required parameters

Create one new entry.

{
    "filename" : "mysong.mp3",
    "timecodeIn" : "10:02:12:03", 
    "timecodeOut" : "10:02:16:12"
}

Example Request Body 2 - multiple entries

Create multiple new entry with different attributes.

[
    {
        "fileName": "intro_theme.mp3",
        "clipName": "Intro Theme",
        "timecodeIn": "00:00:00:00",
        "timecodeOut": "00:00:30:12",
        "duration": "00:00:30:12"
    },
    {
        "fileName": "dialogue_1.mp3",
        "clipName": "Opening Dialogue",
        "timecodeIn": "00:00:31:00",
        "timecodeOut": "00:01:15:00",
        "sourceIn": "00:00:00:00",
        "sourceOut": "00:00:44:00"
    },
    {
        "fileName": "transition_fx.mp3",
        "clipName": "Whoosh FX",
        "timecodeIn": "00:01:15:01",
        "timecodeOut": "00:01:16:10"
    }
]

cURL Examples

cURL Request Example 1 - only required parameters

curl -X POST https://api.editingtools.io/v2/cuesheets/project/{projectId}/entries \
  -u "apikey:YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "filename" : "mysong.mp3",
    "timecodeIn" : "10:02:12:03", 
    "timecodeOut" : "10:02:16:12"
}'

cURL Request Example 2 - with cues

curl -X POST https://api.editingtools.io/v2/cuesheets/project/{projectId}/entries \
  -u "apikey:YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {
        "fileName": "intro_theme.mp3",
        "clipName": "Intro Theme",
        "timecodeIn": "00:00:00:00",
        "timecodeOut": "00:00:30:12",
        "duration": "00:00:30:12"
    },
    {
        "fileName": "dialogue_1.mp3",
        "clipName": "Opening Dialogue",
        "timecodeIn": "00:00:31:00",
        "timecodeOut": "00:01:15:00",
        "sourceIn": "00:00:00:00",
        "sourceOut": "00:00:44:00"
    },
    {
        "fileName": "transition_fx.mp3",
        "clipName": "Whoosh FX",
        "timecodeIn": "00:01:15:01",
        "timecodeOut": "00:01:16:10"
    }
]'

Responses

Success (HTTP 201 Created)

If the request is successful, the API will return a 201 Created status code with a JSON object containing project details. The JSON will contain some informations.

Field Type Description
code String HTTP status code.
status String Status message.
timestamp String Timestamp of server time (ISO 8601).
data Object An object containing details about the project.
data.projectId String The unique identifier of the project.
data.creationDate String Timestamp of project creation (ISO 8601).

Example

{
    "code": "201",
    "status": "The music track entries have been successfully added to the project. (3/3)",
    "timestamp": "2025-01-05T10:08:00Z",
    "data": {
        "projectId": "rcwo9binm0xo8wt9vpfz16pt5pypju",
        "creationDate": "2025-01-01T19:10:00Z"
    }
}

Error Responses (Example)

Error responses will typically include an appropriate HTTP status code (e.g., 400 Bad Request, 401 Unauthorized) and a JSON body with an error message.

It's recommended that the content of the "status" field be shown to end users as it can contain useful information. For example, it could be shown in an error dialog.

{
    "code": "404",
    "status": "Project not found.",
    "timestamp": "2025-01-01T19:10:00Z"
}

Get entries

We are currently reworking this endpoint to prepare it for the new API v2, and it will be back online shortly.

Export Music Cue Sheet

We are currently reworking this endpoint to prepare it for the new API v2, and it will be back online shortly.

Delete Project Entries

This endpoint is used to delete all music track entries in a project. The project itself will not be deleted. The project is identified by its projectId in the URL path.

Endpoint

DELETE https://api.editingtools.io/v2/cuesheets/project/{projectId}/entries

Replace {projectId} with the project's unique ID.

Headers

Content-Type: application/json

Specifies the format of the request body.

Authorization: Basic <base64EncodedString>

Authentication credential using `YOUR_API_KEY`.

Path Parameters

Parameter Type Description
projectId String The unique identifier of the project.

cURL Request Example

curl -X DELETE https://api.editingtools.io/v2/cuesheets/project/{projectId}/entries \
  -u "apikey:YOUR_API_KEY" 

Replace {projectId} with the project id.

Responses

Success (HTTP 200 OK)

If the project entries were deleted successfully, the API will return a 200 OK status code with a JSON object confirming the deletion..

{
    "code": "200",
    "status": "All music track entries in the project have been successfully deleted.",
    "timestamp": "2025-01-01T19:10:00Z"
}

Error Responses

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

{
    "code": "404",
    "status": "The project with the chosen projectId could not be found.",
    "timestamp": "2025-01-01T19:10:00Z"
}

Music Cue Sheet Uploader
Plugin for Premiere Pro

Our free plugin "Music Cue Sheet Uploader" allows users to collect and summarize tracks within Premiere Pro. With one click, users can upload these tracks to the EditingTools.io cloud. The plugin is free for end users.

We offer other tools, companies or music cue sheet platforms to integrate their platform into the plugin. This enables users to seamlessly upload tracks to their platform directly with a single click, using our free plugin together with an API Key provided by their platform.

How the plugin works

The native plugin lets Premiere Pro users make lists with audio clips and individual filters inside Premiere Pro. The interface is simple and offers many options. You can combine clips that are cut or overlap into a single clip. You can also filter the list to show only selected tracks or to show only filenames that contain special words. You can see the cue sheet before you upload it in Premiere Pro. The plugin is a more simplified version of our Listify plugin.

Upload to your platform

In addition to uploading tracks directly to EditingTools.io for further processing, your platform can be integrated as well. The plugin can send a REST API request directly from Premiere Pro to a predefined server. The endpoint should requires an API key, which your platform provides to the user and which can be entered into the plugin. Once the user clicks "Upload", the plugin will send a request to the defined server including the music cue data in JSON format.

Begin the integration process

Please contact our team and provide the following details about your platform:

  • Platform and product name.
  • Website URL.
  • A short description of your platform.
  • Icon or logo for your product (EPS, SVG or PNG + Alpha).

We will assess the possibilities of integration and arrange a call with our team.

The following legal and technical requirements must be met for integration.

Technical Requirements
  • An SSL API endpoint (e.g., POST https://yourWebsite.com/yourApiEndpoint) that accepts application/json and can process submitted cue sheets. Check our Example code.
  • Customer Authorization method (e.g. Authentication credential such as an API Key in header).
  • Implement proper error handling.
  • Demo Login for our team to test the integration with your server.
Legal Requirements
  • Signed development order/contract.
  • Payed development fee.
  • Active Pro Subscription or Support Contract.

Receive API calls

The plugin can submit the following sequence details from Adobe Premiere Pro for processing in your Endpoint. See our example php code.

Field Type Description
name String Sequence name
framerate String Framerate of the sequence.
entries Object Object with music track entries.
Field Type Description
fileName String Filename
clipName String Title of Track
timecodeIn String Timecode of cue in sequence in SMPTE format (HH:MM:SS:FF)
timecodeOut String Timecode of End of cue in sequence in SMPTE format (HH:MM:SS:FF)
duration String Cue duration in SMPTE format (HH:MM:SS:FF)
sourceStart String Source Start Timecode in SMPTE format (HH:MM:SS:FF)
sourceEnd String Source End Timecode in SMPTE format (HH:MM:SS:FF)
audioTrack String Name of Audio Track, by default A1, A2,... However, audio tracks can be renamed in Premiere Pro to another value.

Example Request

The plugin will call your endpoint with a request similar to the one below.

Headers
  • Content-Type: application/json
  • Authorization: Authentication credentials
Body
{
    "name": "My Film",
    "framerate": "25",
    "entries" : [
    	{
    		"fileName" : "mysong.mp3", 
    		"clipName": "My Song",  
    		"timecodeIn" : "10:02:12:03", 
    		"timecodeOut" : "10:02:16:12", 
    		"duration": "", 
    		"sourceStart": "", 
    		"sourceEnd": "", 
    		"audioTrack": ""
    	},
    	{
    		"fileName" : "song_2.mp3", 
    		"clipName": "Song 2",  
    		"timecodeIn" : "10:03:20:01", 
    		"timecodeOut" : "10:04:23:21", 
    		"duration": "", 
    		"sourceStart": "", 
    		"sourceEnd": "", 
    		"audioTrack": ""
    	}
    ]
}

Return Success

Your API endpoint should return code 201 when the call was successfull. We use the 201 Created code when a cue sheet is successfully created on the server. The response body should be a UTF8 JSON object containing the following parameters:

Parameter Type Required Description
code Int Yes Code 201 for success.
status String Yes Description.

Success Responses Example

{
    "code": "201",
    "status": "The Project was created."
}

Handling Special Characters in Filenames

Please ensure that your API can correctly handle file names containing special characters, emojis, and other non-ASCII characters. Premiere Pro does not limit file names, and users tend to import files without renaming them. Make sure an API call is processed even if only one file name is invalid.

  • Make sure to shorten long file names that exceed your database limit. For example, be aware that file names can be longer than 256 and 512 characters.
  • Make sure to handle filenames containing emoticons, as they tend to cause problems.
  • Make sure to handle special chars and invalid characters that can not be stored in your database. Remove them first if they can not be stored in your database.

The example file name below is technically importable in Premiere Pro and can therefore could be reported to your API endpoint. Ensure that your endpoint can handle it.

Ain’t#2✔B"ы'о";,.Üéß👍が.mp3

Handling Framerates above 100

Be aware that SMPTE timecode and duration can be up to 12 characters long for frame rates above 100 fps e.g. "10:02:12:030". Make sure your endpoint can handle them.

Error Handling

Your API endpoint should handle errors and respond accordingly, for example, if the API key is invalid or project creation fails. Use only error codes supported by our API.

The response body should be a UTF8 JSON object containing the following parameters:

Parameter Type Required Description
code Int Yes Error code. For example code 400.
status String Yes Description of error.

Error Responses Example

{
    "code": "400",
    "status": "The Project creation failed."
}

Endpoint Demo Code (PHP)

The following code example can be used by the endpoint to receive calls from the plugin.

header('Content-Type: application/json');

// --- Configuration ---
define('MAX_FILENAME_LENGTH', 255); // Example max length for database field

// --- Helper function for sending JSON responses ---
function sendJsonResponse($code, $status, $httpStatusCode = 200) {
    http_response_code($httpStatusCode);
    echo json_encode([
        'code' => $code,
        'status' => $status
    ]);
    exit(); // Terminate script execution after sending response
}

// --- Main Endpoint Logic ---

// 1. Check for POST request method
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    sendJsonResponse(405, 'Method Not Allowed. Only POST requests are accepted.', 405);
}

// 2. Validate Authorization header (API Key)
$headers = getallheaders();
$authorizationHeader = $headers['Authorization'] ?? $headers['authorization'] ?? ''; // Case-insensitive check

if (empty($authorizationHeader)) {
    sendJsonResponse(401, 'Authorization header missing.', 401);
}

// Expecting "apikey:API_KEY" format
if (strpos($authorizationHeader, 'apikey:') === 0) {
    $apiKey = substr($authorizationHeader, strlen('apikey:'));
    
    //Add API KEY validation
    define('VALID_API_KEY', 'test-key');
    
    if ($apiKey !== VALID_API_KEY) {
        sendJsonResponse(403, 'Invalid API Key.', 403);
    }
} else {
    // Also check for Basic Auth style for simplicity if Premiere Pro sends it that way for '-u "apikey:API_KEY"'
    // This is a common interpretation of the curl example, adjust as needed.
    if (!isset($_SERVER['PHP_AUTH_USER']) || $_SERVER['PHP_AUTH_USER'] !== 'apikey' || $_SERVER['PHP_AUTH_PW'] !== VALID_API_KEY) {
        sendJsonResponse(403, 'Invalid or missing API Key credentials in Authorization header.', 403);
    }
}


// 3. Read and parse JSON input
$input = file_get_contents('php://input');
if ($input === false) {
    sendJsonResponse(400, 'Failed to read request body.', 400);
}

$data = json_decode($input, true); // true to get associative array
if (json_last_error() !== JSON_ERROR_NONE) {
    sendJsonResponse(400, 'Invalid JSON format: ' . json_last_error_msg(), 400);
}

// 4. Process entries and handle special characters/long filenames
$processedEntries = [];
foreach ($data['entries'] as $index => $entry) {

    // --- Filename sanitization and truncation ---
    $originalFileName = $entry['fileName'];
    $processedFileName = $originalFileName;

    // Convert to UTF-8 if not already (important for handling various characters)
    // This assumes the incoming data is UTF-8, but can be a safeguard.
    if (!mb_check_encoding($processedFileName, 'UTF-8')) {
        $processedFileName = mb_convert_encoding($processedFileName, 'UTF-8', mb_detect_encoding($processedFileName, 'UTF-8, ISO-8859-1', true));
    }
    
    // Handle problematic characters by replacing them or removing them
    // Example: remove characters that might cause issues with file paths or database queries
    // Remove emojis/specific unicode chars if they absolutely cannot be stored

    // Truncate long filenames
    if (mb_strlen($processedFileName, 'UTF-8') > MAX_FILENAME_LENGTH) {
        $fileExtension = pathinfo($processedFileName, PATHINFO_EXTENSION);
        $fileNameWithoutExt = pathinfo($processedFileName, PATHINFO_FILENAME);
        $truncatedFileName = mb_substr($fileNameWithoutExt, 0, MAX_FILENAME_LENGTH - mb_strlen($fileExtension, 'UTF-8') - 1, 'UTF-8') . '.' . $fileExtension;
        $processedFileName = $truncatedFileName;
        error_log("Filename truncated for entry $index: '$originalFileName' to '$processedFileName'");
    }

    $entry['fileName'] = $processedFileName; // Update the entry with the processed filename
    $processedEntries[] = $entry;

    // Example: Log or store the data
    // Connect to a database (e.g., MySQL, PostgreSQL)
    // and store this information, handling potential errors from database operations.
    // Example:
    // try {
    //     $stmt = $pdo->prepare("INSERT INTO cuesheet_entries (sequence_name, filename, clipname, ...) VALUES (?, ?, ?, ...)");
    //     $stmt->execute([$data['name'], $entry['fileName'], $entry['clipName'], ...]);
    // } catch (PDOException $e) {
    //     sendJsonResponse(500, 'Database error: ' . $e->getMessage(), 500);
    // }
}

// Simulating success
error_log("Successfully received cue sheet for sequence: " . $data['name'] . " with " . count($processedEntries) . " entries.");
error_log("Processed Data: " . json_encode([
    'name' => $data['name'],
    'framerate' => $data['framerate'],
    'entries' => $processedEntries
]));

// If all processing is successful, send a success response
sendJsonResponse(201, 'Cue sheet received and processed successfully.', 201);

Test your endpoint - cURL Request Example

Test your endpoint with a simple cURL call.

curl -X POST https://yourWebsite.com/yourApiEndpoint \
  -u "apikey:API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "My Film",
    "framerate": "25",
    "entries" : [
    	{
    		"fileName" : "mysong.mp3", 
    		"clipName": "My Song",  
    		"timecodeIn" : "10:02:12:03", 
    		"timecodeOut" : "10:02:16:12", 
    		"duration": "", 
    		"sourceStart": "", 
    		"sourceEnd": "", 
    		"audioTrack": ""
    	},
    	{
    		"fileName" : "Ain’t#2✔B"ы'о";,.Üéß👍が.mp3", 
    		"clipName": "Ain’t#2✔B"ы'о";,.Üéß👍が",  
    		"timecodeIn" : "10:03:20:01", 
    		"timecodeOut" : "10:04:23:21", 
    		"duration": "", 
    		"sourceStart": "", 
    		"sourceEnd": "", 
    		"audioTrack": ""
    	}
    ]
}'

Next steps and release

Once your endpoint is up and running, we will implement it, test it and release a new version of the plugin that can be shared with your users.

Search Metadata

This endpoint can be used to search for metadata from production music libraries using the file name.

⚠️ This is not a public endpoint and can only be used in one of the following ways:
  • As a production music library, you are already providing metadata to EditingTools. This endpoint can then be unlocked to enable searches within your own database. For example, you could use it to check if the metadata is indexed and found correctly. Your search is limited to your own database.
  • The production libraries that you want to search have agreed to your software accessing their metadata directly via our API.
If you do not meet these conditions, use our Cue Sheet Metadata workflow instead. Create a new music cue sheet via API, let it scan for metadata, and download the resulting cue sheet with metadata. See our Guide to best practices for more details.

Endpoint

This endpoint is used to search for metadata.

POST https://api.editingtools.io/v2/metadata/search

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: application/json

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
fileName String Yes
libraries String Yes A list of libraries to search, separated by commas.

Request Example

curl -X POST https://api.editingtools.io/v2/metadata/search \
  -u "apikey:API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "fileName": "audiofile.mp3",
    "libraries": "abcmusic, xyzmusic"
}'

For more details please contact our team.

Endpoint URL

Endpoint URL to convert a sequence into a music cue sheet document in one step.

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

Endpoint URL to create and manage a music cue sheet project.

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

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