Analytics API
Josh Franzen avatar
Written by Josh Franzen
Updated over a week ago

Who can use this feature?

👤 Organizations Owners and Admins.
🚩 Only available on the Enterprise Plan.

Overview

AborXR's Analytics API, which enables integration with business intelligence tools, is offered on a Postgres-compatible protocol through our hosted Cube instance.

It can be connected to any BI tool that supports a Postgres connection, including but not limited to: Tableau Cloud, Power BI, Metabase, Deepnote, and Hex.

It does support “Joins” but they are very selective and are through a specific Cube functionality.

Connections are scoped to a specific User in a specific Organization. If that User is an Owner of the Organization it also has access to any child Organizations.

Only select fields and tables are available. If there are any additions requested, please reach out to [email protected].

Postgres Connection Information

Hostname: analytics-pgsql.xrdm.dev

Port: 80

Username: API Token

Password: Organization ID

API Token:

  1. Navigate to organization Settings, select Access Token in the top right, then click Create Access Token.

  2. Enter a title, check the Public API checkbox, then click Create.

  3. Copy the token value before closing.

Organization ID

The organization ID is the first string of characters in the URL of the ArborXR web portal.

Models

Organizations

The entity that represents an organization itself. For most this will only return one entry. If you have parent/child organizations set up you’ll see both parent and all child organizations.

SELECT "slug", "title" FROM "Organizations"

Column

Description

id

The ID of the organization

title

The title of the organization

slug

The slug value for the organization

Devices

The entity that represents a device. It has soft deleted entries so make sure to filter by where deletedAt is null to get up to date information.

SELECT "serialNumber", "organizationId" FROM "Devices"  WHERE "deletedAt" IS NULL

Column

Description

id

The ID of the device

serialNumber

The device’s serial number

title

The title set in ArborXR for the device

state

ACTIVE, INACTIVE, NULL

deviceModelName

A string that is the device model IE Meta Quest 2

organizationId

The organization this device is in

deviceGroupId

The device group this device is in

deletedAt

Soft delete timestamp

lastCommunicatedAt

Timestamp of the last time this device communicated with ArborXR

launcherVersion

The version of the ArborXR Home app that is installed

clientVersion

The version of the ArborXR Client app that is installed

androidVersion

The version of Android running on the device. IE 10 or 12

firmwareVersion

The firmware version installed. Usually the same as the OS.

operatingSystemVersion

The OS version installed. Usually the same as the firmware.

OrganizationContents

The entity that is an application in a customer’s account.

OrganizationContent vs. Content

We have two different very similarly named models in our backend: Content and OrganizationContent.

When you upload an application to our backend, it creates a Content entry. This is what is related to builds that are uploaded.

Then there is OrganizationContent which is related to a Content entry.

OrganizationContent are what is assigned to a Device, in the form of a DeviceOrganizationContent.

If a Content is shared to a child or external Organization, it keeps the same Content ID, but gets a new Organization ID.

SELECT "title", "organizationId" FROM "OrganizationContents"  WHERE "deletedAt" IS NULL

Column

Description

id

The ID of the organization content

title

The title of the application set in the portal

description

The description of the application set in the portal

organizationId

The ID of the organization its added to

contentId

The parent “content” for this entry in an application. See the note above on content vs. organization content.

deviceModelIds

The device models that the application supports

DeviceOrganizationContents

An application that is added to a Device. This entry gets updated with the install status and other information relating to an application on a device.

SELECT "deviceId", "organizationContentId" FROM "DeviceOrganizationContents"

Column

Description

id

The ID of the device organization content

installStatus

ENUM that defines if the app is installed or pending

userVersion

The user defined version of the Android application installed

versionCode

The incremental int version code of the Android application installed

packageName

The package name of the Android application installed

deviceId

The ID of the device this is assigned to

organizationContentId

The ID of the content that is added to the device

progress

Nullable Int

If an install is in progress, the progress its at

DeviceSessions

Explain how to compare createdAt vs startedAt/endedAt

Column

Description

activeDuration

The session duration minus idle duration

uncommunicativeDuration

idleDuration

The app is still running and the device is powered on, but the screen of the device is off and the device is not being interacted with.

totalDuration

averageDuration

The total active duration of an app divided by total app sessions

maxDuration

The longest single session of active duration

managedContent

organizationId

The organization ID for this session

contentTitle

The title of the application

packageName

The android package name of the application

organizationContentId

The organization Content ID

organizationTitle

The organization's title

activityName

The android package activity name that is running

versionCode

The incremental int version code of the Android application installed

contentId

The content ID of the application

endedReason

versionName

The version name for the application that is running

deviceId

The ID of the Device for the session

deviceOrganizationContentId

The ID of the device organization content for what's running

deviceTitle

The device’s title

deviceGroupId

The device group ID

deviceGroupTitle

The device group title

serialNumber

The device’s serial number

createdAt

When the session was created on the server

updatedAt

When the session was updated on the server

endedAt

When the session ended on the device

startedAt

When the session started on the device

Did this answer your question?