Basic Information

Endpoint

https://api.nubosoftware.com/api/

Home

This API is designed to automate administrator operations of the Nubo system.

This is a REST based API which returns output in JSON format.
For your convenience, we can receive input parameters using three different techniques:
URL query parameters.
Post data encoded as application/x-www-form-urlencoded.
Post data encoded as JSON string.

Each access to the API must be authenticated by using the "Authorization" http header with "OAuth" authentication type and an authentication token.
Retrieve the authentication token with the /auth method.

Resources

/auth

Authentication methods - You must authenticate using the following authentication methods before accessing the API.

/auth
POST /auth

Log in to the admin API.
After successful login, use the "loginToken" return value to authenticate the resources, using the "Authorization" http header with "OAuth" authentication type.
e.g. Authorization: OAuth 474dff215b73e8fdedaee76bc896655830d592c25a3fda259fe9ddbc58c6985d835d71d428e54c48f30a6454f34a032c

Request
Query Parameters
userName
string, required

User name (Email)

password
string, required

Password

deviceid
string, required

Identifier of the device used for connecting

deviceName
string, optional

Name of the device used for connecting

selectedDomain
string, optional

The organization's domain to be used.
All requests from this login session will be directed to the chosen organization.

activationkey
string, optional

Activation key that was previously returned by the /auth command and activated by the user.
In case an activation key is missing, the auth command will generate an activation key and send an activation email.

Response

JSON output with status field:
Status 1 is a successful login and all other statuses are errors or login failures.
Status 200 is activation pending, which enables you to activate your access and re-try to authenticate with the activation key supplied.

Body
  • Success
    {
      "status": 1,
      "message": "Login was successful",
      "loginToken": "474dff215b73e8fdedaee76bc896655830d592c25a3fda259fe9ddbc58c6985d835d71d428e54c48f30a6454f34a032c",
      "mainDomain": "mydomain.com",
      "firstname": "John",
      "lastname": "Doe",
      "orgname": "My Company Inc."
    }
    
  • Activation Required
    {
      "status": 200,
      "message": "Please activate admin login",
      "activationkey":"845b38840cc8e12ddee5aa26a12bf3c6af3b68aeb85130d10ce5a97a2b1147c0e9edc900b3a94094212f3514cbe42937"
    }
    

/auth/validate
POST /auth/validate

Check if the given activation key is allows you to log in to the control panel.

Request
Query Parameters
email
string, required

User name (Email)

deviceid
string, required

Identifier of the device used for connecting

activationkey
string, required

Activation key that was previously returned by the /auth command

Response

JSON output with status field and message.
Available statuses:
201: Activation is valid
200: Activation is pending
202: Reset password is pending
0: Activation not found

Body
  • Valid
    {
      "status": 201,
      "message": "Activation is valid"
    }
    
  • Pending
    {
      "status": 200,
      "message": "Activation pending"
    }
    

/auth/reset
POST /auth/reset

Start the reset password process for an admin user.
The admin user will get a reset password link to reset the password.

Request
Query Parameters
userName
string, required

User name (Email)

deviceid
string, required

Identifier of the device

deviceName
string, optional

Name of the device

activationkey
string, required

Activation key that was previously returned by the "/auth" command

Response

JSON output with status field and message.
Available statuses:
200: Activation is pending
0: Error

Body
  • Example
    {
      "status": 200,
      "message": "Please activate admin login",
      "activationkey": "845b38840cc8e12ddee5aa26a12bf3c6af3b68aeb85130d10ce5a97a2b1147c0e9edc900b3a94094212f3514cbe42937"
    }

/profiles

Various operations on profiles (users)

/profiles
GET /profiles

Get a list of profiles (users).

Request
Query Parameters
adminFilter
string, optional

Return only administrators (Y) or non-administrators (N). Keep this parameter empty to get both admins and non-admins.

online
string, optional

Display only online users (Y/N)

limit
number, optional

Maximum number of rows to fetch

offset
number, optional

Number of rows to skip before fetching rows

sortBy
string, optional

Sort by fields

sortDesc
string, optional

Boolean array indicates if each sorted field is descending

search
string, optional

Filter results by using this search string

Response
Body
  • Example
    {
    "status": "1",
    "message": "Request was fulfilled",
    "myUser": "admin@mydomain.com",
    "profiles": [
        {
            "id": 1,
            "email": "main1@nub4est.co",
            "userName": "main1@nub4est.co",
            "firstName": "main1",
            "lastName": "",
            "isActive": 1,
            "imageUrl": "",
            "isOnline": 0,
            "deviceType1": "",
            "deviceType2": "",
            "isAdmin": 0
        },
        {
            "id": 2,
            "email": "subuser1@subdc1.nub4est.co",
            "userName": "subuser1@subdc1.nub4est.co",
            "firstName": "subuser1",
            "lastName": "",
            "isActive": 1,
            "imageUrl": "",
            "isOnline": 0,
            "deviceType1": "",
            "deviceType2": "",
            "isAdmin": 1
        }
    ],
    "totalItems": 2,
    "isMore":false
    }
    

/profiles/{email}
GET /profiles/{email}

Get profile information.
Return user details, as well as lists of user's apps, devices, and groups.

Request
Path Variables
email
string, required

User name (email).

Response
Body
  • Example
    {
      "status": "1",
      "message": "Request was fulfilled",
      "details": {
        "emailAddress": "1234@nub4est.co",
        "userName": "1234@nub4est.co",
        "isActive": 1,
        "officePhone": "12344567",
        "mobilePhone": "87643434",
        "manager": "Jim",
        "country": "UK",
        "isImAdmin": 0,
        "dataCenter": "",
        "imMobile": "",
        "imMobile2": "",
        "adDomain": "",
        "clientIp": "",
        "clientPort": "",
        "subscriptionId": "",
        "subscriptionUpdateDate": "",
        "Calendar": 1,
        "Email": 1,
        "Messaging": 1,
        "userCert": 0,
        "lastActivityTime": "",
        "firstname": "John",
        "lastname": "Smith",
        "storageUsage": "0.00%"
      },
      "apps": [
        {
          "appName": "Calendar",
          "packageName": "com.android.calendar",
          "imageUrl": "https://api.nubosoftware.com/appstore/domain.com/repo/icons/com.android.calendar.100.png",
          "price": "0",
          "privateApp": 0
        },
        {
          "appName": "Camera",
          "packageName": "com.android.camera",
          "imageUrl": "https://api.nubosoftware.com/appstore/domain.com/repo/icons/com.android.camera.3.png",
          "price": "0",
          "privateApp": 0
        },
        {
          "appName": "Contacts",
          "packageName": "com.android.contacts",
          "imageUrl": "https://api.nubosoftware.com/appstore/domain.com/repo/icons/com.android.contacts.100001.png",
          "price": "0",
          "privateApp": 0
        },
        {
          "appName": "Phone",
          "packageName": "com.android.dialer",
          "imageUrl": "https://api.nubosoftware.com/appstore/domain.com/repo/icons/com.android.dialer.30000.png",
          "price": "0",
          "privateApp": 0
        },
        {
          "appName": "Email",
          "packageName": "com.android.email",
          "imageUrl": "https://api.nubosoftware.com/appstore/domain.com/repo/icons/com.android.email.550007.png",
          "price": "0",
          "privateApp": 0
        },
        {
          "appName": "Store",
          "packageName": "com.nubo.appstore",
          "imageUrl": "https://api.nubosoftware.com/appstore/domain.com/repo/icons/com.nubo.appstore.1008002.png",
          "price": "0",
          "privateApp": 0
        },
        {
          "appName": "Files",
          "packageName": "com.nubo.filemanager",
          "imageUrl": "https://api.nubosoftware.com/appstore/domain.com/repo/icons/com.nubo.filemanager.48.png",
          "price": "0",
          "privateApp": 0
        },
        {
          "appName": "Gallery",
          "packageName": "com.nubo.gallery",
          "imageUrl": "https://api.nubosoftware.com/appstore/domain.com/repo/icons/com.nubo.gallery.37.png",
          "price": "0",
          "privateApp": 0
        },
        {
          "appName": "Launcher",
          "packageName": "com.nubo.launcher.nubo",
          "imageUrl": "https://api.nubosoftware.com/appstore/domain.com/repo/icons/com.nubo.launcher.nubo.30912.png",
          "price": "0",
          "privateApp": 0
        },
        {
          "appName": "Notes",
          "packageName": "com.nubo.notes",
          "imageUrl": "https://api.nubosoftware.com/appstore/domain.com/repo/icons/com.nubo.notes.13.png",
          "price": "0",
          "privateApp": 0
        },
        {
          "appName": "Voice Call",
          "packageName": "com.nubo.sip",
          "imageUrl": "https://api.nubosoftware.com/appstore/domain.com/repo/icons/com.nubo.sip.13.png",
          "price": "0",
          "privateApp": 0
        },
        {
          "appName": "Messages",
          "packageName": "org.pf.messages",
          "imageUrl": "https://api.nubosoftware.com/appstore/domain.com/repo/icons/org.pf.messages.79.png",
          "price": "0",
          "privateApp": 0
        }
      ],
      "devices": [
        {
          "deviceName": "Samsung_SM-G973F",
          "isActive": 1,
          "gateway": "",
          "platform": "",
          "IMEI": "dd98df4eeaeecb3a",
          "IMSI": "",
          "insertTime": "2020-06-11T12:11:58.000Z",
          "isCertExists": 0,
          "isOnline": 0
        },
        {
          "deviceName": "iPhoneX",
          "isActive": 1,
          "gateway": "",
          "platform": "",
          "IMEI": "04960B8D-2093-415B-B710-FDF548D79322",
          "IMSI": "",
          "insertTime": "2020-05-25T10:54:50.000Z",
          "isCertExists": 0,
          "isOnline": 0
        }
      ],
      "groups": [
        {
          "groupName": "All",
          "adDomain": ""
        }
      ]
    }
    

/profiles/{email}
POST /profiles/{email}

Update profile information.

Request
Path Variables
email
string, required

User name (email).

Query Parameters
first
string, required

First name

last
string, required

Last name

manager
string, optional

Manager's name

country
string, optional

Country

officePhone
string, optional

Office number

mobilePhone
string, optional

Mobile number

Response
Body
  • Example
    {
      "status": 1,
      "message": "The profile was updated successfully"
    }
    

/profiles/{email}
PUT /profiles/{email}

Add profile.

Request
Path Variables
email
string, required

User name (email).

Query Parameters
first
string, required

First name

last
string, required

Last name

manager
string, optional

Manager's name

country
string, optional

Country

officePhone
string, optional

Office number

mobilePhone
string, optional

Mobile number

Response
Body
  • Example
    {
      "status": 1,
      "message": "The profile was added successfully"
    }
    

/profiles/{email}
DELETE /profiles/{email}

Delete profile.

Request
Path Variables
email
string, required

User name (email).

Response
Body
  • Example
    {
      "status": 1,
      "message": "The profile was deleted successfully"
    }
    

/profiles/{email}/invite
PUT /profiles/{email}/invite

Send an invitation email to the user.

Request
Path Variables
email
string, required
Response
Body
  • Example
    {
      "status": "1",
      "message": "Request was fulfilled"
    }
    

/profiles/{email}/activate
PUT /profiles/{email}/activate

Enable or disable the profile.

Request
Path Variables
email
string, required
Query Parameters
activate
string, required

Y - Enable, N - Disable

Response
Body
  • Example
    {
      "status": "1",
      "message": "Request was fulfilled"
    }
    

/onlineProfiles

/onlineProfiles
GET /onlineProfiles

List all online profiles and devices.

Response
Body
  • Example
    {
      "status": 1,
      "message": "Request was fulfilled",
      "profiles": [
        {
          "email": "test@nubodemo.com",
          "username": "test@nubodemo.com",
          "firstname": "A",
          "lastname": "A",
          "isactive": 1,
          "imageurl": null,
          "isadmin": 1,
          "user_devices": [
            {
              "imei": "AABBCCDD",
              "devicename": "Samsung_SM-G973F",
              "gateway": "1",
              "platform": "2"
            }
          ]
        }
      ]
    }
    

/devices

/devices/{email}/{deviceid}
POST /devices/{email}/{deviceid}

Operations on a specific user device (e.g. end session or disable access).

Request
Path Variables
email
string, required
deviceid
string, required
Query Parameters
action
string, required

Action to perform on the device. The available options are:
"endSession" - End the current logged in session.
"disable" - Disable access from this device.
"enable" - Enable access from this device.

Response
Body
  • Example
    {
      "status": 1,
      "message": "Request was fulfilled"
    }
    

/groups

Various operations on groups.

/groups
GET /groups

Get the list of groups.

Response
Body
  • Example
    {
      "status": "1",
      "message": "Request was fulfilled",
      "groups": [
        {
          "groupName": "abcde",
          "adDomain": "",
          "profiles": [],
          "apps": []
        },
        {
          "groupName": "All",
          "adDomain": "",
          "profiles": [],
          "apps": []
        },
        {
          "groupName": "gggg",
          "adDomain": "",
          "profiles": [],
          "apps": []
        },
        {
          "groupName": "Account Operators",
          "adDomain": "nub4est.co",
          "profiles": [],
          "apps": []
        },
        {
          "groupName": "Administrators",
          "adDomain": "nub4est.co",
          "profiles": [],
          "apps": []
        }
      ]
    }
    

/groups/{groupName}
GET /groups/{groupName}

Get group information.

Request
Path Variables
groupName
string, required

Group name.
If the group was imported from A.D, groupName parameter should be <Group Name>#<A.D Domain>.

Response
Body
  • Example
    {
      "status": "1",
      "message": "Request was fulfilled",
      "groupName": "abcde",
      "profiles": [
        {
          "email": "administrator@nub4est.co",
          "firstName": "admin",
          "lastName": "nub4est",
          "isActive": 1,
          "imageUrl": ""
        },
        {
          "email": "administrator@subdc1.nub4est.co",
          "firstName": "admin",
          "lastName": "subdc1",
          "isActive": 1,
          "imageUrl": ""
        }
      ],
      "apps": []
    }
    

/groups/{groupName}
DELETE /groups/{groupName}

Delete group.

Request
Path Variables
groupName
string, required

Group name.
If the group was imported from A.D, groupName parameter should be <Group Name>#<A.D Domain>.

Response
Body
  • Example
    {
      "status": "1",
      "message": "The group was deleted successfully"
    }
    

/groups/{groupName}
PUT /groups/{groupName}

Create new group.

Request
Path Variables
groupName
string, required

Group name.
If the group was imported from A.D, groupName parameter should be <Group Name>#<A.D Domain>.

Query Parameters
email
string, optional

Array of emails to be added to this group

Response
Body
  • Example
    {
      "status": "1",
      "message": "The group was created successfully"
    }
    

/groups/{groupName}/addProfiles
POST /groups/{groupName}/addProfiles

Add profiles to group.

Request
Path Variables
groupName
string, required

Group name.
If the group was imported from A.D, groupName parameter should be <Group Name>#<A.D Domain>.

Query Parameters
email
string, optional

Array of emails to be added to group

Response
Body
  • Example
    {
      "status": "1",
      "message": "The profiles were added to the group successfully"
    }
    

/groups/{groupName}/removeProfiles
POST /groups/{groupName}/removeProfiles

Remove profiles from group.

Request
Path Variables
groupName
string, required

Group name.
If the group was imported from A.D, groupName parameter should be <Group Name>#<A.D Domain>.

Query Parameters
email
string, optional

Array of emails to be removed from group

Response
Body
  • Example
    {
      "status": "1",
      "message": "The profiles were removed from the group successfully"
    }
    

/apps

Actions on apps.

/apps
GET /apps

Get a list of available apps.

Response
Body
  • Example
    {
      "status": "1",
      "message": "The request was fulfilled",
      "apps": [
        {
          "packageName": "com.android.calendar",
          "versionName": "Nubo-7.0.7",
          "versionCode": "100",
          "appName": "Calendar",
          "imageUrl": "https://api.nubosoftware.com:6443/appstore/nubodemo.com/repo/icons/com.android.calendar.100.png",
          "price": "0",
          "description": "",
          "downloadCounter": 56,
          "summary": "Time management",
          "categories": "Tools"
        },
        {
          "packageName": "com.android.camera",
          "versionName": "Nubo-3.0",
          "versionCode": "3",
          "appName": "Camera",
          "imageUrl": "https://api.nubosoftware.com:6443/appstore/nubodemo.com/repo/icons/com.android.camera.3.png",
          "price": "0",
          "description": "Use this app to take photos and videos you wish to keep private, and not displayed on your physical device. All photos and videos are securely kept in the virtual remote device.",
          "downloadCounter": 56,
          "summary": "Secure Camera",
          "categories": "Photography"
        },
        {
          "packageName": "com.android.chrome",
          "versionName": "87.0.4280.141",
          "versionCode": "428014121",
          "appName": "Chrome",
          "imageUrl": "https://api.nubosoftware.com:6443/appstore/nubodemo.com/repo/icons/com.android.chrome.428014121.png",
          "price": "0",
          "description": "",
          "downloadCounter": 1,
          "summary": "",
          "categories": ""
        },
        {
          "packageName": "com.android.contacts",
          "versionName": "Nubo-3.0",
          "versionCode": "100001",
          "appName": "Contacts",
          "imageUrl": "https://api.nubosoftware.com:6443/appstore/nubodemo.com/repo/icons/com.android.contacts.100001.png",
          "price": "0",
          "description": "Use this app to securely manage your private contact list. The address book is securely kept in the virtual remote device.",
          "downloadCounter": 58,
          "summary": "Secure Address Book",
          "categories": "Communication"
        },
        {
          "packageName": "com.android.dialer",
          "versionName": "3.00.00",
          "versionCode": "30000",
          "appName": "Phone",
          "imageUrl": "https://api.nubosoftware.com:6443/appstore/nubodemo.com/repo/icons/com.android.dialer.30000.png",
          "price": "0",
          "description": "Use this app to securely make voice calls without leaving a trace on your physical device. The call history is securely kept in the virtual remote device, and the voice communication is encrypted.",
          "downloadCounter": 55,
          "summary": "Secure Voice Calls",
          "categories": "Communication"
        },
        {
          "packageName": "com.android.email",
          "versionName": "Nubo-7.0.7",
          "versionCode": "550007",
          "appName": "Email",
          "imageUrl": "https://api.nubosoftware.com:6443/appstore/nubodemo.com/repo/icons/com.android.email.550007.png",
          "price": "0",
          "description": "",
          "downloadCounter": 59,
          "summary": "Secure Email",
          "categories": "Communication"
        },
        {
          "packageName": "com.nubo.appstore",
          "versionName": "3.0.0.10",
          "versionCode": "1008002",
          "appName": "Store",
          "imageUrl": "https://api.nubosoftware.com:6443/appstore/nubodemo.com/repo/icons/com.nubo.appstore.1008002.png",
          "price": "0",
          "description": "This app allows you to install apps that have been hand-picked and specifically approved as secure and private.",
          "downloadCounter": 71,
          "summary": "Secure App Store",
          "categories": "Productivity,Tools"
        },
        {
          "packageName": "com.nubo.browser",
          "versionName": "4.5.3",
          "versionCode": "100",
          "appName": "Browser",
          "imageUrl": "https://api.nubosoftware.com:6443/appstore/nubodemo.com/repo/icons/com.nubo.browser.100.png",
          "price": "0",
          "description": "",
          "downloadCounter": 1,
          "summary": "",
          "categories": ""
        },
        {
          "packageName": "com.nubo.controlpanel",
          "versionName": "3.0.0.12",
          "versionCode": "23",
          "appName": "Control Panel",
          "imageUrl": "https://api.nubosoftware.com:6443/appstore/nubodemo.com/repo/icons/com.nubo.controlpanel.23.png",
          "price": "0",
          "description": "Use this app to manage your Nubo environment. Manage profiles, groups, apps, and various settings.",
          "downloadCounter": 42,
          "summary": " Administrator Console",
          "categories": "Tools"
        },
        {
          "packageName": "com.nubo.filemanager",
          "versionName": "2.3.1.2",
          "versionCode": "49",
          "appName": "Files",
          "imageUrl": "https://api.nubosoftware.com:6443/appstore/nubodemo.com/repo/icons/com.nubo.filemanager.49.png",
          "price": "0",
          "description": "",
          "downloadCounter": 55,
          "summary": "Secure File Manager",
          "categories": "Productivity,Tools"
        },
        {
          "packageName": "com.nubo.gallery",
          "versionName": "v1.1.1",
          "versionCode": "37",
          "appName": "Gallery",
          "imageUrl": "https://api.nubosoftware.com:6443/appstore/nubodemo.com/repo/icons/com.nubo.gallery.37.png",
          "price": "0",
          "description": "Use this app to access and view your private photos and videos. All media files added/saved can be securely viewed using the Gallery app.",
          "downloadCounter": 53,
          "summary": "Secure Photo Gallery",
          "categories": "Photography, Gallery"
        },
        {
          "packageName": "com.nubo.launcher.nubo",
          "versionName": "nubo-3.0.2",
          "versionCode": "30913",
          "appName": "Launcher",
          "imageUrl": "https://api.nubosoftware.com:6443/appstore/nubodemo.com/repo/icons/com.nubo.launcher.nubo.30913.png",
          "price": "0",
          "description": "",
          "downloadCounter": 55,
          "summary": "Launcher",
          "categories": "Tools"
        },
        {
          "packageName": "com.nubo.notes",
          "versionName": "3.1.6",
          "versionCode": "13",
          "appName": "Notes",
          "imageUrl": "https://api.nubosoftware.com:6443/appstore/nubodemo.com/repo/icons/com.nubo.notes.13.png",
          "price": "0",
          "description": "Use this app to create short text notes you wish to keep private, and not saved on your physical device.",
          "downloadCounter": 56,
          "summary": "Secure Note-Taking",
          "categories": "Productivity"
        },
        {
          "packageName": "com.nubo.sip",
          "versionName": "1.0.04",
          "versionCode": "13",
          "appName": "Voice Call",
          "imageUrl": "https://api.nubosoftware.com:6443/appstore/nubodemo.com/repo/icons/com.nubo.sip.13.png",
          "price": "0",
          "description": "Use this app to securely make voice calls without leaving a trace on your physical device. The call history is securely kept in the virtual remote device, and the voice communication is encrypted.",
          "downloadCounter": 56,
          "summary": "Secure Voice Calls",
          "categories": "Communication"
        },
        {
          "packageName": "org.pf.messages",
          "versionName": "3.0.03",
          "versionCode": "79",
          "appName": "Messages",
          "imageUrl": "https://api.nubosoftware.com:6443/appstore/nubodemo.com/repo/icons/org.pf.messages.79.png",
          "price": "0",
          "description": "Use this app to securely send and receive worry-free text messages. The chat history is securely kept in the virtual remote device, and not on the physical device itself.",
          "downloadCounter": 55,
          "summary": "Secure Messaging App",
          "categories": "Communication"
        },
      ]
    }
    

/apps
PUT /apps

Install or update APK in the app repository.
This method returns a result before full installation ends.
Use the "/apps/{appid}/checkUploadStatus" method to check the installation status.

Request
Query Parameters
fileName
string, required

Name of an APK file that was previously uploaded using "/upload" method.

Response
Body
  • Example
    {
      "status": 1,
      "message": "Installation in progress",
      "packageName": "com.android.chrome",
      "versionName": "87.0.4280.141",
      "versionCode": "428014121",
      "maindomain": "nubodemo.com",
      "appName": "Chrome"
    }
    

/apps/{appid}
GET /apps/{appid}

Return app information with the list of profiles that were directly assigned to the app (emails), the groups that were assigned to the app (groups), and the profiles that were indirectly assigned for being a member of a group (groupusers).

Request
Path Variables
appid
string, required

App ID is the Android app's package name.

Response
Body
  • Example
    {
      "status": 1,
      "message": null,
      "emails": [
        {
          "email": "aaron.j@nubodemo.com",
          "firstname": "Aaron",
          "lastname": "Jenkins"
        }
      ],
      "groups": [
        {
          "groupName": "aaaaa",
          "adDomain": ""
        }
      ],
      "groupusers": [
        {
          "email": "bernice.wilson@nubodemo.com",
          "firstname": "Bernice",
          "lastname": "Wilson"
        },
        {
          "email": "earl.reyna@nubodemo.com",
          "firstname": "Earl",
          "lastname": "Reyna"
        },
        {
          "email": "tayah.moyer@nubodemo.com",
          "firstname": "Tayah",
          "lastname": "Moyer"
        },
        {
          "email": "test@nubodemo.com",
          "firstname": "A",
          "lastname": "A"
        }
      ],
      "totalNumOfUsers": 5,
      "appDetails": {
        "packagename": "com.adobe.reader",
        "versionname": "20.9.1.15848",
        "versioncode": "1920915848",
        "appname": "Adobe Acrobat",
        "description": "",
        "summary": null,
        "categories": null,
        "imageurl": "https://api.nubosoftware.com:6443/appstore/nubodemo.com/repo/icons/com.adobe.reader.1920915848.png",
        "maindomain": "nubodemo.com",
        "price": "0",
        "status": 0,
        "err": ""
      }
    }
    

/apps/{appid}
POST /apps/{appid}

Update app details.

Request
Path Variables
appid
string, required

App ID is the Android app's package name.

Query Parameters
appDescription
string, optional

App's description

appName
string, optional

App's name

appSummary
string, optional

Short summary

appCategories
string, optional

List of App Store categories

Response
Body
  • Example
    {
      "status": "1",
      "message": "Request was fulfilled"
    }
    

/apps/{appid}
DELETE /apps/{appid}

Delete the app from the app repository.

Request
Path Variables
appid
string, required

App ID is the Android app's package name.

Response
Body
  • Example
    {
      "status": "1",
      "message": "Request was fulfilled"
    }
    

/apps/{appid}/install
POST /apps/{appid}/install

Install the app on a list of profiles or groups.

Request
Path Variables
appid
string, required

App ID is the Android app's package name.

Query Parameters
email
string, optional

A list of emails to install the app on

groupName
string, optional

A list of group names to install the app on

adDomain
string, optional

A list of A.D. domain groups

appStoreOnly
number, optional

If this parameter value is 1, list the app in the profile's App Store and skip installation process

Response
Body
  • Example
    {
      "status": 1,
      "message": "Apps installed successfully",
      "numUsers": 10
    }
    

/apps/{appid}/uninstall
POST /apps/{appid}/uninstall

Uninstall the app on a list of profiles or groups.

Request
Path Variables
appid
string, required

App ID is the Android app's package name.

Query Parameters
email
string, optional

A list of emails to uninstall the app on

groupName
string, optional

A list of group names to uninstall the app on

adDomain
string, optional

A list of A.D. domain groups

Response
Body
  • Example
    {
      "status": 1,
      "message": "Request was fulfilled",
      "totalNumOfUsers": 7
    }
    

/apps/{appid}/checkUploadStatus
GET /apps/{appid}/checkUploadStatus

App uploading status
Possible values of apkStatus return parameter:
1: Processing apk
2: Installing app
0: Installation finished

Request
Path Variables
appid
string, required

App ID is the Android app's package name.

Response
Body
  • Example
    {
      "status": "1",
      "message": "",
      "apkStatus": 1
    }
    

/upload

/upload
POST /upload

Upload file to the admin storage. Uploaded files can be used by the /apps/put method to install an APK file.

Request
Response
Body
  • Example
    {
      "status": 1,
      "message": "File uploaded",
      "uploadFileName": "myapp.apk"
    }
    

/notifications

/notifications
PUT /notifications

Send notification to a Nubo user.

Request
Query Parameters
email
string, required

Profile email

titleText
string, required

Notification title

notifyTime
string, required

Notification text

notifyLocation
string, required

Additional text

appName
string, optional

App ID inside Nubo

authKey
string, optional

App authentication key

Response
Body
  • Example
    {
      "status": "1",
      "message": "Request was fulfilled"
    }
    

/logs

/logs
GET /logs

Get log events from the central log repository.

Request
Query Parameters
u
string, optional

User ID. Retrieve logs only related to this user

s
date, optional

Starting time

limit
number, optional

Maximum number of rows to fetch

offset
number, optional

Number of rows to skip before fetching rows

level
number, optional

Log level

sortBy
string, optional

List of sort fields

sortDesc
boolean, optional

For each sort field, a Boolean value indicates if to sort in ascending (false) order or descending (true) order

comp
string, optional

Component type

serverName
string, optional

Server name

search
string, optional

Search specific string

/logs/getFilters
GET /logs/getFilters

Get possible values per component type and server name.

/events

/events
GET /events

Get security events from the database.

Request
Query Parameters
s
date, optional

Start time

/ldap

/ldap
GET /ldap

Get a list of LDAP domains and their details.

Response
Body
  • Example
    {
      "status": "1",
      "message": "Request was fulfilled",
      "ldapDomains": [
        {
          "domain": "mydomain.com",
          "addomain": "domain.com",
          "basedn": "DC=domain,DC=com",
          "connectionurl": "ldap://8.8.8.8:389",
          "password": "********",
          "username": "administrator@domain.com"
        }
      ]
    }
    

/ldap/{ldapDomain}
GET /ldap/{ldapDomain}

Get a list of OUs for the selected ldap domain.

Request
Path Variables
ldapDomain
string, required
Response
Body
  • Example
    {
      "status": "1",
      "message": "Request was fulfilled",
      "ousList": [
        {
          "ouName": "domain",
          "level": 0,
          "key": "DC=domain,DC=com",
          "father": " ",
          "checked": false,
          "hasChild": true
        },
        {
          "ouName": "Domain Controllers",
          "level": 1,
          "key": "OU=Domain Controllers,DC=domain,DC=com",
          "father": "domain",
          "checked": true,
          "hasChild": false
        },
        {
          "ouName": "Main OU",
          "level": 1,
          "key": "OU=Main OU,DC=domain,DC=com",
          "father": "domain",
          "checked": false,
          "hasChild": true
        },
        {
          "ouName": "Sales",
          "level": 2,
          "key": "OU=Sales,OU=Main OU,DC=domain,DC=com",
          "father": "Main OU",
          "checked": false,
          "hasChild": true
        },
        {
          "ouName": "R&D",
          "level": 2,
          "key": "OU=R&D,OU=Main OU,DC=domain,DC=com",
          "father": "Main OU",
          "checked": false,
          "hasChild": true
        },
        {
          "ouName": "Team 1",
          "level": 3,
          "key": "OU=Team 1,OU=R&D,OU=Main OU,DC=domain,DC=com",
          "father": "R&D",
          "checked": true,
          "hasChild": false
        },
        {
          "ouName": "Team 2",
          "level": 3,
          "key": "OU=Team 2,OU=R&D,OU=Main OU,DC=domain,DC=com",
          "father": "R&D",
          "checked": true,
          "hasChild": false
        },
        {
          "ouName": "Team 3",
          "level": 3,
          "key": "OU=Team 3,OU=R&D,OU=Main OU,DC=domain,DC=com",
          "father": "R&D",
          "checked": true,
          "hasChild": false
        },
        {
          "ouName": "Team 1 Sales",
          "level": 3,
          "key": "OU=Team 1 Sales,OU=Sales,OU=Main OU,DC=domain,DC=com",
          "father": "Sales",
          "checked": true,
          "hasChild": false
        }
      ]
    }
    

/ldap/{ldapDomain}
POST /ldap/{ldapDomain}

Set a list of synced OUs and start sync process.

Request
Path Variables
ldapDomain
string, required
Query Parameters
orgUnits
string, required

List of OUs to sync

Response
Body
  • Example
    {
      "status": "1",
      "message": "Starting LDAP sync"
    }
    

/ldap/{ldapDomain}
PUT /ldap/{ldapDomain}

Set a new LDAP domain or LDAP connection parameters for an existing domain.

Request
Path Variables
ldapDomain
string, required
Query Parameters
host
string, required

LDAP host name

user
string, required

Admin user name that can log in to the LDAP server and read information (read-only user)

password
string, required

Password for the admin user

port
number, required

Port number for the LDAP server

baseDN
string, required

Base DN for the LDAP import

SSL
string, required

Connection type (auto or ldap:// or ldaps://)

Response
Body
  • Example
    {
      "status": "1",
      "message": "LDAP domain was updated succesfully"
    }
    

/ldap/{ldapDomain}
DELETE /ldap/{ldapDomain}

Delete the LDAP domain.

Request
Path Variables
ldapDomain
string, required
Response
Body
  • Example
    {
      "status": "1",
      "message": "The LDAP settings were deleted"
    }
    

/admins

/admins/{email}
GET /admins/{email}

Return the admin information, including the permissions granted to the admin.

Request
Path Variables
email
string, required
Response
Body
  • Example
    {
      "status": "1",
      "message": "Request was fulfilled",
      "details": {
        "email": "aaron.j@nubodemo.com",
        "username": "aaron.j@nubodemo.com",
        "firstname": "Aaron",
        "lastname": "Jenkins",
        "isactive": 1,
        "isadmin": 1,
        "admin": {
          "email": "aaron.j@nubodemo.com",
          "maindomain": "nubodemo.com",
          "permissions": "{\"/profiles\":\"rw\",\"/groups\":\"rw\",\"/apps\":\"ri\",\"/reports\":\"r\"}",
          "createdAt": "2020-12-02T13:18:23.000Z",
          "updatedAt": "2021-02-24T07:24:54.000Z"
        }
      }
    }
    

/admins/{email}
PUT /admins/{email}

Add a new admin or change permission to an existing admin.

Request
Path Variables
email
string, required
Query Parameters
permissions
string, required

JSON object with a set of admin permissions.
The following permission keys are available:
"/profiles" - Access and operations to profiles.
"/groups" - Access and operations to groups.
"/apps" - Access and operations to groups.
"/reports" - Access to reports.
"/" - Organization admin - Enable all the above permissions, as well as configure organization level parameters.
"@/" - Site admin. Can access all organizations as organization admin, as well as configure site level parameters.

Each permission key should include an access level value. The following values are available:
"r" - Read only. Can read or list an object but cannot do modifications.
"rw" - Read and write. Can read,list,update and delete objects.
"ri" - Read and install/uninstall. A special level, available only in the /apps permission.

Response
Body
  • Example
    {
      "status": "1",
      "message": "The admin was added successfully"
    }
    

/admins/{email}
DELETE /admins/{email}

Remove admin.

Request
Path Variables
email
string, required
Response
Body
  • Example
    {
      "status": "1",
      "message": "The admin was removed successfully"
    }
    

/orgs

/orgs
GET /orgs

Get the list of all organizations.

Response
Body
  • Example
    {
      "status": 1,
      "message": "Request was fulfilled",
      "orgs": [
        {
          "maindomain": "kitkat.com",
          "orgname": "Kitkat",
          "inviteurl": "https://nubosoftware.com/app-download.html"
        },
        {
          "maindomain": "nougat.com",
          "orgname": "Nougat",
          "inviteurl": "https://nubosoftware.com/app-download.html"
        },
        {
          "maindomain": "nubodemo.com",
          "orgname": "Nubo Demo",
          "inviteurl": "https://nubosoftware.com/app-download.html"
        }
      ]
    }
    

/orgs/{maindomain}
POST /orgs/{maindomain}

Update organization's information or insert a new organization.

Request
Path Variables
maindomain
string, required
Query Parameters
orgname
string, optional

Display name

inviteurl
string, optional

URL to send with a profile invitation

Response
Body
  • Example
    {
      "status": 1,
      "message": "Request was fulfilled"
    }
    

/orgs/{maindomain}
PUT /orgs/{maindomain}

Change the selected organization for this login session. All following requests with the same login session will access data from the selected organization.

Request
Path Variables
maindomain
string, required
Response
Body
  • Example
    {
      "status": 1,
      "message": "Request was fulfilled"
    }
    

/platforms

/platforms
GET /platforms

List all available platforms - both running and idle platforms.

Response
Body
  • Example
    {
      "status": "1",
      "message": "Request was fulfilled",
      "platforms": [
        {
          "platID": 2,
          "status": "running",
          "sessions": "1",
          "platform_ip": "192.168.123.43"
        },
        {
          "platID": 3,
          "status": "available",
          "sessions": 0,
          "platform_ip": ""
        }
      ]
    }
    

/platforms/{platformid}
PUT /platforms/{platformid}

Start a platform.
This long operation method returns a "notifToken" value that can be used with the /longOperations method to query the status of the operation.

Request
Path Variables
platformid
string, required
Response
Body
  • Example
    {
      "status": "1",
      "message": "Request was fulfilled",
      "notifToken": "8fc9024cce23d7571f45ddd79a9ff5941f484e66cab36a4d28ad44035c418af55d8a6e5763b20362c4399dc44c91aa06"
    }
    

/platforms/{platformid}
DELETE /platforms/{platformid}

Stop a platform.
This long operation method returns a "notifToken" value that can be used with the /longOperations method to query the status of the operation.

Request
Path Variables
platformid
string, required
Response
Body
  • Example
    {
      "status": "1",
      "message": "Request was fulfilled",
      "notifToken": "8fc9024cce23d7571f45ddd79a9ff5941f484e66cab36a4d28ad44035c418af55d8a6e5763b20362c4399dc44c91aa06"
    }
    

/longOperations

/longOperations/{notifToken}
GET /longOperations/{notifToken}

Check the status of a long operation, such as starting a platform.

Request
Path Variables
notifToken
string, required
Response
Body
  • Example
    {
      "status": "1",
      "message": "Platform was started successfully"
    }
    

Type Reference