curl --request GET \
--url https://app.base44.com/api/apps/{app_id}/app-checkpoints \
--header 'api_key: <api-key>'import requests
url = "https://app.base44.com/api/apps/{app_id}/app-checkpoints"
headers = {"api_key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {api_key: '<api-key>'}};
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 => [
"api_key: <api-key>"
],
]);
$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("api_key", "<api-key>")
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("api_key", "<api-key>")
.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["api_key"] = '<api-key>'
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",
"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 'api_key: <api-key>'import requests
url = "https://app.base44.com/api/apps/{app_id}/app-checkpoints"
headers = {"api_key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {api_key: '<api-key>'}};
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 => [
"api_key: <api-key>"
],
]);
$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("api_key", "<api-key>")
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("api_key", "<api-key>")
.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["api_key"] = '<api-key>'
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",
"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 API key.
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.
pending, building, ready, failed "ready"
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?