curl --request GET \
--url https://app.base44.com/api/apps/{app_id}/app-checkpoints \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.base44.com/api/apps/{app_id}/app-checkpoints"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.base44.com/api/apps/{app_id}/app-checkpoints', 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://app.base44.com/api/apps/{app_id}/app-checkpoints",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://app.base44.com/api/apps/{app_id}/app-checkpoints"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.base44.com/api/apps/{app_id}/app-checkpoints")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/app-checkpoints")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body[
{
"id": "6886b8d390dc7e2f4a2c91b3",
"name": "Add contact form",
"changes": "Added a contact form to the home page",
"preview_status": "ready",
"build_error": {
"message": "Timed out waiting for another build of this commit to finish"
},
"created_by": "developer@example.com",
"created_date": "2026-08-01T09:15:00",
"last_deployed_at": "2026-08-02T14:30:00",
"git_commit_hash": "a1b2c3d4e5f67890abcdef1234567890abcdef12",
"preview_url": "https://preview.base44.app/6886b8d390dc7e2f4a2c91b3",
"is_github_sync": false
}
]List checkpoints
Returns the specified app’s checkpoints, newest first. A checkpoint is a saved version of the app, captured as you build.
To deploy a specific checkpoint, pass its id as the checkpoint_id to Deploy an app.
curl --request GET \
--url https://app.base44.com/api/apps/{app_id}/app-checkpoints \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.base44.com/api/apps/{app_id}/app-checkpoints"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.base44.com/api/apps/{app_id}/app-checkpoints', 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://app.base44.com/api/apps/{app_id}/app-checkpoints",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://app.base44.com/api/apps/{app_id}/app-checkpoints"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.base44.com/api/apps/{app_id}/app-checkpoints")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/app-checkpoints")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body[
{
"id": "6886b8d390dc7e2f4a2c91b3",
"name": "Add contact form",
"changes": "Added a contact form to the home page",
"preview_status": "ready",
"build_error": {
"message": "Timed out waiting for another build of this commit to finish"
},
"created_by": "developer@example.com",
"created_date": "2026-08-01T09:15:00",
"last_deployed_at": "2026-08-02T14:30:00",
"git_commit_hash": "a1b2c3d4e5f67890abcdef1234567890abcdef12",
"preview_url": "https://preview.base44.app/6886b8d390dc7e2f4a2c91b3",
"is_github_sync": false
}
]Authorizations
Personal access token, sent as Authorization: Bearer <token>.
Path Parameters
ID of the app.
Query Parameters
Maximum number of checkpoints to return, between 1 and 10000. Omit to return all of them.
Number of checkpoints to skip before the page starts, 0 or greater. Combine with limit to page through results.
Response
Successful Response
ID of the checkpoint. Pass it as checkpoint_id to Deploy an app to deploy this saved version.
"6886b8d390dc7e2f4a2c91b3"
Name of the checkpoint.
"Add contact form"
Summary of what changed in this checkpoint, or null if none was recorded.
"Added a contact form to the home page"
Build status of this checkpoint's preview. Either pending, building, ready, or failed, or null if no preview build was attempted. A failed build can be retried with Retry checkpoint build.
pending, building, ready, failed "ready"
Why the checkpoint's last preview build failed, or null if no failure was recorded. It's cleared when a build succeeds, so while a retry is building it can still describe the previous failure.
Show child attributes
Show child attributes
{
"message": "Timed out waiting for another build of this commit to finish"
}
Email of the user who created the checkpoint.
"developer@example.com"
Time the checkpoint was created, as a UTC timestamp in ISO 8601 format.
"2026-08-01T09:15:00"
Time this checkpoint was last deployed to production, as a UTC timestamp in ISO 8601 format, or null if it has never been deployed.
"2026-08-02T14:30:00"
Git commit hash of the code captured in this checkpoint, or null if it has no commit.
"a1b2c3d4e5f67890abcdef1234567890abcdef12"
URL to preview this checkpoint's build, or null if the checkpoint has no build.
"https://preview.base44.app/6886b8d390dc7e2f4a2c91b3"
Whether the checkpoint came from a GitHub sync (true) or an in-app change (false).
false
Was this page helpful?