Page tree
Skip to end of metadata
Go to start of metadata

Last updated: Dec 10, 2020 10:14

Get started with the Perfecto REST APIs, a RESTful web service that provides an interface for accessing CQ Lab functionality and data from a remote client over the web.

Note: If you are a Free Trial user, only the Repository API is relevant for you.

API Operations

The following API operations are available:


Run a sequence of Perfecto automation commands

ScriptStart script executions, get status, aborting, and listing
ReportDownload reports, images, video, vitals & network information
RepositoryUpload & Download items, list, delete, and clean the repository
Device, Device Host & CradleGet info on one or all devices, device hosts, or cradles
SchedulerCreate, update, delete, and list scheduled scripts
User & AccountCreate, update, list, and delete users
GroupCreate, update, list, and delete groups
ReservationReserve devices

On this page:

URL Structure

The following is the API URL request structure:

  • <hostName>: Host name for the service. For example,

  • <resourceGroup>: a resource group. For example, executions.

  • <resourceIdentifier>: A resource identifier. This is only required if the API call is on a specific resource such as aborting a specific execution.

  • operation: The operation to perform. For example, abort.

  • <mandatoryParameters>: One or more required parameters specified using name-value pairs prefixed by the & character. For example, &offlineToken=securityToken.

  • <optional parameters>: One or more optional parameters specified using name-value pairs prefixed by the & character. For example, &responseFormat=XML.

Authentication & Authorization

It is required to send authentication in the form of the Perfecto security token. For more information, see Generate security tokens.

Some operations require specific user permissions. For example user operations require the administrator or user management role.


The API request can be transmitted to the API server using either the GET or the POST HTTP methods. To use the GET method, simply specify the request as a URL. Parameter values must be encoded to prevent conflicts with HTTP special characters. The following example shows the URL for getting a list of all connected handsets in mycloud.

You can get the same list using the POST method specifying the POST parameters as follows:

Request: operation=list&securityToken=mySecurityToken&status=connected

Operations that upload files to the Perfecto repository must use POST or PUT method.

Response Formats

The default response format is JSON. Most operations support the optional parameter responseFormat for specifying the required format. A few operations support only XML response format.

  • JSON - For more information about the JSON format, see
  • XML - the response is an XML document.

The following examples show the response type for a request to start a new execution:


    "executionId" : "samb@perfectomobile.com_controller_16-11-03_08_32_32_4",
    "testGridReportUrl" : "[0]=samb@perfectomobile.com_controller_16-11-03_08_32_32_4",
    "singleTestReportUrl" : "",
    "reportKey" : "PRIVATE:controller/161103/controller_16-11-03_08_32_32_4.xml"



Test Your API Access

  1. Open a web browser.
  2. Type:
    in the address bar, substituting myCloud and securityToken as appropriate, and then type ENTER.
  3. Confirm that an XML list of devices is returned by the API.

Error Handling

Error messages returned in the response of an API operation are self-explanatory and should be sufficient to resolve issues, as can be seen from the following examples:

# Cause: The specified execution id could not be found
# Resolution: Verify that the executionId is correct
{"errorMessage":"Failed to get execution status - Execution executionId wasn't found"}
# Cause: The specified user does not have sufficient permission to perform the requested operation
# Resolution: If you want to use this operation, you can either use a user with the correct permissions or request the correct permission for this user
{"errorMessage":"Failed to get execution list - User username is not authorized to get all script executions"}
# Cause: The specified parameter is not valid for the abort operation
# Resolution: If the parameter is valid for this operation then report the issue, otherwise remove the parameter and try again
{"errorMessage":"Failed to abort script - Request contains unknown parameters: [time.offset]"}

The following table provides guidance for resolving some of the common HTTP codes that you may encounter:

400 Bad RequestOne or more of the specified parameters is not valid.Fix incorrect parameters in the URL.
401 UnauthorizedAuthentication is required and has failed.Fix incorrect authorization parameters in the URL.
500 Internal server errorInternal server error.Contact your system administrator.

Common Errors For Invalid HTTP API URLs

JSON Response
# Cause: Invoking the HTTP API without using HTTPS
# Resolution: Use HTTPS
{"errorMessage":"The operation requires secured channel"}
# Cause: Invoking the HTTP API with an unknown resource
# Resolution: Verify that the resource name is correct
{"errorMessage": "Could not find resource 'startexecutions'"}
# Cause: Invoking the HTTP API with an unknown operation
# Resolution: Verify that the operation name is correct
{"errorMessage": "Could not find operation 'executescript' for resource 'executions'"}
XML Response
<!--Cause: Invoking the HTTP API with an unknown operation-->
<!--Resolution: Verify that the operation name is correct-->
	<errorMessage>Could not find operation 'executescript' for resource 'executions'</errorMessage>