openapi: 3.2.0
info:
title: pCloudy Device Cloud Generic API
version: v2
summary: Public REST API for the pCloudy real-device cloud, an Opkey product.
description: 'The pCloudy REST API is the machine-readable surface of the pCloudy real-device testing cloud operated by Opkey (Smart Software Testing Solutions Inc.). It covers authentication, device booking and session lifecycle, app upload/install/control, device interaction, performance capture, session media and logs, network simulation, APK instrumentation, app resigning, App Center integration, and Appium/XCTest automation orchestration. All methods default to POST except authentication, and requests set Content-Type: application/json.
PROVENANCE: this document was generated by API Evangelist from the operations, parameters and examples published in Opkey''s own public pCloudy API Reference at https://content.pcloudy.com/apidocs/ . Opkey does not publish an OpenAPI document; every path, method, parameter and description here is transcribed from that published reference and nothing has been invented. It is a third-party transcription, not a provider artifact.'
contact:
name: Opkey
url: https://www.opkey.com/
x-generated-by: API Evangelist enrichment pipeline
x-source: https://content.pcloudy.com/apidocs/
servers:
- url: https://{cloud}.pcloudy.com
description: pCloudy cloud instance
variables:
cloud:
default: device
enum:
- device
- demo
- aus
description: pCloudy cloud host prefix; the docs refer to this as <Cloud URL>.
security:
- accessToken: []
tags:
- name: Generic
paths:
/api/v2/generic/kill-app:
post:
operationId: killApp
summary: Kill App
tags:
- Generic
description: Force-stops (kills) the specified application on the reserved device, immediately terminating its process and any background activity. Use it to reset an app to a clean state between test steps or to recover from a hung/unresponsive app without uninstalling it. The app stays installed and can be relaunched afterwards.
parameters:
- name: token
in: header
required: true
description: API access token (from /api/access).
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- rid
- packageName
properties:
rid:
type: integer
description: Device reservation ID (returned when the device is booked).
packageName:
type: string
description: Android application package name.
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
example:
traceId: 0C7GnIt4TrS9xgS70lrqr
requestId: O8WLCAFzLWW1HoBSKQFcU
statusCode: 200
status: success
message: App killed successfully
'401':
description: Unauthorized - missing or invalid access token
security:
- accessToken: []
/api/v2/generic/uninstall-app:
post:
operationId: uninstallApp
summary: Uninstall App(V2)
tags:
- Generic
description: Uninstalls the specified application from the reserved device, removing the app binary together with its locally stored data and cache. Typically used during teardown or before installing a fresh build to guarantee a clean install. The app must be reinstalled before it can be used again.
parameters:
- name: token
in: header
required: true
description: API access token (from /api/access).
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- rid
- packageName
properties:
rid:
type: integer
description: Device reservation ID (returned when the device is booked).
packageName:
type: string
description: Android application package name.
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
example:
traceId: oVaUsQXEa91HNWMNIaEOo
requestId: Int9rwc7JSyWwUBA4hM8h
statusCode: 200
status: success
message: App uninstalled successfully
'401':
description: Unauthorized - missing or invalid access token
security:
- accessToken: []
/api/v2/generic/geo-ip-location:
post:
operationId: geoIpLocation
summary: Geo IP Location - Connect
tags:
- Generic
description: Routes the reserved device's traffic through a selected Geo-IP location so the device appears to browse from another country/region. Used to validate geo-targeted behaviour such as localized content, currency, language, and geo-restrictions. Pair with the disconnect call to restore the default route.
parameters:
- name: token
in: header
required: true
description: API access token (from /api/access).
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- rid
- countryName
- action
properties:
rid:
type: integer
description: Device reservation ID (returned when the device is booked).
countryName:
type: string
description: Target country for Geo-IP simulation.
action:
type: string
description: '"connect" or "disconnect".'
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
example:
traceId: moNs111FHexL1yJOGne
requestId: CI17h3RIHl5zMP7npE6
statusCode: 200
status: success
message: Geo Ip Location Changed Successfully
'401':
description: Unauthorized - missing or invalid access token
security:
- accessToken: []
/api/v2/generic/init-liveview:
post:
operationId: startStreamer
summary: Start Streamer
tags:
- Generic
description: Initializes the live-view video streamer for the reserved device, starting the real-time screen stream used to view and interact with the device remotely. Used at the start of an interactive session to begin streaming the device screen.
parameters:
- name: token
in: header
required: true
description: API access token (from /api/access).
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- rid
properties:
rid:
type: integer
description: Device reservation ID (returned when the device is booked).
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
example:
traceId: p6i8FFON1EaaSiRZ3te
requestId: 3iKTFULPxb871bRmJE1
statusCode: 200
status: success
message: started kickStartStreamer
'401':
description: Unauthorized - missing or invalid access token
security:
- accessToken: []
/api/v2/generic/set-location:
post:
operationId: setLocation
summary: Set Mock GPS Location
tags:
- Generic
description: Sets a mock GPS location on the device using the supplied latitude and longitude, overriding the real location. Used to test location-aware features such as maps, geofencing, and location-based content by placing the device at any coordinates.
parameters:
- name: token
in: header
required: true
description: API access token (from /api/access).
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- rid
- latitude
- longitude
properties:
rid:
type: integer
description: Device reservation ID (returned when the device is booked).
latitude:
type: number
description: GPS latitude of the mock location.
longitude:
type: number
description: GPS longitude of the mock location.
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
example:
traceId: xCmEBrTYSnm1p0RFOVMT
requestId: T700EF2wVlmFWwFNwX23
statusCode: 200
status: success
message: Set location set successfully
data:
isOk: true
statusCode: 200
data:
statusCode: 200
message: Location set successfully
err: null
'401':
description: Unauthorized - missing or invalid access token
security:
- accessToken: []
/api/v2/generic/set-timezone:
post:
operationId: setTimezone
summary: Set Time Zone (iOS)
tags:
- Generic
description: Sets the device system timezone to the supplied value. Used to test time-zone-dependent behaviour such as schedules, timestamps, daylight-saving handling, and localized date/time formatting.
parameters:
- name: token
in: header
required: true
description: API access token (from /api/access).
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- rid
- timezone
properties:
rid:
type: integer
description: Device reservation ID (returned when the device is booked).
timezone:
type: string
description: Timezone name (e.g., "Chennai").
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
example:
traceId: QuuvW6Uk5Fu79ZExVMOX
requestId: FA3GMyRn5G2qBaxBAC3P
statusCode: 200
status: success
message: Set timezone successfully
data:
isOk: true
statusCode: 200
data:
statusCode: 200
message: Timezone set successfully
err: null
'401':
description: Unauthorized - missing or invalid access token
security:
- accessToken: []
/api/start_performance_data:
post:
operationId: startPerformance
summary: Start Performance Data
tags:
- Generic
description: This API helps to start the performance data of the app under testing. You will get battery, CPU, memory, internet and frame rendering data on Android device and for iOS you will get the CPU, memory and network packets under testing on that device. This data is stored in cloud drive.
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- token
- rid
- pkg
properties:
token:
type: string
description: Authtoken (this will get from authenticate response)
rid:
type: string
description: Reservation id (will get from book device api response)
pkg:
type: string
description: App package name (will get from install and launch api response)
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
'401':
description: Unauthorized - missing or invalid access token
security:
- accessToken: []
/api/manual_access_files_list:
post:
operationId: performanceFileList
summary: Performance Data File List
tags:
- Generic
description: This API helps to get the performance data file names which are stored in cloud drive of a particular device. You will get battery, CPU, memory, internet and frame rendering data files.
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- token
- rid
properties:
token:
type: string
description: Authtoken (this will get from authenticate response)
rid:
type: string
description: Reservation id (will get from book device api response)
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
'401':
description: Unauthorized - missing or invalid access token
security:
- accessToken: []
/api/download_manual_access_data:
post:
operationId: downloadPerformance
summary: Download Performance Data
tags:
- Generic
description: This api help to download the performance data file from cloud drive to your local system.
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- token
- rid
- filename
properties:
token:
type: string
description: Authtoken (this will get from authenticate response)
rid:
type: string
description: Reservation id (will get from book device api response)
filename:
type: string
description: performance data file name (will get from performance data file list api response)
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
'401':
description: Unauthorized - missing or invalid access token
security:
- accessToken: []
/api/install_app:
post:
operationId: installLaunchApp
summary: Install and Launch App
tags:
- Generic
description: Install and launch API will install the app (apk/ipa) in the device and launch it on the device. App launch will work on Android devices, but on iOS devices the app will install but not launch.
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- token
- rid
- filename
- grant_all_permissions
properties:
token:
type: string
description: Authtoken (this will get from authenticate response)
rid:
type: string
description: Reservation id (will get from book device api response)
filename:
type: string
description: app name (Need to mention apk/ipa file name which is available in cloud drive)
grant_all_permissions:
type: string
description: true/false (This is provide permissions for app). This is optional.
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
'401':
description: Unauthorized - missing or invalid access token
security:
- accessToken: []
/api/pushFileToSwapBox:
post:
operationId: pushFile
summary: Push File
tags:
- Generic
description: This API pushes the file or apk from Cloud Drive to the device SwapBox. In Android device you can find SwapBox in Internal storage.
parameters:
- name: token
in: header
required: true
description: Authtoken (this will get from authenticate response)
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- rid
- pDriveFile
properties:
rid:
type: string
description: Reservation id (will get from book device api response)
pDriveFile:
type: string
description: File name which you want to push.
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
'401':
description: Unauthorized - missing or invalid access token
security:
- accessToken: []
/api/delete_file:
post:
operationId: deleteFileCloud
summary: Delete File From Cloud
tags:
- Generic
description: Using this REST API, you can delete a file from cloud drive.
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- token
- filename
- dir
- filter
properties:
token:
type: string
description: Authtoken (this will get from authenticate response)
filename:
type: string
description: File name which you want to delete
dir:
type: string
description: Directory name (data).
filter:
type: string
description: File filter type (ALL).
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
'401':
description: Unauthorized - missing or invalid access token
security:
- accessToken: []
/api/devices:
post:
operationId: getDeviceList
summary: Get Device List
tags:
- Generic
description: This API helps to get the list of all available devices in pCloudy with all the relevant details (full_name, id, model, version, mobile number, dpi, etc.) about each device.
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- token
- duration
- platform
- available_now
properties:
token:
type: string
description: Authtoken (this will get from authenticate response)
duration:
type: string
description: Duration in minutes (How many minutes you want to the device).
platform:
type: string
description: Which platform devices (android or ios) you want to display.
available_now:
type: string
description: true or false. True means display the available devices and false means display all devices (including busy and available).
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
'401':
description: Unauthorized - missing or invalid access token
security:
- accessToken: []
/api/book_device:
post:
operationId: bookDevice
summary: Book Device
tags:
- Generic
description: Book Device API books the device for your testing. For device booking you have to pass the authToken, how many minutes you want to book, and the device id. Every device has a different id.
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- token
- duration
- id
properties:
token:
type: string
description: Authtoken (this will get from authenticate response)
duration:
type: string
description: Duration in minutes (How many minutes you want to book the device).
id:
type: string
description: Device id (will get from get devices api response).
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
'401':
description: Unauthorized - missing or invalid access token
security:
- accessToken: []
/api/release_device:
post:
operationId: releaseDeviceLegacy
summary: Release Device
tags:
- Generic
description: This api help you to release the device.
parameters:
- name: token
in: header
required: true
description: Authtoken (this will get from authenticate response)
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- rid
properties:
rid:
type: string
description: Reservation id (will get from book device api response)
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
'401':
description: Unauthorized - missing or invalid access token
security:
- accessToken: []
/api/get_user_details:
post:
operationId: getUserDetails
summary: Get User Details
tags:
- Generic
description: Using this API, user will get all the account details like userId, email_id, username, account balance, etc.
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
required:
- authToken
properties:
authToken:
type: string
description: Authtoken (this will get from authenticate response)
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
'401':
description: Unauthorized - missing or invalid access token
security:
- accessToken: []
/api/upload_file:
post:
operationId: uploadApp
summary: Upload App
tags:
- Generic
description: Using Upload API you can upload the apps to pCloudy cloud drive. Uploaded files/apps are available in MY App/Data section in pCloudy platform.
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
required:
- file
- source_type
- token
- filter
properties:
file:
type: string
description: Path of uploaded apk or ipa file
source_type:
type: string
description: Mention raw type (raw)
token:
type: string
description: Authtoken (this will get from authenticate response)
filter:
type: string
description: You can filter the file like apk or ipa when uploading (all/apk/ipa)
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
'401':
description: Unauthorized - missing or invalid access token
security:
- accessToken: []
/api/drive:
post:
operationId: getAvailableApps
summary: Get Available Apps
tags:
- Generic
description: Get Available App API shows total files and apps that are uploaded in cloud drive.
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- token
- limit
- filter
properties:
token:
type: string
description: Authtoken (this will get from authenticate response)
limit:
type: string
description: How many files you want to display.
filter:
type: string
description: It will filter the files and display based on filter option (all/apk/ipa).
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
'401':
description: Unauthorized - missing or invalid access token
security:
- accessToken: []
/api/download_file:
post:
operationId: downloadFileCloud
summary: Download File From Cloud
tags:
- Generic
description: Using this REST API, you can download any file from the cloud drive to your local system.
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- token
- filename
- dir
properties:
token:
type: string
description: Authtoken (this will get from authenticate response)
filename:
type: string
description: File name which you want to download
dir:
type: string
description: Directory name (data).
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
'401':
description: Unauthorized - missing or invalid access token
security:
- accessToken: []
/api/get_devices_details:
post:
operationId: getSingleDevice
summary: Get Single Device Details
tags:
- Generic
description: This API helps to get single device details (full_name, id, model, version, mobile number, dpi, etc.).
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- token
- id
- full_name
- version
- model
- duration
- platform
- available_now
properties:
token:
type: string
description: Authtoken (this will get from authenticate response)
id:
type: string
description: DeviceId (This will get from Get Device list api response)
full_name:
type: string
description: Device Full Name (This will get from Get Device list api response)
version:
type: string
description: Device version
model:
type: string
description: Device Model (This will get from Get Device list api response)
duration:
type: string
description: Duration in minutes (How many minutes you want to the device).
platform:
type: string
description: Which platform devices (android or ios) you want to display.
available_now:
type: string
description: true or false. True means display the available devices and false means display all devices (including busy and available).
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
'401':
description: Unauthorized - missing or invalid access token
security:
- accessToken: []
/api/get_device_url:
post:
operationId: getDevicePageUrl
summary: Get Device Page URL
tags:
- Generic
description: This will give you the URL using which you can open the booked device screen directly in the browser. This helps you to connect to the device directly by passing the authToken and rid.
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- token
- rid
properties:
token:
type: string
description: Authtoken (this will get from authenticate response)
rid:
type: string
description: Reservation id (will get from book device api response).
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
'401':
description: Unauthorized - missing or invalid access token
security:
- accessToken: []
/api/execute_adb:
post:
operationId: executeAdbLegacy
summary: Execute ADB
tags:
- Generic
description: This API helps to execute commands on the booked device.
parameters:
- name: token
in: header
required: true
description: Authtoken (this will get from authenticate response)
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- rid
- adbCommand
properties:
rid:
type: string
description: Reservation id (will get from book device api response)
adbCommand:
type: string
description: adb command which you want to execute on device.
responses:
'200':
description: Successful response
content:
application/json:
schema:
# --- truncated at 32 KB (42 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/opkey/refs/heads/main/openapi/opkey-generic-api-openapi.yml