curl --request POST \
--url https://app.base44.com/api/app-catalog-items/catalog/{item_id}/submit-update \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"metadata": {
"version": "1.1.0",
"changelog": "Adds a reports page."
}
}
'import requests
url = "https://app.base44.com/api/app-catalog-items/catalog/{item_id}/submit-update"
payload = { "metadata": {
"version": "1.1.0",
"changelog": "Adds a reports page."
} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({metadata: {version: '1.1.0', changelog: 'Adds a reports page.'}})
};
fetch('https://app.base44.com/api/app-catalog-items/catalog/{item_id}/submit-update', 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/app-catalog-items/catalog/{item_id}/submit-update",
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([
'metadata' => [
'version' => '1.1.0',
'changelog' => 'Adds a reports page.'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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/app-catalog-items/catalog/{item_id}/submit-update"
payload := strings.NewReader("{\n \"metadata\": {\n \"version\": \"1.1.0\",\n \"changelog\": \"Adds a reports page.\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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/app-catalog-items/catalog/{item_id}/submit-update")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"metadata\": {\n \"version\": \"1.1.0\",\n \"changelog\": \"Adds a reports page.\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/app-catalog-items/catalog/{item_id}/submit-update")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"metadata\": {\n \"version\": \"1.1.0\",\n \"changelog\": \"Adds a reports page.\"\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "68b2f0c1a4d9e7001c3b5a22",
"app_id": "6820f3a4e7b91d003c45a1f2",
"name": "CRM starter",
"status": "approved",
"visibility_scope": "workspace",
"pending_metadata": {
"version": "1.1.0"
},
"_update_info": {
"has_code_changes": true,
"has_metadata_changes": false,
"auto_approved": true
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Submit template listing update
Sends the app’s current state, and optionally new listing details, as an update to its approved template listing. It’s the Submit update button in the app’s template settings.
The update copies the app as it is in the editor, including changes you haven’t published. Publishing with Deploy an app doesn’t change what goes in.
What happens next depends on the listing:
- A workspace template updates right away.
- A public template goes to Base44 for review. The current version stays live until the update is approved. Submitting again replaces an update that’s still waiting, including its listing details.
Only an approved listing that isn’t archived can be updated. Get it from catalog_items in Check app delete impact.
You need to be an owner or admin of the app’s workspace. For a listing shared only within a workspace, you need to be an owner or admin of that workspace.
Submitting an update is limited to 10 requests a minute per caller.
curl --request POST \
--url https://app.base44.com/api/app-catalog-items/catalog/{item_id}/submit-update \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"metadata": {
"version": "1.1.0",
"changelog": "Adds a reports page."
}
}
'import requests
url = "https://app.base44.com/api/app-catalog-items/catalog/{item_id}/submit-update"
payload = { "metadata": {
"version": "1.1.0",
"changelog": "Adds a reports page."
} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({metadata: {version: '1.1.0', changelog: 'Adds a reports page.'}})
};
fetch('https://app.base44.com/api/app-catalog-items/catalog/{item_id}/submit-update', 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/app-catalog-items/catalog/{item_id}/submit-update",
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([
'metadata' => [
'version' => '1.1.0',
'changelog' => 'Adds a reports page.'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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/app-catalog-items/catalog/{item_id}/submit-update"
payload := strings.NewReader("{\n \"metadata\": {\n \"version\": \"1.1.0\",\n \"changelog\": \"Adds a reports page.\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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/app-catalog-items/catalog/{item_id}/submit-update")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"metadata\": {\n \"version\": \"1.1.0\",\n \"changelog\": \"Adds a reports page.\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/app-catalog-items/catalog/{item_id}/submit-update")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"metadata\": {\n \"version\": \"1.1.0\",\n \"changelog\": \"Adds a reports page.\"\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "68b2f0c1a4d9e7001c3b5a22",
"app_id": "6820f3a4e7b91d003c45a1f2",
"name": "CRM starter",
"status": "approved",
"visibility_scope": "workspace",
"pending_metadata": {
"version": "1.1.0"
},
"_update_info": {
"has_code_changes": true,
"has_metadata_changes": false,
"auto_approved": true
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Authorizations
Personal access token, sent as Authorization: Bearer <token>.
Path Parameters
ID of the template listing to update. Get it from catalog_items in Check app delete impact.
Body
Listing details to change with this update. Send only the fields you want to change, and only the fields documented here, as other keys aren't supported.
Show child attributes
Show child attributes
{
"version": "1.1.0",
"changelog": "Adds a reports page."
}
Response
The update was submitted.
The template listing after the update was submitted.
ID of the template listing.
"68b2f0c1a4d9e7001c3b5a22"
ID of the app the listing was made from.
"6820f3a4e7b91d003c45a1f2"
Name of the listing. For a public template, a new name waits in pending_metadata until the update is approved.
"CRM starter"
Review status of the listing. Stays approved, because the current version stays live.
"approved"
public for a listing in the Base44 template gallery, or workspace for one shared only within the app's workspace.
"workspace"
Listing details waiting for review, or null when none are. Always null for a workspace template, whose changes apply right away.
{ "version": "1.1.0" }
Whether the submission copied the app, changed listing details, and applied right away.
Show child attributes
Show child attributes
Was this page helpful?