API Reference
MobileHub is served by an external Device Farm service that the RabbitQA gateway proxies. This page lists the gateway prefixes and the endpoints the product itself calls, so an integration can target the same paths.
Request and response bodies are owned by the Device Farm service and are not reproduced here except where the product documents them itself. Treat the shapes below as the contract the application relies on, and verify against a live response before depending on a field.
Gateway Prefixes
Every MobileHub path starts with /df.
The gateway strips that prefix before forwarding, so /df/api/sessions reaches the service as /api/sessions.
| Prefix | Carries |
|---|---|
/df/api/** | The REST API — devices, sessions, files, reservations, reports |
/df/api/automation/** | Automation and test event endpoints |
/df/wd/** | The Appium and WebDriver hub |
/df/ws/** | WebSocket transports |
/df/devtools/** | Chrome DevTools protocol, over HTTP and WebSocket |
/df/debug-tunnel/** | The debug tunnel used by the CLI |
For the hosted service the base is https://api.rabbitqa.com, so the REST base URL is:
https://api.rabbitqa.com/df/api
/api/... without the /df prefix is not a registered gateway path.
Any client that drops the prefix will fail to route.
Authentication
| Method | Used for |
|---|---|
Authorization: Bearer ... | Most REST operations |
X-Api-Key: ... | Session and device endpoints, presigned file upload and confirm, the hub |
The gateway routes /df/api/sessions/** and /df/api/devices/** by API key when an X-Api-Key header is present.
POST /df/api/files/presigned-upload and POST /df/api/files/{fileId}/confirm accept an API key only when no bearer token is sent.
Manage keys on the Settings page.
Devices
| Method | Path | Purpose |
|---|---|---|
GET | /df/api/devices | List devices |
GET | /df/api/devices/filter-options | Facet counts for the filter controls |
GET | /df/api/devices/{deviceId} | One device |
PUT | /df/api/devices/{deviceId}/alias | Set a device alias |
DELETE | /df/api/devices/{deviceId}/alias | Remove the alias |
PUT | /df/api/devices/{deviceId}/favorite | Mark as favorite |
DELETE | /df/api/devices/{deviceId}/favorite | Remove from favorites |
The device list accepts search, platform, osVersion, model, type, excludeType, isRealDevice, status, sessionType, nodeName, hubId, sortBy, sortDir, page, and size.
status, osVersion, model, and nodeName may be repeated for a multi-value filter.
Sessions
| Method | Path | Purpose |
|---|---|---|
GET | /df/api/sessions | List sessions |
GET | /df/api/sessions/active | Your active sessions |
GET | /df/api/sessions/company/active | Active sessions across the company |
GET | /df/api/sessions/stats | Session statistics |
GET | /df/api/sessions/{sessionId} | One session |
POST | /df/api/sessions | Create a session |
DELETE | /df/api/sessions/{sessionId} | End or delete a session |
PUT | /df/api/sessions/{sessionId}/name | Rename a session |
PUT | /df/api/sessions/{sessionId}/metadata | Update session metadata |
Session Content
| Method | Path | Purpose |
|---|---|---|
GET | /df/api/sessions/{sessionId}/activities | The activity timeline |
POST | /df/api/sessions/{sessionId}/activity | Record an activity |
GET | /df/api/sessions/{sessionId}/artifacts | Artifacts, filtered by type |
GET | /df/api/sessions/{sessionId}/logs | Device logs |
GET | /df/api/sessions/{sessionId}/screenshot | Capture the current screen |
POST | /df/api/sessions/{sessionId}/recording/start | Start recording |
GET | /df/api/sessions/{sessionId}/recording/status | Recording status |
GET | /df/api/sessions/{sessionId}/replay | Session replay data |
GET | /df/api/sessions/{sessionId}/storage | Storage used by the session |
GET | /df/api/sessions/{sessionId}/notes | Read session notes |
PUT | /df/api/sessions/{sessionId}/notes | Write session notes |
GET | /df/api/sessions/{sessionId}/ui-tree | The UI element tree |
Device Control
| Method | Path | Purpose |
|---|---|---|
POST | /df/api/sessions/{sessionId}/device/control | Send a device control action |
GET | /df/api/sessions/{sessionId}/apps | Apps installed on the device |
POST | /df/api/sessions/{sessionId}/apps/install | Install an app |
POST | /df/api/sessions/{sessionId}/apps/uninstall | Uninstall an app |
POST | /df/api/sessions/{sessionId}/apps/presence | Check whether apps are present |
POST | /df/api/sessions/{sessionId}/app-helpers/open | Open a store or helper app |
POST | /df/api/sessions/{sessionId}/files/push | Push a file to the device |
POST | /df/api/sessions/{sessionId}/files/pull | Pull a file from the device |
GET | /df/api/sessions/{sessionId}/files | Browse device files |
DELETE | /df/api/sessions/{sessionId}/files | Delete a device file |
POST | /df/api/sessions/{sessionId}/folders | Create a folder on the device |
Sharing
| Method | Path | Purpose |
|---|---|---|
GET | /df/api/sessions/{sessionId}/invitations | List invitations |
POST | /df/api/sessions/{sessionId}/invitations | Invite a coworker |
DELETE | /df/api/sessions/{sessionId}/invitations/{invitationId} | Revoke an invitation |
GET | /df/api/sessions/{sessionId}/invitations/links | List shareable links |
DELETE | /df/api/sessions/{sessionId}/invitations/links/{linkId} | Revoke a link |
GET | /df/api/sessions/{sessionId}/viewers | Currently connected viewers |
DELETE | /df/api/sessions/{sessionId}/viewers/{userId} | Disconnect a viewer |
An invitation link is accepted in the application at /devicer/session-invite/{token}.
Debugging
| Method | Path | Purpose |
|---|---|---|
GET | /df/api/sessions/{sessionId}/debug-capabilities | What debugging is allowed for the session |
POST | /df/api/sessions/{sessionId}/debug-capabilities | Request debug access |
GET | /df/api/sessions/{sessionId}/debug-targets | Debuggable targets on the device |
Debug capabilities report the granted protocols.
On iOS these are usbmux, tcp_forward, lldb_rsp, webkit_inspector, and cdp; on Android adb, jdwp, tcp_forward, and cdp.
Automation
| Method | Path | Purpose |
|---|---|---|
POST | /df/api/automation/sessions/{sessionId}/test-events | Report a test event |
GET | /df/api/automation/sessions/{sessionId}/test-events | Read reported events |
GET | /df/api/automation/sessions/{sessionId}/test-events/progress | Read execution progress |
GET | /df/api/sessions/builds | List builds |
GET | /df/api/sessions/builds/{buildName}/sessions | Sessions in a build |
See Automated Testing for the event payload and the event types.
Files
| Method | Path | Purpose |
|---|---|---|
GET | /df/api/files | List files |
GET | /df/api/files/{fileId} | One file |
GET | /df/api/files/{fileId}/download | Download a file |
DELETE | /df/api/files/{fileId} | Delete a file |
POST | /df/api/files/presigned-upload | Request a presigned upload |
POST | /df/api/files/{fileId}/confirm | Confirm an upload |
POST | /df/api/files/multipart/initiate | Start a multipart upload |
GET | /df/api/files/multipart/{fileId}/part/{partNumber} | Get a part upload URL |
POST | /df/api/files/multipart/{fileId}/complete | Complete a multipart upload |
DELETE | /df/api/files/multipart/{fileId} | Abort a multipart upload |
App Catalog
| Method | Path | Purpose |
|---|---|---|
GET | /df/api/files/apps | List catalog apps |
GET | /df/api/files/apps/{appId}/versions | Versions of an app |
GET | /df/api/files/app-versions/{versionId} | One version |
DELETE | /df/api/files/apps/{appId} | Delete an app |
DELETE | /df/api/files/apps/{appId}/versions/{versionId} | Delete a version |
POST | /df/api/files/apps/backfill | Build the catalog from existing files |
See Apps & Files for the full upload flow and its size limits.
Reservations
| Method | Path | Purpose |
|---|---|---|
GET | /df/api/reservations | List reservations |
GET | /df/api/reservations/{reservationId} | One reservation |
PUT | /df/api/reservations/{reservationId} | Update a reservation |
DELETE | /df/api/reservations/{reservationId} | Cancel a reservation |
POST | /df/api/reservations/{reservationId}/end | End a reservation early |
POST | /df/api/reservations/{reservationId}/rejoin | Rejoin an active reservation |
Accessibility
| Method | Path | Purpose |
|---|---|---|
GET | /df/api/accessibility/audits | List reports |
GET | /df/api/accessibility/audits/page | List reports, paged |
GET | /df/api/accessibility/audits/{auditId} | One report |
GET | /df/api/accessibility/audits/{auditId}/compare | Compare reports |
POST | /df/api/accessibility/audits | Create a report |
GET | /df/api/sessions/{sessionId}/accessibility/audits | Reports for a session |
POST | /df/api/sessions/{sessionId}/accessibility/audits | Start a report in a session |
POST | /df/api/sessions/{sessionId}/accessibility/audits/{auditId}/scans | Scan the current screen |
POST | /df/api/sessions/{sessionId}/accessibility/audits/{auditId}/complete | Close the report |
POST | /df/api/accessibility/audits/{auditId}/exports | Request a report export |
GET | /df/api/accessibility/audits/{auditId}/exports/{exportId} | Poll an export |
PATCH | /df/api/accessibility/findings/{findingId}/triage | Set a finding's triage status |
See Accessibility for the statuses, severities, outcomes, and export formats these endpoints use.
Dashboard, Reports, and Quotas
| Method | Path | Purpose |
|---|---|---|
GET | /df/api/dashboard/stats | Fleet statistics |
GET | /df/api/dashboard/activity | Recent activity |
GET | /df/api/dashboard/most-used-devices | Most used devices |
GET | /df/api/reports/device-usage | Device usage report |
GET | /df/api/reports/reservations | Reservation report |
GET | /df/api/reports/sessions | Session report |
GET | /df/api/quotas | Quota usage and plan limits |
Settings
| Method | Path | Purpose |
|---|---|---|
GET | /df/api/keys | List API keys |
GET | /df/api/keys/{keyId} | One API key |
POST | /df/api/keys | Create an API key |
DELETE | /df/api/keys/{keyId} | Revoke an API key |
GET | /df/api/settings/session-defaults | Read session defaults |
PUT | /df/api/settings/session-defaults | Update session defaults |
GET | /df/api/client-config | Client configuration |
GET | /df/api/client-config/dfctl-manifest | CLI download manifest |
Long-Running Operations
Some device operations return an operation handle rather than a result.
GET /df/api/operations/{operationId}
Poll it until the operation reaches a terminal state.