> ## Documentation Index
> Fetch the complete documentation index at: https://docs.base44.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create app

> <Info>The App Management 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.

Building from a prompt runs in the background and consumes credits. Poll [Get app](/api-reference/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.

<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>



## OpenAPI

````yaml /developers/references/app-management/app-management-openapi.json post /api/apps
openapi: 3.1.0
info:
  title: Base44 App Management API
  version: 1.0.0
servers:
  - url: https://app.base44.com
security:
  - ApiKeyAuth: []
paths:
  /api/apps:
    post:
      summary: Create app
      description: >-
        <Info>The App Management 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.


        Building from a prompt runs in the background and consumes credits. Poll
        [Get app](/api-reference/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.


        <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>
      operationId: api_create_api_apps_post
      requestBody:
        content:
          application/json:
            example:
              initial_message:
                content: A CRM to track leads and deals
            schema:
              additionalProperties: true
              properties:
                initial_message:
                  description: >-
                    First prompt to build the app from. Omit to create an empty
                    app.
                  properties:
                    content:
                      description: Prompt describing the app to build.
                      example: A CRM to track leads and deals
                      type: string
                  type: object
                organization_id:
                  description: >-
                    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](/api-reference/list-apps) accepts as `workspace_id`.
                  example: 6820f3a4e7b91d003c45a1f2
                  type: string
              title: CreateApp
              type: object
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AppSummary'
          description: The created app.
        '400':
          description: The request body is invalid.
        '401':
          description: Missing or invalid credentials.
        '403':
          description: >-
            You can't create apps in this workspace, because you are not a
            member or your role is not editor-capable.
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
        '429':
          description: Rate limit exceeded (5 requests per minute).
components:
  schemas:
    AppSummary:
      properties:
        created_by:
          anyOf:
            - type: string
            - type: 'null'
          description: Email of the user who created the app.
          example: developer@example.com
          title: Created By
        created_date:
          anyOf:
            - format: date-time
              type: string
            - type: 'null'
          description: Time the app was created.
          example: '2026-08-01T09:15:00'
          title: Created Date
        id:
          anyOf:
            - type: string
            - type: 'null'
          description: ID of the app.
          example: 6820f3a4e7b91d003c45a1f2
          title: Id
        last_deployed_at:
          anyOf:
            - format: date-time
              type: string
            - type: 'null'
          description: >-
            Time the app was last published, or `null` if it has never been
            published.
          example: '2026-08-02T14:30:00'
          title: Last Deployed At
        name:
          anyOf:
            - type: string
            - type: 'null'
          description: Display name of the app.
          example: My CRM
          title: Name
        preview_screenshot_url:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            URL of a preview screenshot taken before publishing, distinct from
            screenshot_url, and `null` if none has been captured.
          example: https://storage.base44.com/previews/6820f3a4e7b91d003c45a1f2.png
          title: Preview Screenshot Url
        screenshot_url:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            URL of a screenshot of the published app. Captured shortly after
            each publish, so it can briefly lag or be `null` right after
            publishing.
          example: https://storage.base44.com/screenshots/6820f3a4e7b91d003c45a1f2.png
          title: Screenshot Url
        slug:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            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.
          example: my-crm-3c45a1f2
          title: Slug
        status:
          anyOf:
            - $ref: '#/components/schemas/AppStatusResponse'
            - type: 'null'
          description: >-
            The app's current build status. Poll while a build is in progress to
            watch it finish. This tracks building, not publishing.
        updated_date:
          anyOf:
            - format: date-time
              type: string
            - type: 'null'
          description: Time the app document was last written.
          example: '2026-08-02T14:30:00'
          title: Updated Date
        user_description:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            Description of the app, or `null` if none was set. On a newly
            created app this holds the original prompt text.
          example: A CRM to track leads and deals
          title: User Description
      title: AppSummary
      type: object
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          title: Detail
          type: array
      title: HTTPValidationError
      type: object
    AppStatusResponse:
      properties:
        details:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            Human readable note about the current state, such as what is being
            processed or why it failed, or `null` when there is nothing to
            report.
          example: Publishing app
          title: Details
        error_source:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            Where the failure originated when the state is error, or `null`
            otherwise.
          example: build
          title: Error Source
        last_updated_date:
          anyOf:
            - format: date-time
              type: string
            - type: 'null'
          description: Time the status was last updated.
          example: '2026-08-02T14:30:00'
          title: Last Updated Date
        paywall_context:
          anyOf:
            - $ref: '#/components/schemas/PaywallStatusContextResponse'
            - type: 'null'
          description: >-
            Present when the operation was blocked by a plan limit, describing
            what was evaluated, or `null` otherwise.
        request_id:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            ID of the request that last changed the status, or `null` if the
            status has never changed. Useful when reporting an issue.
          example: a1b2c3d4e5f67890abcdef12
          title: Request Id
        state:
          description: >-
            Where the app is in its build lifecycle. Ready means idle with no
            build in progress, processing means the app is being generated or
            modified, and error means the last build failed. This tracks
            building, not publishing.
          enum:
            - ready
            - processing
            - error
          example: ready
          title: State
          type: string
      required:
        - state
      title: AppStatusResponse
      type: object
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          title: Location
          type: array
        msg:
          title: Message
          type: string
        type:
          title: Error Type
          type: string
      required:
        - loc
        - msg
        - type
      title: ValidationError
      type: object
    PaywallStatusContextResponse:
      properties:
        billing_organization_id:
          description: ID of the billing organization the paywall was evaluated against.
          example: 6820f3a4e7b91d003c45a1f2
          title: Billing Organization Id
          type: string
        evaluated_at:
          description: Time the paywall condition was evaluated.
          example: '2026-08-02T14:30:00'
          format: date-time
          title: Evaluated At
          type: string
        user_id:
          description: ID of the user the paywall was evaluated for.
          example: 6820f3a4e7b91d003c45a1f3
          title: User Id
          type: string
      required:
        - billing_organization_id
        - user_id
        - evaluated_at
      title: PaywallStatusContextResponse
      type: object
  securitySchemes:
    ApiKeyAuth:
      description: Personal API key.
      in: header
      name: api_key
      type: apiKey

````