Create app
Changed on<Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>
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, which for a personal access token is the token's workspace. Set organization_id to create it in another workspace you belong to. A personal access token can't create apps outside its own workspace, so with one you can omit the field. This endpoint is limited to 5 requests per minute.
Set name, user_description, public_settings, custom_instructions, secrets, and prevent_iframe_embedding in the same request to configure the app before its first build turn runs. Without a name, the app starts as untitled, and once a build turn changes it Base44 names and describes it, replacing any user_description you sent.
<Warning>secrets are applied after the app is saved. A request that fails on a secrets entry still leaves the new app in your workspace, and it counts toward your plan's app limit. Delete it before you retry.</Warning>
<Warning>The response includes fields beyond the ones documented here. Don't rely on undocumented response fields, as they can change at any time. Send only the fields documented here. Other request fields are not supported and their behavior can change.</Warning>
Request
- Base URL: https://app.base44.com
- URL: https://app.base44.com/api/apps
- Auth: HTTP bearer
Request body
Example request
{
"initial_message": {
"content": "A CRM to track leads and deals",
"file_urls": [
"https://example.com/mockup.png"
]
},
"name": "My CRM",
"user_description": "A CRM to track leads and deals",
"public_settings": "public_with_login",
"custom_instructions": "Use a dark theme and keep every page mobile friendly.",
"secrets": {
"STRIPE_API_KEY": {
"type": "value",
"value": "sk_test_example"
}
},
"organization_id": "67e0b12c4d8a3f005b21c9e4"
}Response
Successful Response
Example response
{
"id": "6820f3a4e7b91d003c45a1f2",
"created_date": "2026-08-01T09:15:00",
"updated_date": "2026-08-02T14:30:00",
"created_by": "developer@example.com",
"organization_id": "67e0b12c4d8a3f005b21c9e4",
"app_type": "user_app",
"name": "My CRM",
"user_description": "A CRM to track leads and deals",
"logo_url": "https://storage.base44.com/6820f3a4e7b91d003c45a1f2/3f2504e0_logo.png",
"social_image_url": "https://storage.base44.com/6820f3a4e7b91d003c45a1f2/7c9e6679_social.png",
"public_settings": "public_with_login",
"auth_config": {
"enable_username_password": true,
"enable_google_login": true
},
"hide_entity_created_by": true,
"slug": "my-crm-3c45a1f2",
"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",
"owner_id": "6706af53b9c1e2004a37d85f",
"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"
}
}
}Changes
- info
the endpoint scheme security
PersonalAccessTokenAuthwas added to the API
- info
- breaking
the
response's property type changed from no type toobjectfor status - breaking
the
response's property type changed from no type toobjectfor status - warning
added the new
private_with_loginenum value to theresponse property for the response status - warning
added the new
public_with_loginenum value to theresponse property for the response status - warning
added the new
public_without_loginenum value to theresponse property for the response status - warning
added the new
workspace_with_loginenum value to theresponse property for the response status - info
added the optional property
/to the response with the status - info
added the optional property
/to the response with the status - info
added the optional property
/to the response with the status - info
added the optional property
/to the response with the status - info
added the optional property
/to the response with the status - info
added the optional property
/to the response with the status - info
added the optional property
/to the response with the status - info
added the optional property
/to the response with the status - info
added the optional property
/to the response with the status - info
added the optional property
/to the response with the status - info
removed
subschema #2from theresponse propertyanyOflist for the response status - info
removed
subschema #2from theresponse propertyanyOflist for the response status - info
the
response's property default valueuser_appwas added for the status - info
the
response's property default valuefalsewas added for the status - info
the
response's property default valuefalsewas added for the status - info
the
response's property default valuefalsewas added for the status - info
the
response's property default valuefalsewas added for the status - info
the
response's property default valuefalsewas added for the status - info
the
response's property default valueuntitledwas added for the status - info
the
response's property default valuepublic_with_loginwas added for the status - info
response property
app_typelist-of-types was narrowed by removing typesnullfrom media typeapplication/jsonof response200 - info
response property
created_datelist-of-types was narrowed by removing typesnullfrom media typeapplication/jsonof response200 - info
response property
dev_environment_enabledlist-of-types was narrowed by removing typesnullfrom media typeapplication/jsonof response200 - info
response property
hide_entity_created_bylist-of-types was narrowed by removing typesnullfrom media typeapplication/jsonof response200 - info
response property
idlist-of-types was narrowed by removing typesnullfrom media typeapplication/jsonof response200 - info
response property
is_remixablelist-of-types was narrowed by removing typesnullfrom media typeapplication/jsonof response200 - info
response property
is_unpublishedlist-of-types was narrowed by removing typesnullfrom media typeapplication/jsonof response200 - info
response property
main_branch_protectedlist-of-types was narrowed by removing typesnullfrom media typeapplication/jsonof response200 - info
response property
namelist-of-types was narrowed by removing typesnullfrom media typeapplication/jsonof response200 - info
response property
public_settingslist-of-types was narrowed by removing typesnullfrom media typeapplication/jsonof response200 - info
response property
updated_datelist-of-types was narrowed by removing typesnullfrom media typeapplication/jsonof response200 - info
added the required property
/to the response with the status
- breaking