curl --request POST \
--url https://app.base44.com/api/apps \
--header 'Content-Type: application/json' \
--header 'api_key: <api-key>' \
--data '
{
"initial_message": {
"content": "A CRM to track leads and deals"
}
}
'import requests
url = "https://app.base44.com/api/apps"
payload = { "initial_message": { "content": "A CRM to track leads and deals" } }
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({initial_message: {content: 'A CRM to track leads and deals'}})
};
fetch('https://app.base44.com/api/apps', 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",
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([
'initial_message' => [
'content' => 'A CRM to track leads and deals'
]
]),
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"
payload := strings.NewReader("{\n \"initial_message\": {\n \"content\": \"A CRM to track leads and deals\"\n }\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")
.header("api_key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"initial_message\": {\n \"content\": \"A CRM to track leads and deals\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps")
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 \"initial_message\": {\n \"content\": \"A CRM to track leads and deals\"\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"
}Create app
Creates a new app. Pass initial_message.content to build it from a prompt, or send an empty body ({}) to create an empty app. Add initial_message.file_urls to build from a screenshot or a mockup alongside the prompt.
Building from a prompt runs in the background and consumes credits. Poll Get app and watch its status to see when the build finishes. By default the app is created in your default workspace. Set organization_id to create it in another workspace you belong to. This endpoint is limited to 5 requests per minute.
curl --request POST \
--url https://app.base44.com/api/apps \
--header 'Content-Type: application/json' \
--header 'api_key: <api-key>' \
--data '
{
"initial_message": {
"content": "A CRM to track leads and deals"
}
}
'import requests
url = "https://app.base44.com/api/apps"
payload = { "initial_message": { "content": "A CRM to track leads and deals" } }
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({initial_message: {content: 'A CRM to track leads and deals'}})
};
fetch('https://app.base44.com/api/apps', 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",
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([
'initial_message' => [
'content' => 'A CRM to track leads and deals'
]
]),
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"
payload := strings.NewReader("{\n \"initial_message\": {\n \"content\": \"A CRM to track leads and deals\"\n }\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")
.header("api_key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"initial_message\": {\n \"content\": \"A CRM to track leads and deals\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps")
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 \"initial_message\": {\n \"content\": \"A CRM to track leads and deals\"\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"
}Authorizations
Personal API key.
Body
First prompt to build the app from. Omit to create an empty app.
Show child attributes
Show child attributes
Build the first prompt with two eligible models and choose one version.
Show child attributes
Show child attributes
ID of the workspace to create the app in. Omit to use your default workspace. You must have an editor-capable role (Editor or above) in the workspace. Viewers and guests cannot create apps. This is the same workspace ID that List apps accepts as workspace_id.
"67e0b12c4d8a3f005b21c9e4"
Response
Successful Response
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. On a newly created app this holds the original prompt text.
"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"
Was this page helpful?