NAV
General Flip Timed Text Speech Quality Control
Notifications

API

Telestream Cloud Quality Control service API allows you programmatically integrate with our QC service to run quality and compliance checks for file base media. The API is REST based, returns responses in JSON and lets you create and manage Projects, submit jobs using specific templates and monitor their progress, as well as results.

Using the REST API directly

If you don’t plan to use one of our SDKs you then you will need the following data to make calls to our API:

Project

templates

Code samples

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Api-Key' => 'API_KEY'
}

result = RestClient.get 'https://api.cloud.telestream.net/qc/v1.0/templates.json',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'X-Api-Key': 'API_KEY'
}

r = requests.get('https://api.cloud.telestream.net/qc/v1.0/templates.json', params={

}, headers = headers)

print r.json()

URL obj = new URL("https://api.cloud.telestream.net/qc/v1.0/templates.json");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "X-Api-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.cloud.telestream.net/qc/v1.0/templates.json", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

GET /templates.json

List all templates

Example responses

200 Response

[
  {
    "name": "string",
    "type": "string",
    "description": "string",
    "produces": {
      "property1": "string",
      "property2": "string"
    },
    "takes": {
      "property1": "string",
      "property2": "string"
    }
  }
]

Responses

Status Description Schema
200 OK
OK
Inline

Response Schema

Status Code 200
anonymous
optional
none
undefined
» name
string
optional
none
undefined
» type
string
optional
none
undefined
» description
string
optional
none
undefined
» produces
object
optional
none
undefined
»» additionalProperties
string
optional
none
undefined
» takes
object
optional
none
undefined
»» additionalProperties
string
optional
none
undefined

list projects

Code samples

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Api-Key' => 'API_KEY'
}

result = RestClient.get 'https://api.cloud.telestream.net/qc/v1.0/projects.json',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'X-Api-Key': 'API_KEY'
}

r = requests.get('https://api.cloud.telestream.net/qc/v1.0/projects.json', params={

}, headers = headers)

print r.json()

URL obj = new URL("https://api.cloud.telestream.net/qc/v1.0/projects.json");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "X-Api-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.cloud.telestream.net/qc/v1.0/projects.json", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

GET /projects.json

List all projects for an account

Example responses

200 Response

[
  {
    "id": "string",
    "name": "string",
    "status": "active",
    "template": "string",
    "options": {
      "file_tests": {
        "container_test": {
          "checked": true,
          "container": "Mov",
          "reject_on_error": true
        },
        "video_codec_test": {
          "checked": true,
          "video_codec": "ProRes",
          "video_profile": "VideoProfileNone",
          "video_level": "VideoLevelNone",
          "reject_on_error": true
        },
        "container_essence_consistency_test": {
          "checked": true
        },
        "enhanced_syntax_test": {
          "checked": true
        },
        "framesize_test": {
          "checked": true,
          "horizontal_size": 1920,
          "vertical_size": 1080
        },
        "pixel_aspect_ratio_test": {
          "checked": true,
          "pixel_aspect_ratio_numerator": 1,
          "pixel_aspect_ratio_denominator": 1
        },
        "i_tunes_compatibility_test": {
          "checked": true,
          "reject_on_error": true
        },
        "framerate_test": {
          "checked": true,
          "framerate_numerator": 25,
          "framerate_denominator": 1
        },
        "video_bit_rate_mode_test": {
          "checked": true,
          "mode": "VBR"
        },
        "video_bitrate_test": {
          "checked": true,
          "video_bitrate_lower": 88,
          "video_bitrate_upper": 220
        }
      }
    }
  }
]

401 Response

404 Response

Responses

Status Description Schema
200 OK
OK
Inline
401 Unauthorized
Not authorized
string
404 Not Found
Item not found
string

Response Schema

Status Code 200
anonymous
optional
none
undefined
» id
string
optional
A unique identifier of a Project.
undefined
» name
string
optional
Human-readable identifier of a Project.
undefined
» status
string
optional
Project status.
undefined
» template
string
optional
Name of QC template.
undefined
» options
object
optional
JSON with specific options
undefined
»» additionalProperties
object
optional
none
undefined

Enumerated Values

status
active
status
pending
status
archived
status
suspended

create project

Code samples

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'X-Api-Key' => 'API_KEY'
}

result = RestClient.post 'https://api.cloud.telestream.net/qc/v1.0/projects.json',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'X-Api-Key': 'API_KEY'
}

r = requests.post('https://api.cloud.telestream.net/qc/v1.0/projects.json', params={

}, headers = headers)

print r.json()

URL obj = new URL("https://api.cloud.telestream.net/qc/v1.0/projects.json");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "X-Api-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://api.cloud.telestream.net/qc/v1.0/projects.json", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

POST /projects.json

Create a new project

Body parameter

{
  "name": "string",
  "template": "string",
  "options": {
    "video_tests": {
      "video_test": [
        {
          "flash_test": {
            "checked": true,
            "check_type": "PSEStandard",
            "reject_on_error": true
          }
        }
      ]
    }
  }
}

Parameters

body
object
In body
optional
none

Example responses

201 Response

{
  "id": "string",
  "name": "string",
  "status": "active",
  "template": "string",
  "options": {
    "file_tests": {
      "container_test": {
        "checked": true,
        "container": "Mov",
        "reject_on_error": true
      },
      "video_codec_test": {
        "checked": true,
        "video_codec": "ProRes",
        "video_profile": "VideoProfileNone",
        "video_level": "VideoLevelNone",
        "reject_on_error": true
      },
      "container_essence_consistency_test": {
        "checked": true
      },
      "enhanced_syntax_test": {
        "checked": true
      },
      "framesize_test": {
        "checked": true,
        "horizontal_size": 1920,
        "vertical_size": 1080
      },
      "pixel_aspect_ratio_test": {
        "checked": true,
        "pixel_aspect_ratio_numerator": 1,
        "pixel_aspect_ratio_denominator": 1
      },
      "i_tunes_compatibility_test": {
        "checked": true,
        "reject_on_error": true
      },
      "framerate_test": {
        "checked": true,
        "framerate_numerator": 25,
        "framerate_denominator": 1
      },
      "video_bit_rate_mode_test": {
        "checked": true,
        "mode": "VBR"
      },
      "video_bitrate_test": {
        "checked": true,
        "video_bitrate_lower": 88,
        "video_bitrate_upper": 220
      }
    }
  }
}

401 Response

422 Response

Responses

Status Description Schema
201 Created
Created
Project
401 Unauthorized
Not authorized
string
422 Unprocessable Entity
Invalid options provided
string

get project

Code samples

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Api-Key' => 'API_KEY'
}

result = RestClient.get 'https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}.json',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'X-Api-Key': 'API_KEY'
}

r = requests.get('https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}.json', params={

}, headers = headers)

print r.json()

URL obj = new URL("https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}.json");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "X-Api-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}.json", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

GET /projects/{project_id}.json

Get project by Id

Parameters

project_id
string
In path
required
A unique identifier of a Project.

Example responses

200 Response

{
  "id": "string",
  "name": "string",
  "status": "active",
  "template": "string",
  "options": {
    "file_tests": {
      "container_test": {
        "checked": true,
        "container": "Mov",
        "reject_on_error": true
      },
      "video_codec_test": {
        "checked": true,
        "video_codec": "ProRes",
        "video_profile": "VideoProfileNone",
        "video_level": "VideoLevelNone",
        "reject_on_error": true
      },
      "container_essence_consistency_test": {
        "checked": true
      },
      "enhanced_syntax_test": {
        "checked": true
      },
      "framesize_test": {
        "checked": true,
        "horizontal_size": 1920,
        "vertical_size": 1080
      },
      "pixel_aspect_ratio_test": {
        "checked": true,
        "pixel_aspect_ratio_numerator": 1,
        "pixel_aspect_ratio_denominator": 1
      },
      "i_tunes_compatibility_test": {
        "checked": true,
        "reject_on_error": true
      },
      "framerate_test": {
        "checked": true,
        "framerate_numerator": 25,
        "framerate_denominator": 1
      },
      "video_bit_rate_mode_test": {
        "checked": true,
        "mode": "VBR"
      },
      "video_bitrate_test": {
        "checked": true,
        "video_bitrate_lower": 88,
        "video_bitrate_upper": 220
      }
    }
  }
}

401 Response

404 Response

Responses

Status Description Schema
200 OK
OK
Project
401 Unauthorized
Not authorized
string
404 Not Found
Item not found
string

modify project

Code samples

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'X-Api-Key' => 'API_KEY'
}

result = RestClient.put 'https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}.json',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'X-Api-Key': 'API_KEY'
}

r = requests.put('https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}.json', params={

}, headers = headers)

print r.json()

URL obj = new URL("https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}.json");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("PUT");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "X-Api-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("PUT", "https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}.json", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

PUT /projects/{project_id}.json

Modify project

Body parameter

{
  "name": "string",
  "options": {
    "video_tests": {
      "video_test": [
        {
          "flash_test": {
            "checked": true,
            "check_type": "PSEStandard",
            "reject_on_error": true
          }
        }
      ]
    }
  }
}

Parameters

project_id
string
In path
required
none
body
object
In body
optional
none

Example responses

200 Response

{
  "id": "string",
  "name": "string",
  "status": "active",
  "template": "string",
  "options": {
    "file_tests": {
      "container_test": {
        "checked": true,
        "container": "Mov",
        "reject_on_error": true
      },
      "video_codec_test": {
        "checked": true,
        "video_codec": "ProRes",
        "video_profile": "VideoProfileNone",
        "video_level": "VideoLevelNone",
        "reject_on_error": true
      },
      "container_essence_consistency_test": {
        "checked": true
      },
      "enhanced_syntax_test": {
        "checked": true
      },
      "framesize_test": {
        "checked": true,
        "horizontal_size": 1920,
        "vertical_size": 1080
      },
      "pixel_aspect_ratio_test": {
        "checked": true,
        "pixel_aspect_ratio_numerator": 1,
        "pixel_aspect_ratio_denominator": 1
      },
      "i_tunes_compatibility_test": {
        "checked": true,
        "reject_on_error": true
      },
      "framerate_test": {
        "checked": true,
        "framerate_numerator": 25,
        "framerate_denominator": 1
      },
      "video_bit_rate_mode_test": {
        "checked": true,
        "mode": "VBR"
      },
      "video_bitrate_test": {
        "checked": true,
        "video_bitrate_lower": 88,
        "video_bitrate_upper": 220
      }
    }
  }
}

401 Response

404 Response

422 Response

Responses

Status Description Schema
200 OK
OK
Project
401 Unauthorized
Not authorized
string
404 Not Found
Item not found
string
422 Unprocessable Entity
Invalid options provided
string

remove project

Code samples

require 'rest-client'
require 'json'

headers = {
  'Accept' => '*/*',
  'X-Api-Key' => 'API_KEY'
}

result = RestClient.delete 'https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}.json',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': '*/*',
  'X-Api-Key': 'API_KEY'
}

r = requests.delete('https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}.json', params={

}, headers = headers)

print r.json()

URL obj = new URL("https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}.json");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("DELETE");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"*/*"},
        "X-Api-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("DELETE", "https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}.json", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

DELETE /projects/{project_id}.json

Parameters

project_id
string
In path
required
none

Example responses

401 Response

404 Response

Responses

Status Description Schema
200 OK
OK
None
401 Unauthorized
Not authorized
string
404 Not Found
Item not found
string

Job

list jobs

Code samples

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Api-Key' => 'API_KEY'
}

result = RestClient.get 'https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}/jobs.json',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'X-Api-Key': 'API_KEY'
}

r = requests.get('https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}/jobs.json', params={

}, headers = headers)

print r.json()

URL obj = new URL("https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}/jobs.json");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "X-Api-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}/jobs.json", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

GET /projects/{project_id}/jobs.json

Get jobs form projects

Parameters

project_id
string
In path
required
A unique identifier of a Project.
expand
boolean
In query
optional
Expand details of job
status
string
In query
optional
Filter jobs by status
per_page
integer
In query
optional
Limit number of listed jobs
page
integer
In query
optional
Index of jobs page to be listed

Example responses

200 Response

{
  "jobs": [
    {
      "id": "e75e68e192e6fc04ea3940d302d7bec5",
      "project_id": "string",
      "status": "pending",
      "state": "string",
      "duration": 0,
      "type": "vidchecker",
      "progress": 0,
      "filename": "string",
      "source_url": "string",
      "created_at": "string",
      "updated_at": "string",
      "error_class": "string",
      "error_message": "string",
      "payload": "string",
      "details": {
        "media": [
          {
            "audio": [
              {
                "duration": 78.345,
                "codec": "PCM",
                "channels": 6,
                "program": "string",
                "bitrate": 4608000,
                "sample_rate": 48000
              }
            ],
            "video": [
              {
                "duration": 78.3450116,
                "codec": "MPEG-2",
                "width": 1920,
                "height": 1080,
                "bitrate": 0,
                "fps": 29.97
              }
            ],
            "container": {
              "type": "mp4",
              "bitrate": 0
            }
          }
        ],
        "result": {
          "alerts": [
            {
              "level": "string",
              "info": "string",
              "begin": 0,
              "end": 0,
              "stream": 0,
              "detail": "string"
            }
          ],
          "reports": [
            "string"
          ]
        }
      }
    }
  ],
  "page": 0,
  "per_page": 0,
  "page_count": 0,
  "total_count": 0
}

401 Response

404 Response

Responses

Status Description Schema
200 OK
OK
JobsCollection
401 Unauthorized
Not authorized
string
404 Not Found
Item not found
string

create job

Code samples

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'X-Api-Key' => 'API_KEY'
}

result = RestClient.post 'https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}/jobs.json',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'X-Api-Key': 'API_KEY'
}

r = requests.post('https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}/jobs.json', params={

}, headers = headers)

print r.json()

URL obj = new URL("https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}/jobs.json");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "X-Api-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}/jobs.json", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

POST /projects/{project_id}/jobs.json

Create a new job

Body parameter

{
  "options": {
    "video_tests": {
      "video_test": [
        {
          "flash_test": {
            "checked": true,
            "check_type": "PSEStandard",
            "reject_on_error": true
          }
        }
      ]
    }
  },
  "url": "string",
  "payload": "string"
}

Parameters

project_id
string
In path
required
A unique identifier of a Project.
body
In body
required
none

Example responses

201 Response

{
  "id": "e75e68e192e6fc04ea3940d302d7bec5",
  "project_id": "string",
  "status": "pending",
  "state": "string",
  "duration": 0,
  "type": "vidchecker",
  "progress": 0,
  "filename": "string",
  "source_url": "string",
  "created_at": "string",
  "updated_at": "string",
  "error_class": "string",
  "error_message": "string",
  "payload": "string",
  "details": {
    "media": [
      {
        "audio": [
          {
            "duration": 78.345,
            "codec": "PCM",
            "channels": 6,
            "program": "string",
            "bitrate": 4608000,
            "sample_rate": 48000
          }
        ],
        "video": [
          {
            "duration": 78.3450116,
            "codec": "MPEG-2",
            "width": 1920,
            "height": 1080,
            "bitrate": 0,
            "fps": 29.97
          }
        ],
        "container": {
          "type": "mp4",
          "bitrate": 0
        }
      }
    ],
    "result": {
      "alerts": [
        {
          "level": "string",
          "info": "string",
          "begin": 0,
          "end": 0,
          "stream": 0,
          "detail": "string"
        }
      ],
      "reports": [
        "string"
      ]
    }
  }
}

401 Response

404 Response

422 Response

Responses

Status Description Schema
201 Created
OK
Job
401 Unauthorized
Not authorized
string
404 Not Found
Item not found
string
422 Unprocessable Entity
Invalid options provided
string

get job

Code samples

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Api-Key' => 'API_KEY'
}

result = RestClient.get 'https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}/jobs/{job_id}.json',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'X-Api-Key': 'API_KEY'
}

r = requests.get('https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}/jobs/{job_id}.json', params={

}, headers = headers)

print r.json()

URL obj = new URL("https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}/jobs/{job_id}.json");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "X-Api-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}/jobs/{job_id}.json", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

GET /projects/{project_id}/jobs/{job_id}.json

Get QC job

Parameters

project_id
string
In path
required
A unique identifier of a Project.
job_id
string
In path
required
A unique identifier of a Job.

Example responses

200 Response

{
  "id": "e75e68e192e6fc04ea3940d302d7bec5",
  "project_id": "string",
  "status": "pending",
  "state": "string",
  "duration": 0,
  "type": "vidchecker",
  "progress": 0,
  "filename": "string",
  "source_url": "string",
  "created_at": "string",
  "updated_at": "string",
  "error_class": "string",
  "error_message": "string",
  "payload": "string",
  "details": {
    "media": [
      {
        "audio": [
          {
            "duration": 78.345,
            "codec": "PCM",
            "channels": 6,
            "program": "string",
            "bitrate": 4608000,
            "sample_rate": 48000
          }
        ],
        "video": [
          {
            "duration": 78.3450116,
            "codec": "MPEG-2",
            "width": 1920,
            "height": 1080,
            "bitrate": 0,
            "fps": 29.97
          }
        ],
        "container": {
          "type": "mp4",
          "bitrate": 0
        }
      }
    ],
    "result": {
      "alerts": [
        {
          "level": "string",
          "info": "string",
          "begin": 0,
          "end": 0,
          "stream": 0,
          "detail": "string"
        }
      ],
      "reports": [
        "string"
      ]
    }
  }
}

401 Response

404 Response

Responses

Status Description Schema
200 OK
OK
Job
401 Unauthorized
Not authorized
string
404 Not Found
Item not found
string

remove job

Code samples

require 'rest-client'
require 'json'

headers = {
  'Accept' => '*/*',
  'X-Api-Key' => 'API_KEY'
}

result = RestClient.delete 'https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}/jobs/{job_id}.json',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': '*/*',
  'X-Api-Key': 'API_KEY'
}

r = requests.delete('https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}/jobs/{job_id}.json', params={

}, headers = headers)

print r.json()

URL obj = new URL("https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}/jobs/{job_id}.json");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("DELETE");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"*/*"},
        "X-Api-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("DELETE", "https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}/jobs/{job_id}.json", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

DELETE /projects/{project_id}/jobs/{job_id}.json

Parameters

project_id
string
In path
required
A unique identifier of a Project.
job_id
string
In path
required
A unique identifier of a Job.

Example responses

401 Response

404 Response

Responses

Status Description Schema
200 OK
OK
None
401 Unauthorized
Not authorized
string
404 Not Found
Item not found
string

cancel job

Code samples

require 'rest-client'
require 'json'

headers = {
  'Accept' => '*/*',
  'X-Api-Key' => 'API_KEY'
}

result = RestClient.put 'https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}/jobs/{job_id}/cancel.json',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': '*/*',
  'X-Api-Key': 'API_KEY'
}

r = requests.put('https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}/jobs/{job_id}/cancel.json', params={

}, headers = headers)

print r.json()

URL obj = new URL("https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}/jobs/{job_id}/cancel.json");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("PUT");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"*/*"},
        "X-Api-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("PUT", "https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}/jobs/{job_id}/cancel.json", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

PUT /projects/{project_id}/jobs/{job_id}/cancel.json

Parameters

project_id
string
In path
required
A unique identifier of a Project.
job_id
string
In path
required
A unique identifier of a Job.

Example responses

401 Response

404 Response

422 Response

Responses

Status Description Schema
202 Accepted
Accepted
None
401 Unauthorized
Not authorized
string
404 Not Found
Item not found
string
422 Unprocessable Entity
Invalid options provided
string

signed urls

Code samples

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Api-Key' => 'API_KEY'
}

result = RestClient.get 'https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}/jobs/{job_id}/signed-urls.json',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'X-Api-Key': 'API_KEY'
}

r = requests.get('https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}/jobs/{job_id}/signed-urls.json', params={

}, headers = headers)

print r.json()

URL obj = new URL("https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}/jobs/{job_id}/signed-urls.json");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "X-Api-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}/jobs/{job_id}/signed-urls.json", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

GET /projects/{project_id}/jobs/{job_id}/signed-urls.json

Parameters

project_id
string
In path
required
A unique identifier of a Project.
job_id
string
In path
required
A unique identifier of a Job.

Example responses

200 Response

{
  "property1": "string",
  "property2": "string"
}

Responses

Status Description Schema
200 OK
OK
Inline

Response Schema

Status Code 200

A signed URLs pointing to the job outputs, alert info and report.

» additionalProperties
string
optional
none
undefined

proxy

Code samples

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Api-Key' => 'API_KEY'
}

result = RestClient.get 'https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}/jobs/{job_id}/proxy.json',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Accept': 'application/json',
  'X-Api-Key': 'API_KEY'
}

r = requests.get('https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}/jobs/{job_id}/proxy.json', params={

}, headers = headers)

print r.json()

URL obj = new URL("https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}/jobs/{job_id}/proxy.json");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "X-Api-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}/jobs/{job_id}/proxy.json", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

GET /projects/{project_id}/jobs/{job_id}/proxy.json

Parameters

project_id
string
In path
required
A unique identifier of a Project.
job_id
string
In path
required
A unique identifier of a Job.

Example responses

200 Response

{
  "status": "string",
  "progress": 0,
  "url": "string",
  "id": "string",
  "updated_at": "string"
}

Responses

Status Description Schema
200 OK
OK
Proxy

upload video

Code samples

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'X-Api-Key' => 'API_KEY'
}

result = RestClient.post 'https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}/upload.json',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'X-Api-Key': 'API_KEY'
}

r = requests.post('https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}/upload.json', params={

}, headers = headers)

print r.json()

URL obj = new URL("https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}/upload.json");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "X-Api-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://api.cloud.telestream.net/qc/v1.0/projects/{project_id}/upload.json", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

POST /projects/{project_id}/upload.json

Creates an upload session

Body parameter

{
  "file_size": 0,
  "file_name": "string",
  "extra_files": [
    {
      "tag": "string",
      "file_size": 0,
      "file_name": "string"
    }
  ],
  "profiles": "string",
  "multi_chunk": true
}

Parameters

project_id
string
In path
required
A unique identifier of a Project.
body
object
In body
required
none
» file_size
integer(int64)
In body
required
Size of the file that will be uploaded in bytes.
» file_name
string
In body
required
Name of the file that will be uploaded.
» extra_files
In body
optional
A list of names of additional files that will be uploaded.
»» tag
string
In body
required
none
»» file_size
integer(int64)
In body
required
none
»» file_name
string
In body
required
none
» profiles
string
In body
optional
A comma-separated list of profile names or IDs to be used during encoding. Alternatively, specify none so no encodings will created right away.
» multi_chunk
boolean
In body
optional
none

Example responses

201 Response

{
  "type": "object",
  "required": [
    "id",
    "location"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "An unique identifier of the UploadSession."
    },
    "location": {
      "type": "string",
      "description": "An URL to which chunks of the uploaded file should be sent"
    },
    "parts": {
      "type": "integer",
      "description": "A number of chunks that are expected by the upstream."
    },
    "part_size": {
      "type": "integer",
      "description": "An expected size of uploaded chunks."
    },
    "max_connections": {
      "type": "integer",
      "description": "A maximum number of concurrent connections."
    },
    "extra_files": {
      "type": "object",
      "additionalProperties": null,
      "description": "An object containing additional files uploaded using the session."
    }
  }
}

Responses

Status Description Schema
201 Created
Created
UploadSession

Schemas

Project

{
  "id": "string",
  "name": "string",
  "status": "active",
  "template": "string",
  "options": {
    "file_tests": {
      "container_test": {
        "checked": true,
        "container": "Mov",
        "reject_on_error": true
      },
      "video_codec_test": {
        "checked": true,
        "video_codec": "ProRes",
        "video_profile": "VideoProfileNone",
        "video_level": "VideoLevelNone",
        "reject_on_error": true
      },
      "container_essence_consistency_test": {
        "checked": true
      },
      "enhanced_syntax_test": {
        "checked": true
      },
      "framesize_test": {
        "checked": true,
        "horizontal_size": 1920,
        "vertical_size": 1080
      },
      "pixel_aspect_ratio_test": {
        "checked": true,
        "pixel_aspect_ratio_numerator": 1,
        "pixel_aspect_ratio_denominator": 1
      },
      "i_tunes_compatibility_test": {
        "checked": true,
        "reject_on_error": true
      },
      "framerate_test": {
        "checked": true,
        "framerate_numerator": 25,
        "framerate_denominator": 1
      },
      "video_bit_rate_mode_test": {
        "checked": true,
        "mode": "VBR"
      },
      "video_bitrate_test": {
        "checked": true,
        "video_bitrate_lower": 88,
        "video_bitrate_upper": 220
      }
    }
  }
}

Properties

id
string
optional
A unique identifier of a Project.
name
string
optional
Human-readable identifier of a Project.
status
string
optional
Project status.
template
string
optional
Name of QC template.
options
object
optional
JSON with specific options
» additionalProperties
object
optional
none

Enumerated Values

status
active
status
pending
status
archived
status
suspended

JobsCollection

{
  "jobs": [
    {
      "id": "e75e68e192e6fc04ea3940d302d7bec5",
      "project_id": "string",
      "status": "pending",
      "state": "string",
      "duration": 0,
      "type": "vidchecker",
      "progress": 0,
      "filename": "string",
      "source_url": "string",
      "created_at": "string",
      "updated_at": "string",
      "error_class": "string",
      "error_message": "string",
      "payload": "string",
      "details": {
        "media": [
          {
            "audio": [
              {
                "duration": 78.345,
                "codec": "PCM",
                "channels": 6,
                "program": "string",
                "bitrate": 4608000,
                "sample_rate": 48000
              }
            ],
            "video": [
              {
                "duration": 78.3450116,
                "codec": "MPEG-2",
                "width": 1920,
                "height": 1080,
                "bitrate": 0,
                "fps": 29.97
              }
            ],
            "container": {
              "type": "mp4",
              "bitrate": 0
            }
          }
        ],
        "result": {
          "alerts": [
            {
              "level": "string",
              "info": "string",
              "begin": 0,
              "end": 0,
              "stream": 0,
              "detail": "string"
            }
          ],
          "reports": [
            "string"
          ]
        }
      }
    }
  ],
  "page": 0,
  "per_page": 0,
  "page_count": 0,
  "total_count": 0
}

Properties

jobs
[Job]
optional
none
page
integer
optional
A number of the fetched page.
per_page
integer
optional
A number of jobs per page.
page_count
integer
optional
A number of all pages.
total_count
integer
optional
A number of all jobs stored in the db.

Job

{
  "id": "e75e68e192e6fc04ea3940d302d7bec5",
  "project_id": "string",
  "status": "pending",
  "state": "string",
  "duration": 0,
  "type": "vidchecker",
  "progress": 0,
  "filename": "string",
  "source_url": "string",
  "created_at": "string",
  "updated_at": "string",
  "error_class": "string",
  "error_message": "string",
  "payload": "string",
  "details": {
    "media": [
      {
        "audio": [
          {
            "duration": 78.345,
            "codec": "PCM",
            "channels": 6,
            "program": "string",
            "bitrate": 4608000,
            "sample_rate": 48000
          }
        ],
        "video": [
          {
            "duration": 78.3450116,
            "codec": "MPEG-2",
            "width": 1920,
            "height": 1080,
            "bitrate": 0,
            "fps": 29.97
          }
        ],
        "container": {
          "type": "mp4",
          "bitrate": 0
        }
      }
    ],
    "result": {
      "alerts": [
        {
          "level": "string",
          "info": "string",
          "begin": 0,
          "end": 0,
          "stream": 0,
          "detail": "string"
        }
      ],
      "reports": [
        "string"
      ]
    }
  }
}

Properties

id
string
optional
none
project_id
string
optional
none
status
string
optional
none
state
string
optional
none
duration
integer
optional
none
type
string
optional
none
progress
integer
optional
none
filename
string
optional
none
source_url
string
optional
none
created_at
string
optional
none
updated_at
string
optional
none
error_class
string
optional
none
error_message
string
optional
none
payload
string
optional
none
details
object
optional
none
» media
optional
none
» result
object
optional
Job type specific result
»» alerts
optional
none
»» reports
[string]
optional
none

Enumerated Values

status
pending
status
transfering
status
queued
status
downloading
status
uploading
status
processing
status
success
status
error
type
vidchecker
type
lipsync

Media

{
  "audio": [
    {
      "duration": 78.345,
      "codec": "PCM",
      "channels": 6,
      "program": "string",
      "bitrate": 4608000,
      "sample_rate": 48000
    }
  ],
  "video": [
    {
      "duration": 78.3450116,
      "codec": "MPEG-2",
      "width": 1920,
      "height": 1080,
      "bitrate": 0,
      "fps": 29.97
    }
  ],
  "container": {
    "type": "mp4",
    "bitrate": 0
  }
}

Description of the processed media file.

Properties

optional
none
optional
none
container
optional
none

AudioStream

{
  "duration": 78.345,
  "codec": "PCM",
  "channels": 6,
  "program": "string",
  "bitrate": 4608000,
  "sample_rate": 48000
}

Properties

duration
number
optional
Audio duration measured in seconds.
codec
string
optional
Audio codec name.
channels
integer
optional
Number of audio channels.
program
string
optional
none
bitrate
integer
optional
Audio bitrate measured in bps
sample_rate
integer
optional
Sample rate measured in Hz.

VideoStream

{
  "duration": 78.3450116,
  "codec": "MPEG-2",
  "width": 1920,
  "height": 1080,
  "bitrate": 0,
  "fps": 29.97
}

Properties

duration
number
optional
Video stream duration measured in seconds.
codec
string
optional
none
width
integer
optional
none
height
integer
optional
none
bitrate
integer
optional
Video stream bitrate measured in bps
fps
number
optional
none

Container

{
  "type": "mp4",
  "bitrate": 0
}

Properties

type
string
optional
none
bitrate
integer
optional
File bitrate measured in bps

Options

{
  "video_tests": {
    "video_test": [
      {
        "flash_test": {
          "checked": true,
          "check_type": "PSEStandard",
          "reject_on_error": true
        }
      }
    ]
  }
}

JSON with specific options

Properties

additionalProperties
object
optional
none

JobData

{
  "options": {
    "video_tests": {
      "video_test": [
        {
          "flash_test": {
            "checked": true,
            "check_type": "PSEStandard",
            "reject_on_error": true
          }
        }
      ]
    }
  },
  "url": "string",
  "payload": "string"
}

Properties

options
optional
none
url
string
optional
none
payload
string
optional
Payload is an arbitrary text of length 256 or shorter that you can store along the Media. It is typically used to retain an association with one of your own DB record ID.

Proxy

{
  "status": "string",
  "progress": 0,
  "url": "string",
  "id": "string",
  "updated_at": "string"
}

Properties

status
string
optional
none
progress
integer
optional
none
url
string
optional
none
id
string
optional
none
updated_at
string
optional
none

Alert

{
  "level": "string",
  "info": "string",
  "begin": 0,
  "end": 0,
  "stream": 0,
  "detail": "string"
}

Properties

level
string
optional
none
info
string
optional
Extra information for an alert.
begin
number
optional
Start time of alert.
end
number
optional
End time of alert.
stream
integer
optional
none
detail
string
optional
none

ExtraFile

{
  "tag": "string",
  "file_size": 0,
  "file_name": "string"
}

Properties

tag
string
required
none
file_size
integer(int64)
required
none
file_name
string
required
none

UploadSession

{
  "type": "object",
  "required": [
    "id",
    "location"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "An unique identifier of the UploadSession."
    },
    "location": {
      "type": "string",
      "description": "An URL to which chunks of the uploaded file should be sent"
    },
    "parts": {
      "type": "integer",
      "description": "A number of chunks that are expected by the upstream."
    },
    "part_size": {
      "type": "integer",
      "description": "An expected size of uploaded chunks."
    },
    "max_connections": {
      "type": "integer",
      "description": "A maximum number of concurrent connections."
    },
    "extra_files": {
      "type": "object",
      "additionalProperties": null,
      "description": "An object containing additional files uploaded using the session."
    }
  }
}

Properties

id
string
required
An unique identifier of the UploadSession.
location
string
required
An URL to which chunks of the uploaded file should be sent
parts
integer
optional
A number of chunks that are expected by the upstream.
part_size
integer
optional
An expected size of uploaded chunks.
max_connections
integer
optional
A maximum number of concurrent connections.
extra_files
object
optional
An object containing additional files uploaded using the session.

Template

{
  "name": "string",
  "type": "string",
  "description": "string",
  "produces": {
    "property1": "string",
    "property2": "string"
  },
  "takes": {
    "property1": "string",
    "property2": "string"
  }
}

Properties

name
string
optional
none
type
string
optional
none
description
string
optional
none
produces
object
optional
none
» additionalProperties
string
optional
none
takes
object
optional
none
» additionalProperties
string
optional
none