Qualify is an award winning, cloud native, file based QC service designed for broadcasters, content creators and distributors who need to meet industry requirements for media delivery. Ideal for media QC checks for inbound content from creators or outbound content delivery to Netflix and Prime or public broadcasters who require strict compliance for:
- Format (codec, resolution, frame rate)
- Bitrate and audio channels configuration
- Video range, black levels, color gamut
- Specific layout (bars + black + program)
- Loudness levels (ATSC A/85, EBU R128)
- Quality levels (blockiness, letterboxing)
Custom Qualify test plan creation is available in the Encoding.com UI and complete API integration documentation is referenced below. Please see the Qualify User Guide for more test plan configuration details and a Complete List of Qualify QC Tests.
Media FormatQualify Validation available only for mp4, cablelabs_mpegts, mainconcept_mxf, and mxf_op1a output formats. For qc_check format, You can use all single-bitrate media containers, Mpeg-DASH container, and all video and audio codecs.
Template name as identifierPrior to 7.22 release Qualify Template parameter name used as identifier, after 7.22 release template identifier changed to the unique GUID.
Template name still can be used as identifier but it's not recommended because now name parameter isn't unique e.g. it will address the first template with provided name.
<?xml version="1.0"?>
<query>
<userid>[UserID]</userid> <!-- required-->
<userkey>[UserKey]</userkey> <!-- required-->
<action>AddMedia</action>
<source>[SourceFile|SourcePlaylist]</source><!-- required -->
<format>
<output>[mp4|cablelabs_mpegts|mainconcept_mxf|mxf_op1a]</output><!-- required -->
<qc>
<qc_qualify_validation>
<template_id>[TemplateGUID]</template_id><!-- required if template_json not specified -->
<template>[TemplateName]</template><!-- optional, deprecated -->
<template_json><![CDATA[
{
"name": "[TemplateName]",
"tests": {
[TestsList]
},
"package_layout": {
// package_layout params
},
"audio_layout": {
// audio_layout params
}
}
]]></template_json>
<sidecar>[SidecarURL_1]</sidecar>
<sidecar>[SidecarURL_2]</sidecar>
<!-- ... -->
<sidecar>[SidecarURL_N]</sidecar>
<report_destination_pdf>[PdfReportDestinationURL]</report_destination_pdf>
<report_destination_json>[JsonReportDestinationURL]</report_destination_json>
<send_pdf>[yes|no]</send_pdf>
</qc_qualify_validation>
</qc>
<!-- format params -->
</format>
</query>{
"query": {
"userid": "[UserID]", // required
"userkey": "[UserKey]", // required
"action": "AddMedia", // required
"source": "[SourceFile|SourcePlaylist]", // required
"format": {
"output": "[mp4|cablelabs_mpegts|mainconcept_mxf|mxf_op1a]", // required
"qc": {
"qc_qualify_validation": {
"template_id": "[TemplateGUID]", // required if template_json not specified
"template": "[TemplateName]", // optional, deprecated
"template_json": {
"name": "[TemplateName]",
"tests": {
[TestsList]
},
"package_layout": {
// package_layout params
},
"audio_layout": {
// audio_layout params
}
},
"sidecar": [
"SidecarURL_1",
"SidecarURL_2",
// ...
"SidecarURL_N"
],
"report_destination_pdf": "[PdfReportDestinationURL]",
"report_destination_json": "[JsonReportDestinationURL]",
"send_pdf": "[yes|no]"
}
}
// format params
}
}
}<?xml version="1.0"?>
<query>
<userid>[UserID]</userid> <!-- required-->
<userkey>[UserKey]</userkey> <!-- required-->
<action>AddMedia</action>
<source>[SourceFile|SourcePlaylist]</source><!-- required -->
<format>
<output>qc_check</output><!-- required -->
<source_options>
<qc>
<qc_qualify_validation>
<template_id>[TemplateGUID]</template_id><!-- required if template_json not specified -->
<template>[TemplateName]</template><!-- optional, deprecated -->
<template_json><![CDATA[
{
"name": "[TemplateName]",
"tests": {
[TestsList]
},
"package_layout": {
// package_layout params
},
"audio_layout": {
// audio_layout params
}
}
]]></template_json>
<sidecar>[SidecarURL_1]</sidecar>
<sidecar>[SidecarURL_2]</sidecar>
<!-- ... -->
<sidecar>[SidecarURL_N]</sidecar>
<report_destination_pdf>[PdfReportDestinationURL]</report_destination_pdf>
<report_destination_json>[JsonReportDestinationURL]</report_destination_json>
<send_pdf>[yes|no]</send_pdf>
</qc_qualify_validation>
</qc>
</source_options>
</format>
</query>{
"query": {
"userid": "[UserID]", // required
"userkey": "[UserKey]", // required
"action": "AddMedia", // required
"source": "[SourceFile|SourcePlaylist]", // required
"format": {
"output": "qc_check", // required
"source_options": {
"qc": {
"qc_qualify_validation": {
"template_id": "[TemplateGUID]", // required if template_json not specified
"template": "[TemplateName]", // optional, deprecated
"template_json": {
"name": "[TemplateName]",
"tests": {
[TestsList]
},
"package_layout": {
// package_layout params
},
"audio_layout": {
// audio_layout params
}
},
"sidecar": [
"SidecarURL_1",
"SidecarURL_2",
// ...
"SidecarURL_N"
],
"report_destination_pdf": "[PdfReportDestinationURL]",
"report_destination_json": "[JsonReportDestinationURL]",
"send_pdf": "[yes|no]"
}
}
}
}
}
}| Parameter | Description | Allowed Values | Default Value |
|---|---|---|---|
| template_id | Qualify Template GUID. | String | none |
| template | Qualify Template name. Deprected | String | none |
| template_json | Qualify Template JSON | Valid JSON | none |
| sidecar | Template sidecar files array | Valid URL | none |
| report_destination_pdf | Qualify PDF report destination URL | Valid URL String can contain placeholder $media_id$ that will be replaced with ID of QC media | none |
| report_destination_json | Qualify JSON report destination URL | Valid URL String can contain placeholder $media_id$ that will be replaced with ID of QC media | none |
| report_destination | Alias for report_destination_json | See above | none |
| send_pdf | Attach a PDF report to the email notification from "qc_notify" | yes, no | no |
For template_json parameter
- If parameter <template_json /> specified then <template_id /> and <template> parameters will be ignored.
- It's not possible to refer to saved audio and package layouts by <id> parameter.
- Template specified in <template_json /> parameter not saved in database.
Full Template Schema - Engine Version 2026.2.1
{
"$schema": "http://json-schema.org/schema#",
"title": "Templates Schema",
"type": "object",
"description": "Represents a Qualify job template",
"definitions": {
"audio_program": {
"type": "array",
"items": {
"type": "integer",
"enum": [
0, 1, 2 ,3, 4, 5, 6, 7, 8, 9, 10, 11,
12, 13, 14, 15, 16, 17, 18, 19, 20,
65, 66, 68, 69, 70,
33, 34, 35
],
"titleMap":
[
{
"value": 0,
"name": "Unknown (U)"
},
{
"value": 1,
"name": "Left (L)"
},
{
"value": 2,
"name": "Right (R)"
},
{
"value": 3,
"name": "Center (C)"
},
{
"value": 4,
"name": "LFE (LFE)"
},
{
"value": 5,
"name": "Left Surround (Ls)"
},
{
"value": 6,
"name": "Right Surround (Rs)"
},
{
"value": 7,
"name": "Left Center (Lc)"
},
{
"value": 8,
"name": "Right Center (Rc)"
},
{
"value": 9,
"name": "Center Surround (Cs)"
},
{
"value": 10,
"name": "Left Side (Lsd)"
},
{
"value": 11,
"name": "Right Side (Rsd)"
},
{
"value": 12,
"name": "Top Center (Tcs)"
},
{
"value": 13,
"name": "Top Front Left (Tfl)"
},
{
"value": 14,
"name": "Top Front Center (Tfc)"
},
{
"value": 15,
"name": "Top Front Right (Tfr)"
},
{
"value": 16,
"name": "Top Back Left (Tbl)"
},
{
"value": 17,
"name": "Top Back Center (Tbc)"
},
{
"value": 18,
"name": "Top Back Right (Tbr)"
},
{
"value": 19,
"name": "Top Side Left (Tsl)"
},
{
"value": 20,
"name": "Top Side Right (Tsr)"
},
{
"value": 65,
"name": "Left Wide (Lw)"
},
{
"value": 66,
"name": "Right Wide (Rw)"
},
{
"value": 68,
"name": "LFE2 (LFE2)"
},
{
"value": 69,
"name": "Left Rear Surround (Lrs)"
},
{
"value": 70,
"name": "Right Rear Surround (Rrs)"
},
{
"value": 33,
"name": "Left Total (Lt)"
},
{
"value": 34,
"name": "Right Total (Rt)"
},
{
"value": 35,
"name": "Mono (M)"
}
]
}
},
"audio_mapping": {
"type": "array",
"items": {
"$ref": "#/definitions/audio_program"
}
},
"audio_layout": {
"type": ["object", "null"],
"properties": {
"name": {
"type": "string"
},
"layout": {
"type": "array",
"items": {
"$ref": "#/definitions/audio_mapping"
}
}
},
"required": [
"name",
"layout"
]
},
"package_layout": {
"type": ["object", "null"],
"properties": {
"name": {
"type": "string"
},
"video_index": {
"description": "Index of video track from ABR manifest file that will be used in checks\n",
"type": "integer",
"minimum": 1
},
"audio_indexes": {
"description": "Index of audio track from ABR manifest file that will be used in checks\n",
"type": "array",
"items": {
"type": "integer",
"minimum": 1
}
},
"subtitle_indexes": {
"description": "Index of subtitle track from ABR manifest file that will be used in check\n",
"type": "array",
"items": {
"type": "integer",
"minimum": 1
}
}
},
"required": [
"name",
"video_index",
"audio_indexes",
"subtitle_indexes"
]
},
"media_layout": {
"type": "object",
"required": [ "units" ],
"properties": {
"start": {
"title": "Start",
"$ref": "definitions.json#/definitions/range_limit"
},
"end": {
"title": "End",
"$ref": "definitions.json#/definitions/range_limit"
},
"start_timecode": {
"title": "Start Timecode",
"$ref": "definitions.json#/definitions/timecode"
},
"end_timecode": {
"title": "End Timecode",
"$ref": "definitions.json#/definitions/timecode"
},
"use_start_timecode_for_media_layout": {
"title": "Use Start Timecode For Media Layout",
"description": "Whether to use the start timecode of the media for the media layout.",
"type": ["boolean", "null"],
"nullable": true,
"default": false
},
"units": {
"title": "Layout boundary units",
"$ref": "definitions.json#/definitions/time_units_extended"
}
},
"if": {
"properties": { "units": { "const": 2 } }
},
"then":
{
"required": ["start_timecode", "end_timecode"]
},
"else":
{
"required": ["start", "end"]
}
},
"upgrade_note":
{
"type": "object",
"title": "Upgrade Note",
"description": "Upgrade Note(s).",
"additonalProperties": false,
"required": ["version", "notes"],
"properties":
{
"version":
{
"type": "string",
"title": "Upgrade Version",
"description": "The engine version that the template has been upgraded to.",
"minLength": 1
},
"notes":
{
"type": "array",
"items":
{
"type": "string"
}
}
}
}
},
"properties": {
"name": {
"description": "User given name of a template",
"type": "string",
"nullable": false
},
"id": {
"description": "Cloud ID",
"type": ["string", "null"],
"nullable": true
},
"created_at":
{
"description": "Cloud Created at",
"type": ["string", "null"],
"regex": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$",
"nullable": true
},
"updated_at":
{
"description": "Cloud Updated at",
"type": ["string", "null"],
"regex": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$",
"nullable": true
},
"aggregate_alerts_limit": {
"description" : "Option to aggregate alerts of the same ID",
"type": ["integer", "null"],
"nullable": true
},
"use_starttimecode": {
"description" : "Option to use the video's timecode for alert start & end times",
"type": ["boolean", "null"],
"default": false,
"nullable": true
},
"audio_layout": {
"description": "Audio layout to use",
"$ref": "#/definitions/audio_layout"
},
"audio_layout_id": {
"description": "Id of audio layout to use",
"type": ["string", "null"],
"nullable": true
},
"package_layout": {
"description": "Package layout to use",
"$ref": "#/definitions/package_layout"
},
"package_layout_id": {
"description": "Id of package layout to use",
"type": ["string", "null"],
"nullable": true
},
"engine_version": {
"description": "Engine version",
"type": "string",
"regex":"^[0-9]{4}.[0-9]{1,2}.[1-9]{1,2}$"
},
"user_notes": {
"title": "User Notes",
"description": "User notes - this can contain any extra information.",
"type": ["string", "null"],
"nullable": true,
"default": ""
},
"upgrade_notes":
{
"title": "Upgrade Notes",
"description": "Upgrade notes.",
"type": ["array", "null"],
"items":
{
"$ref": "#/definitions/upgrade_note"
},
"nullable": true
},
"treat_warnings_as": {
"title": "Treat Warnings as",
"description": "Treat Warnings As.",
"type": [
"integer",
"null"
],
"enum": [
0,
1,
2,
4
],
"titleMap": [
{
"value": 0,
"name": "Info"
},
{
"value": 1,
"name": "Warning"
},
{
"value": 2,
"name": "Error"
},
{
"value": 4,
"name": "Critical"
}
],
"default": 1,
"nullable": true
},
"treat_missing_media_as": {
"description" : "What type of alerts missing media should generate, e.g. Info, Warning, Error",
"type": [
"integer",
"null"
],
"enum": [ 0, 1, 2 ],
"titleMap":
[
{
"value": 0,
"name": "Info"
},
{
"value": 1,
"name": "Warning"
},
{
"value": 2,
"name": "Error"
}
],
"default": 1,
"nullable" : true
},
"tests": {
"description": "List of tests to run",
"type": "object",
"additionalProperties": {
"type": ["object", "string"]
}
},
"media_layouts": {
"description": "Media Layouts",
"type": ["object", "null"],
"properties": {
"global_layout": {
"title": "Global layout",
"$ref": "#/definitions/media_layout"
},
"user_layout": {
"title": "User layout",
"$ref": "#/definitions/media_layout"
}
},
"required": ["global_layout", "user_layout"],
"nullable" : true
},
"pdf_include_images": {
"description": "Option to include alert thumbnail images in the generated PDF report.",
"type": [
"boolean",
"null"
],
"default": false,
"nullable": true
},
"pdf_enable_legacy_report": {
"description": "Option to revert to the legacy design in the generated PDF report.",
"type": [
"boolean",
"null"
],
"default": false,
"nullable": true
}
},
"additionalProperties": false,
"required": [
"name",
"tests",
"engine_version"
]
}
Full Output Report Schema Engine 2026.2.1
{
"$schema": "http://json-schema.org/schema#",
"title": "Report Schema",
"type": "object",
"description": "Represents a Qualify report",
"definitions": {
},
"properties": {
"alerts": {
"type": "array",
"items": {
"$ref": "result.schema.json#/definitions/alert"
}
},
"alerts_summary":
{
"type": "object",
"description": "Summary of all alerts raised",
"properties": {
"infos": {
"type": "integer",
"default": 0,
"minimum": 0
},
"warnings": {
"type": "integer",
"default": 0,
"minimum": 0
},
"errors": {
"type": "integer",
"default": 0,
"minimum": 0
},
"fatals": {
"type": "integer",
"default": 0,
"minimum": 0
},
"criticals": {
"type": "integer",
"default": 0,
"minimum": 0
}
}
},
"file_info": {
"description": "File information for the input file. Appears once per job (deprecated)",
"type": ["string", "null"]
},
"file_information": {
"description": "File information for the input file. Appears once per job",
"$ref": "file_info.schema.json",
"nullable": true
},
"filepath":{
"description": "Path to input media file",
"type": "string",
"nullable": false
},
"source_media_url":{
"description": "Original path to input media file",
"type": "string",
"nullable": false
},
"id":{
"description": "Job GUID identifier",
"type": "string",
"pattern": "^[a-fA-F\\d]{4}(?:[a-fA-F\\d]{4}-?){4}[a-fA-F\\d]{12}$",
"nullable": false
},
"progress": {
"type": "number",
"description": "Percentage of job completed",
"default": 0,
"minimum": 0,
"maximum": 100
},
"state": {
"description": "Job state",
"$ref": "result.schema.json#/definitions/level"
},
"status": {
"type": "string",
"description": "Job Status",
"enum": [
"Failed",
"Succeeded"
]
},
"template":{
"description": "Job Template",
"$ref": "template.schema.json",
"nullable": false
},
"template_id": {
"description": "Template GUID identifier",
"type": ["string", "null"],
"pattern": "^[a-fA-F\\d]{4}(?:[a-fA-F\\d]{4}-?){4}[a-fA-F\\d]{12}$",
"nullable": true
},
"template_name": {
"type": "string",
"description": "Template Name"
},
"created_at":
{
"description": "Job creation date",
"type": ["string", "null"],
"regex": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$",
"nullable": true
},
"completed_at":
{
"description": "Job completion date",
"type": ["string", "null"],
"regex": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$",
"nullable": true
}
}
}
Qualify Report
Link to Qualify Reports can be found in GetStatus response or with direct API call
GetStatus response
<?xml version="1.0"?>
<report>
<mediaID>[MediaID]</mediaID>
<status>[QCStatus]</status>
<externalReports>
<externalReport>
<testName>qc_qualify_validation</testName>
<fileName>[FileName]</fileName>
<reportLinkJSON>[QualifyJSONReportURL]</reportLinkJSON>
<reportLinkPDF>[QualifyPDFReportURL]</reportLinkPDF>
<result>[Success|Failure]</result>
</externalReport>
</externalReports>
<!-- report fields -->
</report>{
"report": {
"mediaID": "[MediaID]",
"status": "[QCStatus]",
"externalReports": {
"externalReport": [
{
"testName": "qc_qualify_validation",
"fileName": "[FileName]",
"reportLinkJSON": "[QualifyJSONReportURL]",
"reportLinkPDF": "[QualifyPDFReportURL]",
"result": "[Success|Failure]"
}
]
}
// report fields
}
}GetQualifyReport API Call
Request
<?xml version="1.0" encoding="UTF-8"?>
<query>
<userid>[UserID]</userid> <!-- required -->
<userkey>[UserKey]</userkey> <!-- required-->
<action>GetQualifyReport</action> <!-- required-->
<mediaid>[MediaID]</mediaid> <!-- required-->
<report_format>[pdf|json]</report_format>
<return_url>[yes|no]</return_url>
</query>{
"query": {
"userid": "[UserID]", // required
"userkey": "[UserKey]", // required
"action": "GetQualifyReport", // required
"mediaid": "[MediaID]", // required
"report_format": "[pdf|json]",
"return_url": "[yes|no]"
}
}| Parameter | Description | Allowed Values | Default Value |
|---|---|---|---|
| mediaid | ID of Qualify QC Media | Positive integer number | none |
| report_format | Report format | json, pdf | json |
| return_url | Return URL of the qualify report | yes, no | no |
Response if the return_url parameter is 'yes'
<?xml version="1.0" encoding="UTF-8"?>
<response>
<action>getqualifyreport</action>
<status>Success</status>
<report_format>[pdf|json]</report_format>
<return_url>[ReportURL]</return_url>
</response>{
"response": {
"action": "getqualifyreport",
"status": "Success",
"report_format": "[pdf|json]",
"return_url": "[ReportURL]"
}
}
Response if the return_url parameter is 'no'In response for GetQualifyReport we will send empty body and add Location HTTP header with link to the report.
Qualify Progress
Qualify engine progress can be fetched from GetStatus response if <add_qualify_progress /> added
Request
<?xml version="1.0" encoding="UTF-8"?>
<query>
<userid>[UserID]</userid> <!-- required -->
<userkey>[UserKey]</userkey> <!-- required-->
<action>GetStatus</action> <!-- required-->
<mediaid>[MediaID]</mediaid> <!-- required-->
<add_qualify_progress>yes</add_qualify_progress>
</query>{
"query": {
"userid": "[UserID]", // required
"userkey": "[UserKey]", // required
"action": "GetStatus", // required
"mediaid": "[MediaID]", // required
"add_qualify_progress": "yes"
}
}Response
<?xml version="1.0"?>
<response>
<id>[MediaID]</id> <!-- Equals to qc_child_media_id in parent media GetStatus response -->
<userid>[UserID]</userid>
<!-- media status -->
<status>[MediaStatus]</status>
<progress_qualify>[QualifyEngineProgress]</progress_qualify>
<!-- status fields -->
</response>{
"response": {
"id": "[MediaID]", // Equals to qc_child_media_id in parent media GetStatus response
"userid": "[UserID]",
// media status
"status": "[MediaStatus]",
"progress_qualify": "[QualifyEngineProgress]"
// status fields
}
}
NoteQualify Progress only available for the child QC media
Qualify Templates Management
Validate Template
Request:
<?xml version="1.0" encoding="UTF-8"?>
<query>
<userid>[UserID]</userid> <!-- required -->
<userkey>[UserKey]</userkey> <!-- required-->
<action>ValidateQualifyTemplate</action> <!-- required-->
<template><![CDATA[
{
"id": "[TemplateGUID]", // optional
"created_at": "[TemplateCreatedDate]",
"updated_at": "[TemplateUpdatedDate]",
"name": "[TemplateName]",
"tests": {
[TestsList]
},
"package_layout": {
"id": "[LayoutID]" // optional, new layout will be added if not provided
// package_layout params
},
"audio_layout": {
"id": "[LayoutID]" // optional, new layout will be added if not provided
// audio_layout params
}
}
]]></template> <!-- required-->
</query>{
"query": {
"userid": "[UserID]", // required
"userkey": "[UserKey]", // required
"action": "ValidateQualifyTemplate", // required
"template": {
"id": "[TemplateGUID]", // optional
"created_at": "[TemplateCreatedDate]",
"updated_at": "[TemplateUpdatedDate]",
"name": "[TemplateName]",
"tests": {
[TestsList]
},
"package_layout": {
"id": "[LayoutID]" // optional, new layout will be added if not provided
// package_layout params
},
"audio_layout": {
"id": "[LayoutID]" // optional, new layout will be added if not provided
// audio_layout params
}
} // required
}
}| Parameter | Description | Allowed Values | Default Value |
|---|---|---|---|
| template | Qualify template | JSON string for XML request and JSON object for JSON request. For XML request it should be wrapped in <![CDATA[]]> tage. | none |
Response:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<action>validatequalifytemplate</action>
<status>Success</status>
</response>{
"response": {
"action": "validatequalifytemplate",
"status": "Success"
}
}<?xml version="1.0" encoding="UTF-8"?>
<response>
<action>validatequalifytemplate</action>
<status>Error</status>
<errors>
<error>Template is invalid</error>
<error>[ErrorMessage1]</error>
<error>[ErrorMessage2]</error>
<!-- ... -->
<error>[ErrorMessageN]</error>
</errors>
</response>{
"response": {
"status": "Error",
"errors": {
"error": [
"Template is invalid",
"[ErrorMessage1]",
"[ErrorMessage2]",
// ...
"[ErrorMessageN]"
]
}
}
}Create Template
Request:
<?xml version="1.0" encoding="UTF-8"?>
<query>
<userid>[UserID]</userid> <!-- required -->
<userkey>[UserKey]</userkey> <!-- required-->
<action>SetQualifyTemplate</action> <!-- required-->
<template><![CDATA[
{
"id": "[TemplateGUID]", // optional
"created_at": "[TemplateCreatedDate]",
"updated_at": "[TemplateUpdatedDate]",
"name": "[TemplateName]",
"tests": {
[TestsList]
},
"package_layout": {
"id": "[LayoutID]" // optional, new layout will be added if not provided
// package_layout params
},
"audio_layout": {
"id": "[LayoutID]" // optional, new layout will be added if not provided
// audio_layout params
}
}
]]></template> <!-- required-->
<project>[TemplateProject]</project>
</query>{
"query": {
"userid": "[UserID]", // required
"userkey": "[UserKey]", // required
"action": "SetQualifyTemplate", // required
"template": {
"id": "[TemplateGUID]", // optional
"created_at": "[TemplateCreatedDate]",
"updated_at": "[TemplateUpdatedDate]",
"name": "[TemplateName]",
"tests": {
[TestsList]
},
"package_layout": {
"id": "[LayoutID]" // optional, new layout will be added if not provided
// package_layout params
},
"audio_layout": {
"id": "[LayoutID]" // optional, new layout will be added if not provided
// audio_layout params
}
}, // required
"project": "[TemplateProject]"
}
}| Parameter | Description | Allowed Values | Default Value |
|---|---|---|---|
| template | Qualify template | JSON string for XML request and JSON object for JSON request. For XML request it should be wrapped in <![CDATA[]]> tage. | none |
| project | Project name (e.g category) | String | none |
Response:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<action>setqualifytemplate</action>
<status>Success</status>
<id>[TemplateGUID]</id>
<name>[TemplateName]</name>
<template>added</template>
</response>{
"response": {
"action": "setqualifytemplate",
"status": "Success",
"id": "[TemplateGUID]",
"name": "[TemplateName]",
"template": "added"
}
}List added templates
Request:
<?xml version="1.0" encoding="UTF-8"?>
<query>
<userid>[UserID]</userid> <!-- required -->
<userkey>[UserKey]</userkey> <!-- required-->
<action>ListQualifyTemplates</action> <!-- required-->
</query>{
"query": {
"userid": "[UserID]", // required
"userkey": "[UserKey]", // required
"action": "ListQualifyTemplates" // required
}
}Response:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<action>listqualifytemplates</action>
<status>Success</status>
<result>
<user_id>[UserID]</user_id>
<templates>
<template>
<id>[TemplateGUID_1]</id>
<name>[TemplateName_1]</name>
</template>
<template>
<id>[TemplateGUID_2]</id>
<name>[TemplateName_2]</name>
</template>
<!-- ... -->
<template>
<id>[TemplateGUID_N]</id>
<name>[TemplateName_N]</name>
</template>
</templates>
</result>
</response>{
"response": {
"action": "listqualifytemplates",
"status": "Success",
"result": {
"user_id": "[UserID]",
"templates": [
"template": [
{
"id": "[TemplateGUID_1]",
"name": "[TemplateName_1]"
},
{
"id": "[TemplateGUID_2]",
"name": "[TemplateName_2]"
},
// ...
{
"id": "[TemplateGUID_N]",
"name": "[TemplateName_N]"
},
]
]
}
}
}View added template
Request:
<?xml version="1.0" encoding="UTF-8"?>
<query>
<userid>[UserID]</userid> <!-- required -->
<userkey>[UserKey]</userkey> <!-- required-->
<action>GetQualifyTemplate</action> <!-- required-->
<template_id>[TemplateGUID]</template_id> <!-- required-->
<template_name>[TemplateName]</template_name> <!-- optional, deprecated-->
</query>{
"query": {
"userid": "[UserID]", // required
"userkey": "[UserKey]", // required
"action": "GetQualifyTemplate", // required
"template_id": "[TemplateGUID]", // required
"template_name": "[TemplateName]" // optional, deprecated
}
}Response:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<action>getqualifytemplate</action>
<status>Success</status>
<id>[TemplateGUID]</id>
<name>[TemplateName]</name>
<template>found</template>
<content><![CDATA[
{
"id": "[TemplateGUID]",
"name": "[TemplateName]",
"tests": {
[TestsList]
}
// template params
}
]]></content>
</response>{
"response": {
"action": "getqualifytemplate",
"status": "Success",
"id": "[TemplateGUID]",
"name": "[TemplateName]",
"template": "found",
"content": {
"id": "[TemplateGUID]",
"name": "[TemplateName]",
"tests": {
[TestsList]
}
// template params
}
}
}Update Template
Request:
<?xml version="1.0" encoding="UTF-8"?>
<query>
<userid>[UserID]</userid> <!-- required -->
<userkey>[UserKey]</userkey> <!-- required-->
<action>UpdateQualifyTemplate</action> <!-- required-->
<template><![CDATA[
{
"id": "[TemplateGUID]", // optional
"created_at": "[TemplateCreatedDate]",
"updated_at": "[TemplateUpdatedDate]",
"name": "[TemplateName]",
"tests": {
[TestsList]
},
"package_layout": {
"id": "[LayoutID]" // optional, new layout will be added if not provided
// package_layout params
},
"audio_layout": {
"id": "[LayoutID]" // optional, new layout will be added if not provided
// audio_layout params
}
}
]]></template> <!-- required-->
<project>[TemplateProject]</project>
</query>{
"query": {
"userid": "[UserID]", // required
"userkey": "[UserKey]", // required
"action": "UpdateQualifyTemplate", // required
"template": {
"id": "[TemplateGUID]", // required
"created_at": "[TemplateCreatedDate]",
"updated_at": "[TemplateUpdatedDate]",
"name": "[TemplateName]",
"tests": {
[TestsList]
},
"package_layout": {
"id": "[LayoutID]" // optional, new layout will be added if not provided
// package_layout params
},
"audio_layout": {
"id": "[LayoutID]" // optional, new layout will be added if not provided
// audio_layout params
}
}, // required
"project": "[TemplateProject]"
}
}| Parameter | Description | Allowed Values | Default Value |
|---|---|---|---|
| template | Qualify template | JSON string for XML request and JSON object for JSON request. For XML request it should be wrapped in <![CDATA[]]> tage. | none |
| project | Project name (e.g category) | String | none |
Response:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<action>updatequalifytemplate</action>
<status>Success</status>
<id>[TemplateGUID]</id>
<name>[TemplateName]</name>
<template>updated</template>
</response>{
"response": {
"action": "updatequalifytemplate",
"status": "Success",
"id": "[TemplateGUID]",
"name": "[TemplateName]",
"template": "updated"
}
}Updgrade Template
Request:
<?xml version="1.0" encoding="UTF-8"?>
<query>
<userid>[UserID]</userid> <!-- required -->
<userkey>[UserKey]</userkey> <!-- required-->
<action>UpgradeQualifyTemplate</action> <!-- required-->
<version_to>[version]</version_to>
<template><![CDATA[
{
"id": "[TemplateGUID]", // optional
"created_at": "[TemplateCreatedDate]",
"updated_at": "[TemplateUpdatedDate]",
"name": "[TemplateName]",
"tests": {
[TestsList]
},
"package_layout": {
"id": "[LayoutID]" // optional, new layout will be added if not provided
// package_layout params
},
"audio_layout": {
"id": "[LayoutID]" // optional, new layout will be added if not provided
// audio_layout params
}
}
]]></template> <!-- required-->
</query>{
"query": {
"userid": "[UserID]", // required
"userkey": "[UserKey]", // required
"action": "UpgradeQualifyTemplate", // required
"version_to": "[version]",
"template": {
"id": "[TemplateGUID]", // required
"created_at": "[TemplateCreatedDate]",
"updated_at": "[TemplateUpdatedDate]",
"name": "[TemplateName]",
"tests": {
[TestsList]
},
"package_layout": {
"id": "[LayoutID]" // optional, new layout will be added if not provided
// package_layout params
},
"audio_layout": {
"id": "[LayoutID]" // optional, new layout will be added if not provided
// audio_layout params
}
} // required
}
}| Parameter | Description | Allowed Values | Default Value |
|---|---|---|---|
| template | Qualify template | JSON string for XML request and JSON object for JSON request. For XML request it should be wrapped in <![CDATA[]]> tage. | none |
| version_to | Desired version to upgrade to | String | Current Qualify version |
Response:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<action>upgradequalifytemplate</action>
<status>Success</status>
<upgraded_template><![CDATA[ [Template JSON] ]]></upgraded_template>
</response>{
"response": {
"action": "upgradequalifytemplate",
"status": "Success",
"upgraded_template": { [Template JSON] }
}
}Remove Template
Request:
<?xml version="1.0" encoding="UTF-8"?>
<query>
<userid>[UserID]</userid> <!-- required -->
<userkey>[UserKey]</userkey> <!-- required-->
<action>RemoveQualifyTemplate</action> <!-- required-->
<template_id>[TemplateGUID]</template_id> <!-- required-->
<template_name>[TemplateName]</template_name> <!-- optional, deprecated-->
</query>{
"query": {
"userid": "[UserID]", // required
"userkey": "[UserKey]", // required
"action": "RemoveQualifyTemplate", // required
"template_id": "[TemplateGUID]", // required
"template_name": "[TemplateName]" // optional, deprecated
}
}| Parameter | Description | Allowed Values | Default Value |
|---|---|---|---|
| template_id | Template GUID | String | none |
| template_name | Template Name Deprecated | String | none |
Response:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<action>removequalifytemplate</action>
<id>[TemplateGUID]</id>
<name>[TemplateName]</name>
<template>removed</template>
</response>{
"response": {
"action": "removequalifytemplate",
"status": "Success",
"id": "[TemplateGUID]",
"name": "[TemplateName]",
"template": "removed"
}
}Qualify Package Layouts Management
Create Package Layout
Request:
<?xml version="1.0" encoding="UTF-8"?>
<query>
<userid>[UserID]</userid> <!-- required -->
<userkey>[UserKey]</userkey> <!-- required-->
<action>SetQualifyPackageLayout</action> <!-- required-->
<package_layout><![CDATA[
{
"id": "[PackageLayoutGUID]", // optional
"created_at": "[PackageLayoutCreatedDate]",
"updated_at": "[PackageLayoutUpdatedDate]",
"name": "[PackageLayoutName]"
// layout params
}
]]></package_layout> <!-- required-->
</query>{
"query": {
"userid": "[UserID]", // required
"userkey": "[UserKey]", // required
"action": "SetQualifyPackageLayout", // required
"package_layout": {
"id": "[PackageLayoutGUID]", // optional
"created_at": "[PackageLayoutCreatedDate]",
"updated_at": "[PackageLayoutUpdatedDate]",
"name": "[PackageLayoutName]"
// layout params
} // required
}
}| Parameter | Description | Allowed Values | Default Value |
|---|---|---|---|
| package_layout | Qualify package layout | JSON string for XML request and JSON object for JSON request. For XML request it should be wrapped in <![CDATA[]]> tage. | none |
Response:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<action>setqualifypackagelayout</action>
<status>Success</status>
<id>[PackageLayoutGUID]</id>
<name>[PackageLayoutName]</name>
<package_layout>added</package_layout>
</response>{
"response": {
"action": "setqualifypackagelayout",
"status": "Success",
"id": "[PackageLayoutGUID]",
"name": "[PackageLayoutName]",
"package_layout": "added"
}
}List added package layouts
Request:
<?xml version="1.0" encoding="UTF-8"?>
<query>
<userid>[UserID]</userid> <!-- required -->
<userkey>[UserKey]</userkey> <!-- required-->
<action>ListQualifyPackageLayouts</action> <!-- required-->
</query>{
"query": {
"userid": "[UserID]", // required
"userkey": "[UserKey]", // required
"action": "ListQualifyPackageLayouts" // required
}
}Response:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<action>listqualifypackagelayouts</action>
<status>Success</status>
<result>
<user_id>[UserID]</user_id>
<package_layouts>
<package_layout>
<id>[PackageLayoutGUID_1]</id>
<name>[PackageLayoutName_1]</name>
</package_layout>
<package_layout>
<id>[PackageLayoutGUID_2]</id>
<name>[PackageLayoutName_2]</name>
</package_layout>
<!-- ... -->
<package_layout>
<id>[PackageLayoutGUID_N]</id>
<name>[PackageLayoutName_N]</name>
</package_layout>
</package_layouts>
</result>
</response>{
"response": {
"action": "listqualifypackagelayouts",
"status": "Success",
"result": {
"user_id": "[UserID]",
"package_layouts": [
"package_layout": [
{
"id": "[PackageLayoutGUID_1]",
"name": "[PackageLayoutName_1]"
},
{
"id": "[PackageLayoutGUID_2]",
"name": "[PackageLayoutName_2]"
},
// ...
{
"id": "[PackageLayoutGUID_N]",
"name": "[PackageLayoutName_N]"
},
]
]
}
}
}Update Package Layout
Request:
<?xml version="1.0" encoding="UTF-8"?>
<query>
<userid>[UserID]</userid> <!-- required -->
<userkey>[UserKey]</userkey> <!-- required-->
<action>UpdateQualifyPackageLayout</action> <!-- required-->
<package_layout><![CDATA[
{
"id": "[PackageLayoutGUID]", // required
"created_at": "[PackageLayoutCreatedDate]",
"updated_at": "[PackageLayoutUpdatedDate]",
"name": "[PackageLayoutName]",
// layout params
}
]]></package_layout> <!-- required-->
</query>{
"query": {
"userid": "[UserID]", // required
"userkey": "[UserKey]", // required
"action": "UpdateQualifyPackageLayout", // required
"package_layout": {
"id": "[PackageLayoutGUID]", // required
"created_at": "[PackageLayoutCreatedDate]",
"updated_at": "[PackageLayoutUpdatedDate]",
"name": "[PackageLayoutName]",
// layout params
} // required
}
}| Parameter | Description | Allowed Values | Default Value |
|---|---|---|---|
| package_layout | Qualify package layout | JSON string for XML request and JSON object for JSON request. For XML request it should be wrapped in <![CDATA[]]> tage. | none |
Response:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<action>updatequalifypackagelayout</action>
<status>Success</status>
<id>[PackageLayoutGUID]</id>
<name>[PackageLayoutName]</name>
<package_layout>updated</package_layout>
</response>{
"response": {
"action": "updatequalifypackagelayout",
"status": "Success",
"id": "[PackageLayoutGUID]",
"name": "[PackageLayoutName]",
"package_layout": "updated"
}
}Remove Package Layout
Request:
<?xml version="1.0" encoding="UTF-8"?>
<query>
<userid>[UserID]</userid> <!-- required -->
<userkey>[UserKey]</userkey> <!-- required-->
<action>RemoveQualifyPackageLayout</action> <!-- required-->
<package_layout_id>[PackageLayoutGUID]</package_layout_id> <!-- required-->
<package_layout_name>[PackageLayoutName]</package_layout_name> <!-- optional, deprecated-->
</query>{
"query": {
"userid": "[UserID]", // required
"userkey": "[UserKey]", // required
"action": "RemoveQualifyPackageLayout", // required
"package_layout_id": "[PackageLayoutGUID]", // required
"package_layout_name": "[PackageLayoutName]" // optional, deprecated
}
}| Parameter | Description | Allowed Values | Default Value |
|---|---|---|---|
| package_layout_id | Package Layout GUID | String | none |
| package_layout_name | Package Layout Name Deprecated | String | none |
Response:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<action>removequalifypackagelayout</action>
<id>[PackageLayoutGUID]</id>
<name>[PackageLayoutName]</name>
<package_layout>removed</package_layout>
</response>{
"response": {
"action": "removequalifypackagelayout",
"status": "Success",
"id": "[PackageLayoutGUID]",
"name": "[PackageLayoutName]",
"package_layout": "removed"
}
}Qualify Audio Layouts Management
Create Audio Layout
Request:
<?xml version="1.0" encoding="UTF-8"?>
<query>
<userid>[UserID]</userid> <!-- required -->
<userkey>[UserKey]</userkey> <!-- required-->
<action>SetQualifyAudioLayout</action> <!-- required-->
<audio_layout><![CDATA[
{
"id": "[AudioLayoutGUID]", // optional
"created_at": "[AudioLayoutCreatedDate]",
"updated_at": "[AudioLayoutUpdatedDate]",
"name": "[AudioLayoutName]"
"layout": [
// layout params
]
}
]]></audio_layout> <!-- required-->
</query>{
"query": {
"userid": "[UserID]", // required
"userkey": "[UserKey]", // required
"action": "SetQualifyAudioLayout", // required
"audio_layout": {
"id": "[AudioLayoutGUID]", // optional
"created_at": "[AudioLayoutCreatedDate]",
"updated_at": "[AudioLayoutUpdatedDate]",
"name": "[AudioLayoutName]"
"layout": [
// layout params
]
} // required
}
}| Parameter | Description | Allowed Values | Default Value |
|---|---|---|---|
| audio_layout | Qualify audio layout | JSON string for XML request and JSON object for JSON request. For XML request it should be wrapped in <![CDATA[]]> tage. | none |
Response:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<action>setqualifyaudiolayout</action>
<status>Success</status>
<id>[AudioLayoutGUID]</id>
<name>[AudioLayoutName]</name>
<audio_layout>added</audio_layout>
</response>{
"response": {
"action": "setqualifyaudiolayout",
"status": "Success",
"id": "[AudioLayoutGUID]",
"name": "[AudioLayoutName]",
"audio_layout": "added"
}
}List added audio layouts
Request:
<?xml version="1.0" encoding="UTF-8"?>
<query>
<userid>[UserID]</userid> <!-- required -->
<userkey>[UserKey]</userkey> <!-- required-->
<action>ListQualifyAudioLayouts</action> <!-- required-->
</query>{
"query": {
"userid": "[UserID]", // required
"userkey": "[UserKey]", // required
"action": "ListQualifyAudioLayouts" // required
}
}Response:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<action>listqualifyaudiolayouts</action>
<status>Success</status>
<result>
<user_id>[UserID]</user_id>
<audio_layouts>
<audio_layout>
<id>[AudioLayoutGUID_1]</id>
<name>[AudioLayoutName_1]</name>
</audio_layout>
<audio_layout>
<id>[AudioLayoutGUID_2]</id>
<name>[AudioLayoutName_2]</name>
</audio_layout>
<!-- ... -->
<audio_layout>
<id>[AudioLayoutGUID_N]</id>
<name>[AudioLayoutName_N]</name>
</audio_layout>
</audio_layouts>
</result>
</response>{
"response": {
"action": "listqualifyaudiolayouts",
"status": "Success",
"result": {
"user_id": "[UserID]",
"audio_layouts": [
"audio_layout": [
{
"id": "[AudioLayoutGUID_1]",
"name": "[AudioLayoutName_1]"
},
{
"id": "[AudioLayoutGUID_2]",
"name": "[AudioLayoutName_2]"
},
// ...
{
"id": "[AudioLayoutGUID_N]",
"name": "[AudioLayoutName_N]"
},
]
]
}
}
}Update Audio Layout
Request:
<?xml version="1.0" encoding="UTF-8"?>
<query>
<userid>[UserID]</userid> <!-- required -->
<userkey>[UserKey]</userkey> <!-- required-->
<action>UpdateQualifyAudioLayout</action> <!-- required-->
<audio_layout><![CDATA[
{
"id": "[AudioLayoutGUID]", // required
"created_at": "[AudioLayoutCreatedDate]",
"updated_at": "[AudioLayoutUpdatedDate]",
"name": "[AudioLayoutName]",
"layout": [
// layout params
]
}
]]></audio_layout> <!-- required-->
</query>{
"query": {
"userid": "[UserID]", // required
"userkey": "[UserKey]", // required
"action": "UpdateQualifyAudioLayout", // required
"audio_layout": {
"id": "[AudioLayoutGUID]", // required
"created_at": "[AudioLayoutCreatedDate]",
"updated_at": "[AudioLayoutUpdatedDate]",
"name": "[AudioLayoutName]",
"layout": [
// layout params
]
} // required
}
}| Parameter | Description | Allowed Values | Default Value |
|---|---|---|---|
| audio_layout | Qualify audio layout | JSON string for XML request and JSON object for JSON request. For XML request it should be wrapped in <![CDATA[]]> tage. | none |
Response:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<action>updatequalifyaudiolayout</action>
<status>Success</status>
<id>[AudioLayoutGUID]</id>
<name>[AudioLayoutName]</name>
<audio_layout>updated</audio_layout>
</response>{
"response": {
"action": "updatequalifyaudiolayout",
"status": "Success",
"id": "[AudioLayoutGUID]",
"name": "[AudioLayoutName]",
"audio_layout": "updated"
}
}Remove Audio Layout
Request:
<?xml version="1.0" encoding="UTF-8"?>
<query>
<userid>[UserID]</userid> <!-- required -->
<userkey>[UserKey]</userkey> <!-- required-->
<action>RemoveQualifyAudioLayout</action> <!-- required-->
<audio_layout_id>[AudioLayoutGUID]</audio_layout_id> <!-- required-->
<audio_layout_name>[AudioLayoutName]</audio_layout_name> <!-- optional, deprecated-->
</query>{
"query": {
"userid": "[UserID]", // required
"userkey": "[UserKey]", // required
"action": "RemoveQualifyAudioLayout", // required
"audio_layout_id": "[AudioLayoutGUID]", // required
"audio_layout_name": "[AudioLayoutName]" // optional, deprecated
}
}| Parameter | Description | Allowed Values | Default Value |
|---|---|---|---|
| audio_layout_id | Audio Layout GUID | String | none |
| audio_layout_name | Audio Layout Name Deprecated | String | none |
Response:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<action>removequalifyaudiolayout</action>
<id>[AudioLayoutGUID]</id>
<name>[AudioLayoutName]</name>
<audio_layout>removed</audio_layout>
</response>{
"response": {
"action": "removequalifyaudiolayout",
"status": "Success",
"id": "[AudioLayoutGUID]",
"name": "[AudioLayoutName]",
"audio_layout": "removed"
}
}