curl --request POST \
--url https://managexrapi.com/v1/apps/{packageName}/versions \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"versionCode": 42,
"apkUrl": "https://storage.example.com/apps/com.example.app.apk",
"apkMd5": "d41d8cd98f00b204e9800998ecf8427e",
"obbUrl": "https://storage.example.com/apps/com.example.app.obb",
"obbMd5": "d41d8cd98f00b204e9800998ecf8427e",
"versionName": "1.0.0",
"versionLabel": "Quest",
"apkSize": 72633861,
"obbSize": 1024
}
'import requests
url = "https://managexrapi.com/v1/apps/{packageName}/versions"
payload = {
"versionCode": 42,
"apkUrl": "https://storage.example.com/apps/com.example.app.apk",
"apkMd5": "d41d8cd98f00b204e9800998ecf8427e",
"obbUrl": "https://storage.example.com/apps/com.example.app.obb",
"obbMd5": "d41d8cd98f00b204e9800998ecf8427e",
"versionName": "1.0.0",
"versionLabel": "Quest",
"apkSize": 72633861,
"obbSize": 1024
}
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({
versionCode: 42,
apkUrl: 'https://storage.example.com/apps/com.example.app.apk',
apkMd5: 'd41d8cd98f00b204e9800998ecf8427e',
obbUrl: 'https://storage.example.com/apps/com.example.app.obb',
obbMd5: 'd41d8cd98f00b204e9800998ecf8427e',
versionName: '1.0.0',
versionLabel: 'Quest',
apkSize: 72633861,
obbSize: 1024
})
};
fetch('https://managexrapi.com/v1/apps/{packageName}/versions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://managexrapi.com/v1/apps/{packageName}/versions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'versionCode' => 42,
'apkUrl' => 'https://storage.example.com/apps/com.example.app.apk',
'apkMd5' => 'd41d8cd98f00b204e9800998ecf8427e',
'obbUrl' => 'https://storage.example.com/apps/com.example.app.obb',
'obbMd5' => 'd41d8cd98f00b204e9800998ecf8427e',
'versionName' => '1.0.0',
'versionLabel' => 'Quest',
'apkSize' => 72633861,
'obbSize' => 1024
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://managexrapi.com/v1/apps/{packageName}/versions"
payload := strings.NewReader("{\n \"versionCode\": 42,\n \"apkUrl\": \"https://storage.example.com/apps/com.example.app.apk\",\n \"apkMd5\": \"d41d8cd98f00b204e9800998ecf8427e\",\n \"obbUrl\": \"https://storage.example.com/apps/com.example.app.obb\",\n \"obbMd5\": \"d41d8cd98f00b204e9800998ecf8427e\",\n \"versionName\": \"1.0.0\",\n \"versionLabel\": \"Quest\",\n \"apkSize\": 72633861,\n \"obbSize\": 1024\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Basic <encoded-value>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://managexrapi.com/v1/apps/{packageName}/versions")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"versionCode\": 42,\n \"apkUrl\": \"https://storage.example.com/apps/com.example.app.apk\",\n \"apkMd5\": \"d41d8cd98f00b204e9800998ecf8427e\",\n \"obbUrl\": \"https://storage.example.com/apps/com.example.app.obb\",\n \"obbMd5\": \"d41d8cd98f00b204e9800998ecf8427e\",\n \"versionName\": \"1.0.0\",\n \"versionLabel\": \"Quest\",\n \"apkSize\": 72633861,\n \"obbSize\": 1024\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://managexrapi.com/v1/apps/{packageName}/versions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Basic <encoded-value>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"versionCode\": 42,\n \"apkUrl\": \"https://storage.example.com/apps/com.example.app.apk\",\n \"apkMd5\": \"d41d8cd98f00b204e9800998ecf8427e\",\n \"obbUrl\": \"https://storage.example.com/apps/com.example.app.obb\",\n \"obbMd5\": \"d41d8cd98f00b204e9800998ecf8427e\",\n \"versionName\": \"1.0.0\",\n \"versionLabel\": \"Quest\",\n \"apkSize\": 72633861,\n \"obbSize\": 1024\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "av_123",
"type": "managed",
"configurationDeployments": {
"config_123": 1,
"config_456": 0
},
"createdAt": 1645615777448,
"updatedAt": 1687352117203,
"versionCode": 83894522,
"versionName": "8.7.8.1206",
"versionLabel": "Quest",
"apkSize": 72633861,
"obbSize": 1024,
"selfHosted": true,
"apkUrl": "https://storage.example.com/apps/com.example.app.apk",
"obbUrl": "https://storage.example.com/apps/com.example.app.obb"
}
}{
"statusCode": 400,
"message": "Invalid request",
"error": "ManageXR Error"
}{
"statusCode": 403,
"message": "Forbidden",
"error": "ManageXR Error"
}Create App Version
Create a managed app version (Self-Hosted Only). Adds a new version of a self-hosted application. To create and upload a new app version to our servers, use the ManageXR CLI
curl --request POST \
--url https://managexrapi.com/v1/apps/{packageName}/versions \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"versionCode": 42,
"apkUrl": "https://storage.example.com/apps/com.example.app.apk",
"apkMd5": "d41d8cd98f00b204e9800998ecf8427e",
"obbUrl": "https://storage.example.com/apps/com.example.app.obb",
"obbMd5": "d41d8cd98f00b204e9800998ecf8427e",
"versionName": "1.0.0",
"versionLabel": "Quest",
"apkSize": 72633861,
"obbSize": 1024
}
'import requests
url = "https://managexrapi.com/v1/apps/{packageName}/versions"
payload = {
"versionCode": 42,
"apkUrl": "https://storage.example.com/apps/com.example.app.apk",
"apkMd5": "d41d8cd98f00b204e9800998ecf8427e",
"obbUrl": "https://storage.example.com/apps/com.example.app.obb",
"obbMd5": "d41d8cd98f00b204e9800998ecf8427e",
"versionName": "1.0.0",
"versionLabel": "Quest",
"apkSize": 72633861,
"obbSize": 1024
}
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({
versionCode: 42,
apkUrl: 'https://storage.example.com/apps/com.example.app.apk',
apkMd5: 'd41d8cd98f00b204e9800998ecf8427e',
obbUrl: 'https://storage.example.com/apps/com.example.app.obb',
obbMd5: 'd41d8cd98f00b204e9800998ecf8427e',
versionName: '1.0.0',
versionLabel: 'Quest',
apkSize: 72633861,
obbSize: 1024
})
};
fetch('https://managexrapi.com/v1/apps/{packageName}/versions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://managexrapi.com/v1/apps/{packageName}/versions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'versionCode' => 42,
'apkUrl' => 'https://storage.example.com/apps/com.example.app.apk',
'apkMd5' => 'd41d8cd98f00b204e9800998ecf8427e',
'obbUrl' => 'https://storage.example.com/apps/com.example.app.obb',
'obbMd5' => 'd41d8cd98f00b204e9800998ecf8427e',
'versionName' => '1.0.0',
'versionLabel' => 'Quest',
'apkSize' => 72633861,
'obbSize' => 1024
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://managexrapi.com/v1/apps/{packageName}/versions"
payload := strings.NewReader("{\n \"versionCode\": 42,\n \"apkUrl\": \"https://storage.example.com/apps/com.example.app.apk\",\n \"apkMd5\": \"d41d8cd98f00b204e9800998ecf8427e\",\n \"obbUrl\": \"https://storage.example.com/apps/com.example.app.obb\",\n \"obbMd5\": \"d41d8cd98f00b204e9800998ecf8427e\",\n \"versionName\": \"1.0.0\",\n \"versionLabel\": \"Quest\",\n \"apkSize\": 72633861,\n \"obbSize\": 1024\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Basic <encoded-value>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://managexrapi.com/v1/apps/{packageName}/versions")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"versionCode\": 42,\n \"apkUrl\": \"https://storage.example.com/apps/com.example.app.apk\",\n \"apkMd5\": \"d41d8cd98f00b204e9800998ecf8427e\",\n \"obbUrl\": \"https://storage.example.com/apps/com.example.app.obb\",\n \"obbMd5\": \"d41d8cd98f00b204e9800998ecf8427e\",\n \"versionName\": \"1.0.0\",\n \"versionLabel\": \"Quest\",\n \"apkSize\": 72633861,\n \"obbSize\": 1024\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://managexrapi.com/v1/apps/{packageName}/versions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Basic <encoded-value>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"versionCode\": 42,\n \"apkUrl\": \"https://storage.example.com/apps/com.example.app.apk\",\n \"apkMd5\": \"d41d8cd98f00b204e9800998ecf8427e\",\n \"obbUrl\": \"https://storage.example.com/apps/com.example.app.obb\",\n \"obbMd5\": \"d41d8cd98f00b204e9800998ecf8427e\",\n \"versionName\": \"1.0.0\",\n \"versionLabel\": \"Quest\",\n \"apkSize\": 72633861,\n \"obbSize\": 1024\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "av_123",
"type": "managed",
"configurationDeployments": {
"config_123": 1,
"config_456": 0
},
"createdAt": 1645615777448,
"updatedAt": 1687352117203,
"versionCode": 83894522,
"versionName": "8.7.8.1206",
"versionLabel": "Quest",
"apkSize": 72633861,
"obbSize": 1024,
"selfHosted": true,
"apkUrl": "https://storage.example.com/apps/com.example.app.apk",
"obbUrl": "https://storage.example.com/apps/com.example.app.obb"
}
}{
"statusCode": 400,
"message": "Invalid request",
"error": "ManageXR Error"
}{
"statusCode": 403,
"message": "Forbidden",
"error": "ManageXR Error"
}Authorizations
API key based authentication where is the Base64 encoding of API_KEY_ID:API_KEY_SECRET
- Username: The API Key ID.
- Password: The API Key Secret.
Path Parameters
The package name of the app
Query Parameters
Unique identifier of the organization. This parameter is only necessary when using multi-organization API keys.
Defaults to the organizationId associated with the API key.
Body
Version code of the app
42
URL of the APK file
"https://storage.example.com/apps/com.example.app.apk"
Version name of the app
"1.0.0"
MD5 hash of the APK file
"d41d8cd98f00b204e9800998ecf8427e"
URL of the OBB file
"https://storage.example.com/apps/com.example.app.obb"
MD5 hash of the OBB file
"d41d8cd98f00b204e9800998ecf8427e"
Label for uniqueness among app versions
"Quest"
Size of the APK file in bytes
72633861
Size of the OBB file in bytes
1024
Response
The created app version
Show child attributes
Show child attributes