Kobiton Organization API
Administer an organization programmatically - create members, activate and deactivate members, and assign roles - so device-cloud access and test-run permissions can be provisioned as code.
Administer an organization programmatically - create members, activate and deactivate members, and assign roles - so device-cloud access and test-run permissions can be provisioned as code.
openapi: 3.0.3
info:
title: Kobiton REST API
description: >-
The Kobiton REST API programmatically operates the Kobiton mobile device
cloud and app testing platform. It exposes the real device cloud (list and
filter available iOS/Android devices), test sessions and their captured
commands, the app repository (upload and manage app builds), data-driven
testing data sets, scriptless (no-code) test runs via revisit plans, and
organization member administration. Scripted automation runs against the
separate Appium/WebDriver hub at https://api.kobiton.com/wd/hub and is not
modeled here. All REST requests authenticate with HTTP Basic auth using a
Kobiton username (or email) as the user and an API key as the password;
the pair is base64-encoded in the Authorization header.
Endpoints for Devices, Apps, Data Sets, Scriptless Automation (revisit
plans), and Organization are grounded in Kobiton's published API docs and
official samples. Session sub-resources (get session, get session commands)
are grounded in Kobiton's get-session-data sample. Request and response
schemas below are modeled from the documentation and sample payloads and
should be reconciled against the live api.kobiton.com/docs reference; a
newer v2 API also exists at https://api.kobiton.com/v2.
version: '1.0'
contact:
name: Kobiton
url: https://kobiton.com
servers:
- url: https://api.kobiton.com/v1
description: Kobiton REST API v1
security:
- basicAuth: []
tags:
- name: Devices
description: Real devices available in the Kobiton device cloud.
- name: Sessions
description: Test-run sessions and their captured commands.
- name: Scriptless Automation
description: No-code test runs driven by revisit plans.
- name: Apps
description: The app repository of builds under test.
- name: Data Sets
description: Data-driven testing input sets.
- name: Organization
description: Organization member administration.
paths:
/devices:
get:
operationId: listDevices
tags:
- Devices
summary: List available devices
description: >-
Returns all devices the current user can access - public cloud,
favorites, and private/local devices - with device metadata. Supports
filtering to locate a device to book for a test run.
parameters:
- name: isOnline
in: query
schema:
type: boolean
description: Whether the device is currently online.
- name: isBooked
in: query
schema:
type: boolean
description: Whether the device is currently booked.
- name: platformName
in: query
schema:
type: string
enum: [Android, iOS]
description: The device platform.
- name: platformVersion
in: query
schema:
type: string
description: The platform / OS version of the device.
- name: deviceName
in: query
schema:
type: string
description: The device name; accepts an exact name or a comma-separated list of names.
- name: appiumDisabled
in: query
schema:
type: boolean
description: Filter by whether the device can run Appium automation tests.
- name: groupId
in: query
schema:
type: integer
description: For organization users, restrict to devices in a device group.
responses:
'200':
description: The devices accessible to the current user.
content:
application/json:
schema:
$ref: '#/components/schemas/DeviceList'
'401':
$ref: '#/components/responses/Unauthorized'
/sessions/{sessionId}:
get:
operationId: getSession
tags:
- Sessions
summary: Get a session
description: >-
Retrieves a test-run session by its Kobiton session ID, including
device, app, state, and timing metadata. Grounded in the
get-session-data sample.
parameters:
- $ref: '#/components/parameters/SessionId'
responses:
'200':
description: The session record.
content:
application/json:
schema:
$ref: '#/components/schemas/Session'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
description: Session not found.
/sessions/{sessionId}/commands:
get:
operationId: getSessionCommands
tags:
- Sessions
summary: Get session commands
description: >-
Returns the paginated list of commands (the step-by-step Appium /
WebDriver actions) captured during a session. Grounded in the
get-session-data sample, which shows currentPage / totalPages
pagination.
parameters:
- $ref: '#/components/parameters/SessionId'
- name: page
in: query
schema:
type: integer
default: 1
description: The page of commands to retrieve.
responses:
'200':
description: A page of session commands.
content:
application/json:
schema:
$ref: '#/components/schemas/SessionCommandsPage'
'401':
$ref: '#/components/responses/Unauthorized'
/revisitPlans/start:
post:
operationId: startScriptlessAutomation
tags:
- Scriptless Automation
summary: Start a scriptless automation run
description: >-
Starts a scriptless (no-code) automated test run by replaying one or
more baseline exploration sessions across a target device bundle.
Grounded in the scriptless-automation use-rest-api docs.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RevisitPlanStartRequest'
responses:
'200':
description: The scriptless run was accepted / started.
content:
application/json:
schema:
type: object
additionalProperties: true
'401':
$ref: '#/components/responses/Unauthorized'
/apps/uploadUrl:
post:
operationId: createAppUploadUrl
tags:
- Apps
summary: Generate a pre-signed app upload URL
description: >-
Returns a pre-signed S3 URL to which the app binary is uploaded with an
HTTP PUT before the app or version is created.
responses:
'200':
description: A pre-signed upload URL and app path.
content:
application/json:
schema:
$ref: '#/components/schemas/AppUploadUrl'
'401':
$ref: '#/components/responses/Unauthorized'
/apps:
get:
operationId: listApps
tags:
- Apps
summary: List applications
description: Lists the applications in the app repository.
responses:
'200':
description: A list of applications.
content:
application/json:
schema:
type: object
additionalProperties: true
'401':
$ref: '#/components/responses/Unauthorized'
post:
operationId: createApp
tags:
- Apps
summary: Create an application or version
description: >-
Registers a new application or a new version of an existing application
from a previously uploaded binary.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateAppRequest'
responses:
'200':
description: The created application or version.
content:
application/json:
schema:
type: object
additionalProperties: true
'401':
$ref: '#/components/responses/Unauthorized'
delete:
operationId: deleteApps
tags:
- Apps
summary: Delete multiple applications
description: Deletes multiple applications by ID.
responses:
'204':
description: The applications were deleted.
'401':
$ref: '#/components/responses/Unauthorized'
/apps/{appId}:
get:
operationId: getApp
tags:
- Apps
summary: Get an application
parameters:
- $ref: '#/components/parameters/AppId'
responses:
'200':
description: The application details.
content:
application/json:
schema:
type: object
additionalProperties: true
'401':
$ref: '#/components/responses/Unauthorized'
delete:
operationId: deleteApp
tags:
- Apps
summary: Delete an application
parameters:
- $ref: '#/components/parameters/AppId'
responses:
'204':
description: The application was deleted.
'401':
$ref: '#/components/responses/Unauthorized'
/apps/{appId}/private:
put:
operationId: makeAppPrivate
tags:
- Apps
summary: Make an application private
parameters:
- $ref: '#/components/parameters/AppId'
responses:
'200':
description: The application visibility was updated to private.
'401':
$ref: '#/components/responses/Unauthorized'
/apps/{appId}/public:
put:
operationId: makeAppPublic
tags:
- Apps
summary: Make an application public
parameters:
- $ref: '#/components/parameters/AppId'
responses:
'200':
description: The application visibility was updated to public.
'401':
$ref: '#/components/responses/Unauthorized'
/apps/{appId}/team/assign:
post:
operationId: assignAppToTeams
tags:
- Apps
summary: Assign an application to teams
parameters:
- $ref: '#/components/parameters/AppId'
responses:
'200':
description: The application was assigned to the specified teams.
'401':
$ref: '#/components/responses/Unauthorized'
/app/versions/{versionId}:
get:
operationId: getAppVersion
tags:
- Apps
summary: Get an application version
parameters:
- $ref: '#/components/parameters/VersionId'
responses:
'200':
description: The application version details.
content:
application/json:
schema:
type: object
additionalProperties: true
'401':
$ref: '#/components/responses/Unauthorized'
delete:
operationId: deleteAppVersion
tags:
- Apps
summary: Delete an application version
parameters:
- $ref: '#/components/parameters/VersionId'
responses:
'204':
description: The version was deleted.
'401':
$ref: '#/components/responses/Unauthorized'
/app/versions/{versionId}/tag/{name}:
post:
operationId: addAppVersionTag
tags:
- Apps
summary: Assign a tag to an app version
parameters:
- $ref: '#/components/parameters/VersionId'
- $ref: '#/components/parameters/TagName'
responses:
'200':
description: The tag was assigned to the version.
'401':
$ref: '#/components/responses/Unauthorized'
delete:
operationId: removeAppVersionTag
tags:
- Apps
summary: Remove a tag from an app version
parameters:
- $ref: '#/components/parameters/VersionId'
- $ref: '#/components/parameters/TagName'
responses:
'204':
description: The tag was removed from the version.
'401':
$ref: '#/components/responses/Unauthorized'
/data-sets:
get:
operationId: listDataSets
tags:
- Data Sets
summary: List data sets in a session
description: Returns the data-driven testing data sets in the specified session.
responses:
'200':
description: The data sets in the session.
content:
application/json:
schema:
type: object
additionalProperties: true
'401':
$ref: '#/components/responses/Unauthorized'
/data-sets/by-command:
post:
operationId: createDataSetByCommand
tags:
- Data Sets
summary: Create a data set by command ID
responses:
'200':
description: The created data set.
content:
application/json:
schema:
type: object
additionalProperties: true
'401':
$ref: '#/components/responses/Unauthorized'
/data-sets/by-element:
post:
operationId: createDataSetByElement
tags:
- Data Sets
summary: Create a data set by element property
responses:
'200':
description: The created data set.
content:
application/json:
schema:
type: object
additionalProperties: true
'401':
$ref: '#/components/responses/Unauthorized'
/data-sets/{dataSetId}/actions/by-command:
put:
operationId: updateDataSetByCommand
tags:
- Data Sets
summary: Update a data set by command ID
parameters:
- $ref: '#/components/parameters/DataSetId'
responses:
'200':
description: The data set was updated.
'401':
$ref: '#/components/responses/Unauthorized'
/data-sets/{dataSetId}/actions/by-element:
put:
operationId: updateDataSetByElement
tags:
- Data Sets
summary: Update a data set by element property
parameters:
- $ref: '#/components/parameters/DataSetId'
responses:
'200':
description: The data set was updated.
'401':
$ref: '#/components/responses/Unauthorized'
/organizations/member:
post:
operationId: createOrganizationMember
tags:
- Organization
summary: Create an organization member
responses:
'200':
description: The member was created.
'401':
$ref: '#/components/responses/Unauthorized'
/organizations/activate/member:
put:
operationId: activateOrganizationMember
tags:
- Organization
summary: Activate an organization member
responses:
'200':
description: The member was activated.
'401':
$ref: '#/components/responses/Unauthorized'
/organizations/deactivate/member:
put:
operationId: deactivateOrganizationMember
tags:
- Organization
summary: Deactivate an organization member
responses:
'200':
description: The member was deactivated.
'401':
$ref: '#/components/responses/Unauthorized'
/organizations/members/role:
put:
operationId: assignOrganizationMemberRole
tags:
- Organization
summary: Assign a role to an organization member
responses:
'200':
description: The role was assigned.
'401':
$ref: '#/components/responses/Unauthorized'
components:
securitySchemes:
basicAuth:
type: http
scheme: basic
description: >-
HTTP Basic authentication. Use your Kobiton username (or email) as the
username and your Kobiton API key as the password. Create and manage API
keys in the Kobiton portal under API Keys settings.
parameters:
SessionId:
name: sessionId
in: path
required: true
schema:
type: integer
description: The Kobiton session ID.
AppId:
name: appId
in: path
required: true
schema:
type: integer
description: The application ID.
VersionId:
name: versionId
in: path
required: true
schema:
type: integer
description: The application version ID.
TagName:
name: name
in: path
required: true
schema:
type: string
description: The tag name.
DataSetId:
name: dataSetId
in: path
required: true
schema:
type: integer
description: The data set ID.
responses:
Unauthorized:
description: Authentication failed or was not provided.
content:
application/json:
schema:
type: object
properties:
message:
type: string
schemas:
DeviceList:
type: object
description: >-
Devices grouped by source. Modeled from the get-devices-info sample;
reconcile exact property names against the live response.
properties:
privateDevices:
type: array
items:
$ref: '#/components/schemas/Device'
favoriteDevices:
type: array
items:
$ref: '#/components/schemas/Device'
cloudDevices:
type: array
items:
$ref: '#/components/schemas/Device'
Device:
type: object
properties:
id:
type: integer
deviceName:
type: string
platformName:
type: string
enum: [Android, iOS]
platformVersion:
type: string
isOnline:
type: boolean
isBooked:
type: boolean
udid:
type: string
Session:
type: object
description: A test-run session. Modeled; reconcile against the live get-session response.
properties:
id:
type: integer
state:
type: string
deviceName:
type: string
platformName:
type: string
platformVersion:
type: string
appName:
type: string
startTime:
type: string
format: date-time
endTime:
type: string
format: date-time
SessionCommandsPage:
type: object
description: A paginated page of session commands, as shown in the get-session-data sample.
properties:
currentPage:
type: integer
totalPages:
type: integer
commands:
type: array
items:
type: object
additionalProperties: true
RevisitPlanStartRequest:
type: object
description: Grounded in the scriptless-automation use-rest-api docs.
properties:
exploringSessionIds:
type: array
items:
type: integer
description: The baseline exploration session IDs to replay.
deviceBundleId:
type: integer
description: The target device bundle to run the scriptless test on.
required:
- exploringSessionIds
- deviceBundleId
AppUploadUrl:
type: object
properties:
appPath:
type: string
url:
type: string
format: uri
CreateAppRequest:
type: object
properties:
filename:
type: string
appPath:
type: string