curl --request GET \
--url https://cloud-api.phala.com/api/v1/apps/{app_id}/revisions/{revision_id}import requests
url = "https://cloud-api.phala.com/api/v1/apps/{app_id}/revisions/{revision_id}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://cloud-api.phala.com/api/v1/apps/{app_id}/revisions/{revision_id}', 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://cloud-api.phala.com/api/v1/apps/{app_id}/revisions/{revision_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://cloud-api.phala.com/api/v1/apps/{app_id}/revisions/{revision_id}"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://cloud-api.phala.com/api/v1/apps/{app_id}/revisions/{revision_id}")
.asString();require 'uri'
require 'net/http'
url = URI("https://cloud-api.phala.com/api/v1/apps/{app_id}/revisions/{revision_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"revision_id": "<string>",
"app_id": "<string>",
"vm_uuid": "<string>",
"compose_hash": "<string>",
"compose_file": {},
"encrypted_env": "<string>",
"user_config": "<string>",
"created_at": "<string>",
"trace_id": "<string>",
"operation_type": "<string>",
"triggered_by": {
"object_type": "user",
"id": "usr_0123abcd",
"username": "<string>",
"avatar_url": "<string>"
},
"cvm": {
"vm_uuid": "<string>",
"object_type": "cvm",
"app_id": "<string>",
"name": "<string>"
},
"workspace": {
"id": "wks_0123abcd",
"name": "<string>",
"object_type": "workspace",
"slug": "<string>",
"avatar_url": "<string>"
},
"oidc_provenance": {
"repository": "<string>",
"ref": "<string>",
"sha": "<string>",
"actor": "<string>",
"workflow_ref": "<string>",
"run_id": "<string>",
"event_name": "<string>"
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Get revision detail
Returns full revision data including compose file, encrypted env, and user config.
curl --request GET \
--url https://cloud-api.phala.com/api/v1/apps/{app_id}/revisions/{revision_id}import requests
url = "https://cloud-api.phala.com/api/v1/apps/{app_id}/revisions/{revision_id}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://cloud-api.phala.com/api/v1/apps/{app_id}/revisions/{revision_id}', 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://cloud-api.phala.com/api/v1/apps/{app_id}/revisions/{revision_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://cloud-api.phala.com/api/v1/apps/{app_id}/revisions/{revision_id}"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://cloud-api.phala.com/api/v1/apps/{app_id}/revisions/{revision_id}")
.asString();require 'uri'
require 'net/http'
url = URI("https://cloud-api.phala.com/api/v1/apps/{app_id}/revisions/{revision_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"revision_id": "<string>",
"app_id": "<string>",
"vm_uuid": "<string>",
"compose_hash": "<string>",
"compose_file": {},
"encrypted_env": "<string>",
"user_config": "<string>",
"created_at": "<string>",
"trace_id": "<string>",
"operation_type": "<string>",
"triggered_by": {
"object_type": "user",
"id": "usr_0123abcd",
"username": "<string>",
"avatar_url": "<string>"
},
"cvm": {
"vm_uuid": "<string>",
"object_type": "cvm",
"app_id": "<string>",
"name": "<string>"
},
"workspace": {
"id": "wks_0123abcd",
"name": "<string>",
"object_type": "workspace",
"slug": "<string>",
"avatar_url": "<string>"
},
"oidc_provenance": {
"repository": "<string>",
"ref": "<string>",
"sha": "<string>",
"actor": "<string>",
"workflow_ref": "<string>",
"run_id": "<string>",
"event_name": "<string>"
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Path Parameters
Hex app identifier
External AppRevisionId (prefix 'rev_'). Fully prefixed string required; bare payloads and raw integers are rejected.
"rev_0123abcd"
Query Parameters
Return compose_file as string instead of dict
Response
Revision detail with compose file
Full revision detail with configuration data.
Revision record identifier (hashid of snowflake_id)
Hex app identifier
CVM UUID
SHA-256 hash of compose file
Docker compose content (dict or raw string)
Hex-encoded encrypted environment variables
JSON user configuration string
Revision timestamp (ISO 8601)
Request trace ID for debugging
Operation: deploy, update, restart, etc.
User who triggered the operation
Show child attributes
Show child attributes
CVM reference
Show child attributes
Show child attributes
Workspace reference
Show child attributes
Show child attributes
GitHub Actions OIDC provenance when this deploy used OIDC
Show child attributes
Show child attributes
Was this page helpful?

