List Application Releases
curl --request GET \
--url https://api.vertracloud.app/v1/apps/{id}/releasesimport requests
url = "https://api.vertracloud.app/v1/apps/{id}/releases"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.vertracloud.app/v1/apps/{id}/releases', 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://api.vertracloud.app/v1/apps/{id}/releases",
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://api.vertracloud.app/v1/apps/{id}/releases"
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://api.vertracloud.app/v1/apps/{id}/releases")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.vertracloud.app/v1/apps/{id}/releases")
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{
"response": {
"data": [
{
"id": "3f1c2a9e-8b7d-4c21-9e0a-5d6f7a8b9c01",
"app_id": "7a52e0d4-19b3-4f8e-b6c2-0d9e4a1f5c73",
"source": "github",
"status": "active",
"message": "Fix checkout total",
"author": "octocat",
"github": {
"app_id": "7a52e0d4-19b3-4f8e-b6c2-0d9e4a1f5c73",
"commit_id": "a3f9c1e7b2d4568f0e1c9a7b3d5f2e8c4a6b1d90",
"message": "Fix checkout total",
"pusher": "octocat",
"branch": "main",
"created_at": "2026-10-10T14:22:05.000Z"
},
"files_changed": 3,
"rollback": {
"available": false,
"expires_at": null,
"from": null
},
"has_log": false,
"build_duration_ms": 48210,
"first_started_at": "2026-10-10T14:22:53.000Z",
"created_at": "2026-10-10T14:22:05.000Z"
}
],
"total_count": 1,
"page": 1,
"limit": 20,
"total_pages": 1,
"has_next_page": false,
"has_previous_page": false
}
}
Releases
List Application Releases
Lists the code versions of an application, newest first, with their source, status, message, author and rollback availability.
GET
/
v1
/
apps
/
{id}
/
releases
List Application Releases
curl --request GET \
--url https://api.vertracloud.app/v1/apps/{id}/releasesimport requests
url = "https://api.vertracloud.app/v1/apps/{id}/releases"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.vertracloud.app/v1/apps/{id}/releases', 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://api.vertracloud.app/v1/apps/{id}/releases",
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://api.vertracloud.app/v1/apps/{id}/releases"
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://api.vertracloud.app/v1/apps/{id}/releases")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.vertracloud.app/v1/apps/{id}/releases")
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{
"response": {
"data": [
{
"id": "3f1c2a9e-8b7d-4c21-9e0a-5d6f7a8b9c01",
"app_id": "7a52e0d4-19b3-4f8e-b6c2-0d9e4a1f5c73",
"source": "github",
"status": "active",
"message": "Fix checkout total",
"author": "octocat",
"github": {
"app_id": "7a52e0d4-19b3-4f8e-b6c2-0d9e4a1f5c73",
"commit_id": "a3f9c1e7b2d4568f0e1c9a7b3d5f2e8c4a6b1d90",
"message": "Fix checkout total",
"pusher": "octocat",
"branch": "main",
"created_at": "2026-10-10T14:22:05.000Z"
},
"files_changed": 3,
"rollback": {
"available": false,
"expires_at": null,
"from": null
},
"has_log": false,
"build_duration_ms": 48210,
"first_started_at": "2026-10-10T14:22:53.000Z",
"created_at": "2026-10-10T14:22:05.000Z"
}
],
"total_count": 1,
"page": 1,
"limit": 20,
"total_pages": 1,
"has_next_page": false,
"has_previous_page": false
}
}
Returns the release history of an application: one entry for each version of its code, newest first. Each entry says how the version was created, whether it is the one running now, and whether it can be restored.
Requires the
The history starts with the first code submission made after this feature launched. Releases created from a snapshot do not appear in it.
string
required
The ID of the application. If the application belongs to a workspace, pass its ID in the
workspace_id query parameter.integer
default:"1"
Page number, starting at
1.integer
default:"20"
Releases per page. Maximum
50; larger values return 400 VALIDATION_ERROR.string
If the application belongs to a workspace, the workspace’s ID.
apps:read scope when called with an API key.
Response
object
Paginated list, newest first.
Show Toggle object
Show Toggle object
APIApplicationRelease[]
Show Toggle object
Show Toggle object
string
The release ID. Pass it to the release log endpoint.
string
The ID of the application.
string
How the release was created:
github (push to the connected repository), cli (the Vertra CLI), upload (upload from the dashboard, an SDK or an extension), editor (edit made in the file manager), rollback (restores an earlier release) or env_change (environment variables changed, with no code change).string
Where the release is in its lifecycle:
deploying (being built and started), active (the version the application runs now; there is only one), superseded (replaced by a newer release), failed (the deploy did not start), rolled_back (replaced by a rollback) or expired (its code is no longer kept).string | null
The commit or upload message.
null when none was given, and always null for file manager edits.string
The GitHub user who pushed, or the name of the user who uploaded or edited the files.
object | null
The GitHub push that produced this release, with
app_id, commit_id, message, pusher, branch and created_at. null for any other source.integer
Number of files changed by the operation that produced this release.
object
Restore information for this release.
Show Toggle object
Show Toggle object
boolean
true when you can roll the application back to this release. It is false for the active release, for an expired release, and when your plan does not allow rolling back to it.string | null
When this release’s code stops being kept, counted from the moment it stopped being the active release.
null for the active release and when no code was kept.string | null
The release this one restores, when
source is rollback. null otherwise.boolean
true when a crash log was recorded for this release. The log can still expire; see the release log endpoint.integer | null
Time, in milliseconds, spent installing dependencies, building and starting this release.
null when it was not deployed with a build, for example files committed without a restart.string | null
When the application first started with this release’s code.
null while the code is in the application folder but the application has not been restarted with it yet: changes only take effect after a restart.string
ISO timestamp of when the release was created.
integer
Total releases in the history.
integer
Current page.
integer
Releases per page.
integer
Total pages.
boolean
boolean
{
"response": {
"data": [
{
"id": "3f1c2a9e-8b7d-4c21-9e0a-5d6f7a8b9c01",
"app_id": "7a52e0d4-19b3-4f8e-b6c2-0d9e4a1f5c73",
"source": "github",
"status": "active",
"message": "Fix checkout total",
"author": "octocat",
"github": {
"app_id": "7a52e0d4-19b3-4f8e-b6c2-0d9e4a1f5c73",
"commit_id": "a3f9c1e7b2d4568f0e1c9a7b3d5f2e8c4a6b1d90",
"message": "Fix checkout total",
"pusher": "octocat",
"branch": "main",
"created_at": "2026-10-10T14:22:05.000Z"
},
"files_changed": 3,
"rollback": {
"available": false,
"expires_at": null,
"from": null
},
"has_log": false,
"build_duration_ms": 48210,
"first_started_at": "2026-10-10T14:22:53.000Z",
"created_at": "2026-10-10T14:22:05.000Z"
}
],
"total_count": 1,
"page": 1,
"limit": 20,
"total_pages": 1,
"has_next_page": false,
"has_previous_page": false
}
}
Error Responses
string
Possible error codes:
UNAUTHORIZED: User is not authenticated or lacks permissions.APP_NOT_FOUND: The application does not exist, or it is not owned by this account or workspace (404).VALIDATION_ERROR: Thepageorlimitis invalid, for example alimitabove50(400).
string
A descriptive message providing additional details about the error.
{
"code": "APP_NOT_FOUND"
}
Entries in this list are kept permanently. The code of older releases, however, is kept only for a period that depends on your plan, and that period starts when a release stops being the active one, not when it was created. Once that code expires, the entry shows
status: "expired" and rollback.available: false.