curl --request POST \
--url https://app.base44.com/api/apps/{app_id}/coding/redeploy-function/{function_name} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"code": "Deno.serve(async (req) => {\n return Response.json({ ok: true });\n});\n"
}
'import requests
url = "https://app.base44.com/api/apps/{app_id}/coding/redeploy-function/{function_name}"
payload = { "code": "Deno.serve(async (req) => {
return Response.json({ ok: true });
});
" }
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({
code: 'Deno.serve(async (req) => {\n return Response.json({ ok: true });\n});\n'
})
};
fetch('https://app.base44.com/api/apps/{app_id}/coding/redeploy-function/{function_name}', 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}/coding/redeploy-function/{function_name}",
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([
'code' => 'Deno.serve(async (req) => {
return Response.json({ ok: true });
});
'
]),
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/apps/{app_id}/coding/redeploy-function/{function_name}"
payload := strings.NewReader("{\n \"code\": \"Deno.serve(async (req) => {\\n return Response.json({ ok: true });\\n});\\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/apps/{app_id}/coding/redeploy-function/{function_name}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"code\": \"Deno.serve(async (req) => {\\n return Response.json({ ok: true });\\n});\\n\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/coding/redeploy-function/{function_name}")
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 \"code\": \"Deno.serve(async (req) => {\\n return Response.json({ ok: true });\\n});\\n\"\n}"
response = http.request(request)
puts response.read_body{
"id": "6820f3a4e7b91d003c45a1f2",
"first_prompt_model_comparison": {
"id": "<string>",
"client_creation_id": "<string>",
"models": [
"<string>"
],
"status": "preparing"
},
"name": "My CRM",
"slug": "my-crm-3c45a1f2",
"user_description": "A CRM to track leads and deals",
"created_by": "developer@example.com",
"created_date": "2026-08-01T09:15:00",
"updated_date": "2026-08-02T14:30:00",
"status": {
"state": "ready",
"details": "Publishing app",
"request_id": "a1b2c3d4e5f67890abcdef12",
"last_updated_date": "2026-08-02T14:30:00Z",
"error_source": "build",
"paywall_context": {
"billing_organization_id": "67e0b12c4d8a3f005b21c9e4",
"user_id": "6706af53b9c1e2004a37d85f",
"evaluated_at": "2026-08-02T14:30:00Z"
}
},
"last_deployed_at": "2026-08-02T14:30:00",
"screenshot_url": "https://storage.base44.com/screenshots/6820f3a4e7b91d003c45a1f2.png",
"preview_screenshot_url": "https://storage.base44.com/previews/6820f3a4e7b91d003c45a1f2.png",
"main_branch_protected": false
}Redeploy a backend function
Deploys the code you send as one of the app’s backend functions and saves it as that function’s source, the same way Save & Redeploy does in the builder’s code editor.
The function is deployed from the code in the request, not from the source already stored in the app. To redeploy a function unchanged, send its current source. The deploy runs even when the code is identical, which is how you recover a function whose deployment is missing or out of date. A name that no function has yet creates a new function.
The request waits for the deploy to finish, and fails with the compiler’s diagnostics when the code doesn’t build. An app runs one deploy at a time. If another deploy for the app is still running after a short wait, the call is rejected and is safe to retry.
Backend functions need a Builder plan or higher on the app’s workspace. If the app has no backend functions yet, the first redeploy sets them up.
The deploy always lands on the app’s main line, and is rejected while main is protected.
This is limited to 50 requests a minute per caller for each app. Some workspaces have a different limit.
The response is the app document as it stands after the change, the same shape Get app returns.
curl --request POST \
--url https://app.base44.com/api/apps/{app_id}/coding/redeploy-function/{function_name} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"code": "Deno.serve(async (req) => {\n return Response.json({ ok: true });\n});\n"
}
'import requests
url = "https://app.base44.com/api/apps/{app_id}/coding/redeploy-function/{function_name}"
payload = { "code": "Deno.serve(async (req) => {
return Response.json({ ok: true });
});
" }
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({
code: 'Deno.serve(async (req) => {\n return Response.json({ ok: true });\n});\n'
})
};
fetch('https://app.base44.com/api/apps/{app_id}/coding/redeploy-function/{function_name}', 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}/coding/redeploy-function/{function_name}",
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([
'code' => 'Deno.serve(async (req) => {
return Response.json({ ok: true });
});
'
]),
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/apps/{app_id}/coding/redeploy-function/{function_name}"
payload := strings.NewReader("{\n \"code\": \"Deno.serve(async (req) => {\\n return Response.json({ ok: true });\\n});\\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/apps/{app_id}/coding/redeploy-function/{function_name}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"code\": \"Deno.serve(async (req) => {\\n return Response.json({ ok: true });\\n});\\n\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/coding/redeploy-function/{function_name}")
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 \"code\": \"Deno.serve(async (req) => {\\n return Response.json({ ok: true });\\n});\\n\"\n}"
response = http.request(request)
puts response.read_body{
"id": "6820f3a4e7b91d003c45a1f2",
"first_prompt_model_comparison": {
"id": "<string>",
"client_creation_id": "<string>",
"models": [
"<string>"
],
"status": "preparing"
},
"name": "My CRM",
"slug": "my-crm-3c45a1f2",
"user_description": "A CRM to track leads and deals",
"created_by": "developer@example.com",
"created_date": "2026-08-01T09:15:00",
"updated_date": "2026-08-02T14:30:00",
"status": {
"state": "ready",
"details": "Publishing app",
"request_id": "a1b2c3d4e5f67890abcdef12",
"last_updated_date": "2026-08-02T14:30:00Z",
"error_source": "build",
"paywall_context": {
"billing_organization_id": "67e0b12c4d8a3f005b21c9e4",
"user_id": "6706af53b9c1e2004a37d85f",
"evaluated_at": "2026-08-02T14:30:00Z"
}
},
"last_deployed_at": "2026-08-02T14:30:00",
"screenshot_url": "https://storage.base44.com/screenshots/6820f3a4e7b91d003c45a1f2.png",
"preview_screenshot_url": "https://storage.base44.com/previews/6820f3a4e7b91d003c45a1f2.png",
"main_branch_protected": false
}Authorizations
Personal access token, sent as Authorization: Bearer <token>.
Path Parameters
Name of the backend function, as a path under functions/. Send the bare name, the name with its file extension, or the name followed by /entry.ts. Nested functions have slashes in their name, and you send those as they are.
ID of the app whose code to change.
Body
Full source of the function to deploy and save.
"Deno.serve(async (req) => {\n return Response.json({ ok: true });\n});\n"
Response
The app after the deploy.
An app in a workspace, limited to the properties the caller requested.
ID of the app.
"6820f3a4e7b91d003c45a1f2"
Accepted first-prompt model comparison, including its durable comparison ID.
Show child attributes
Show child attributes
Display name of the app.
"My CRM"
URL slug for the app, auto generated from the name and app ID or set to a custom value, or null if the app has no slug yet. The published URL is built from it.
"my-crm-3c45a1f2"
Description of the app, or null if none was set. An app created without a name gets a generated description once a build turn changes it.
"A CRM to track leads and deals"
Email of the user who created the app.
"developer@example.com"
Time the app was created, as a UTC timestamp in ISO 8601 format.
"2026-08-01T09:15:00"
Time the app document was last written, as a UTC timestamp in ISO 8601 format.
"2026-08-02T14:30:00"
The app's current build status. Poll while a build is in progress to watch it finish. This tracks building, not publishing.
Show child attributes
Show child attributes
Time the app was last published, as a UTC timestamp in ISO 8601 format, or null if it has never been published.
"2026-08-02T14:30:00"
URL of a screenshot of the published app. Captured shortly after each publish, so it can briefly lag or be null right after publishing.
"https://storage.base44.com/screenshots/6820f3a4e7b91d003c45a1f2.png"
URL of a preview screenshot taken before publishing, distinct from screenshot_url, or null if none has been captured.
"https://storage.base44.com/previews/6820f3a4e7b91d003c45a1f2.png"
Whether the app's main branch is protected, so changes to main must go through a branch that's merged back. Change it with Set main branch protection.
false
Was this page helpful?