curl --request POST \
--url https://app.base44.com/api/apps/{app_id}/sandbox-bridge/create_checkpoint \
--header 'Content-Type: application/json' \
--header 'api_key: <api-key>' \
--data '
{
"name": "Before refactoring the dashboard"
}
'import requests
url = "https://app.base44.com/api/apps/{app_id}/sandbox-bridge/create_checkpoint"
payload = { "name": "Before refactoring the dashboard" }
headers = {
"api_key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {api_key: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: 'Before refactoring the dashboard'})
};
fetch('https://app.base44.com/api/apps/{app_id}/sandbox-bridge/create_checkpoint', 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}/sandbox-bridge/create_checkpoint",
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([
'name' => 'Before refactoring the dashboard'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.base44.com/api/apps/{app_id}/sandbox-bridge/create_checkpoint"
payload := strings.NewReader("{\n \"name\": \"Before refactoring the dashboard\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("api_key", "<api-key>")
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://app.base44.com/api/apps/{app_id}/sandbox-bridge/create_checkpoint")
.header("api_key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Before refactoring the dashboard\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/sandbox-bridge/create_checkpoint")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["api_key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Before refactoring the dashboard\"\n}"
response = http.request(request)
puts response.read_body{
"checkpoint_id": "6886b8d390dc7e2f4a2c91b3",
"name": "Before refactoring the dashboard",
"git_commit_hash": "4f9c1a7e8b2d3c5f6a0b1e2d3c4f5a6b7c8d9e0f"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Create a sandbox checkpoint
Saves the app’s current state as a checkpoint you can return to.
Every sandbox-bridge endpoint runs against the app’s live sandbox, the same filesystem the Base44 builder edits, so a change here is visible in the builder immediately.
Take one before a batch of edits, so a bad change is one restore away. The checkpoint captures the sandbox as it stands, so commit any pending writes first by making them through this API rather than leaving them in flight.
Restore it with Restore checkpoint, and list what an app has with List checkpoints. Checkpoints created here show up alongside the ones the builder takes.
This endpoint is limited to 60 requests per minute per app, shared with the other sandbox-bridge endpoints that change files.
sandbox:write scope.extra_data.code alongside the human-readable message. Branch on the code rather than on the message text or the status.curl --request POST \
--url https://app.base44.com/api/apps/{app_id}/sandbox-bridge/create_checkpoint \
--header 'Content-Type: application/json' \
--header 'api_key: <api-key>' \
--data '
{
"name": "Before refactoring the dashboard"
}
'import requests
url = "https://app.base44.com/api/apps/{app_id}/sandbox-bridge/create_checkpoint"
payload = { "name": "Before refactoring the dashboard" }
headers = {
"api_key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {api_key: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: 'Before refactoring the dashboard'})
};
fetch('https://app.base44.com/api/apps/{app_id}/sandbox-bridge/create_checkpoint', 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}/sandbox-bridge/create_checkpoint",
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([
'name' => 'Before refactoring the dashboard'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.base44.com/api/apps/{app_id}/sandbox-bridge/create_checkpoint"
payload := strings.NewReader("{\n \"name\": \"Before refactoring the dashboard\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("api_key", "<api-key>")
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://app.base44.com/api/apps/{app_id}/sandbox-bridge/create_checkpoint")
.header("api_key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Before refactoring the dashboard\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/sandbox-bridge/create_checkpoint")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["api_key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Before refactoring the dashboard\"\n}"
response = http.request(request)
puts response.read_body{
"checkpoint_id": "6886b8d390dc7e2f4a2c91b3",
"name": "Before refactoring the dashboard",
"git_commit_hash": "4f9c1a7e8b2d3c5f6a0b1e2d3c4f5a6b7c8d9e0f"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Authorizations
Personal API key.
Path Parameters
ID of the app whose sandbox to operate on.
Body
Optional message/title for the checkpoint. Defaults to an auto-generated title.
200Response
The checkpoint that was created.
The checkpoint that was created.
ID of the checkpoint. Pass it as checkpoint_id to Restore checkpoint to come back to this state.
"6886b8d390dc7e2f4a2c91b3"
The checkpoint's title, either the name you sent or one Base44 generated.
"Before refactoring the dashboard"
The commit this checkpoint points at, or null when the app has no committed sandbox revision yet. A checkpoint without one still restores the app state Base44 captured.
"4f9c1a7e8b2d3c5f6a0b1e2d3c4f5a6b7c8d9e0f"
Was this page helpful?