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

# Remix an app

> <Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>

Creates a copy of an app in your workspace and makes you its owner. The app must be in the workspace your personal access token is scoped to, and the remix is created there too, so you need an editor-capable role in it. You can remix an app you own, collaborate on as an editor, or administer as a workspace admin, an approved template, or an app its owner marked as remixable and didn't make private. Remixing a paid template requires that you bought it first. Call [Get remix requirements](/api-reference/get-remix-requirements) first to see which secrets the app needs.

The remix is named after the app with ` (Copy)` appended. When the app is an approved template, the remix copies the approved version of the template, name included, rather than the app's current state, unless you set `with_chat_history`.

The body takes only the fields below. Fields that [Create app](/api-reference/create-app) accepts, such as `name`, `user_description`, `public_settings`, `custom_instructions`, and `prevent_iframe_embedding`, are ignored here. The remix copies `user_description`, `public_settings`, and `custom_instructions` from the app and starts with `prevent_iframe_embedding` set to `true`. Rename the remix or change its description afterwards with [Update app](/api-reference/update-app). The API has no endpoint for changing the other settings yet.

The response returns as soon as the new app exists. Setting up its files can continue in the background, so poll [Get app](/api-reference/get-app) until its `status.state` is no longer `processing`. A token limited to selected apps doesn't gain access to the new app, so use a token with access to all apps in the workspace if you need to reach the remix afterwards. This endpoint is limited to 10 requests per minute.

<Warning>The new app is created before `secret_values` are applied and before the code is copied. A request that fails at either step, for example on an invalid `secret_values` 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>



## OpenAPI

````yaml /developers/references/app-management/app-management-openapi.json post /api/apps/{app_id}/remix
openapi: 3.1.0
info:
  title: Base44 App Management API
  version: 1.0.0
servers:
  - url: https://app.base44.com
security:
  - PersonalAccessTokenAuth: []
paths:
  /api/apps/{app_id}/remix:
    post:
      summary: Remix an app
      description: >-
        <Info>This API is in beta. Endpoints, fields, and behavior may still
        change, so avoid depending on it in production.</Info>


        Creates a copy of an app in your workspace and makes you its owner. The
        app must be in the workspace your personal access token is scoped to,
        and the remix is created there too, so you need an editor-capable role
        in it. You can remix an app you own, collaborate on as an editor, or
        administer as a workspace admin, an approved template, or an app its
        owner marked as remixable and didn't make private. Remixing a paid
        template requires that you bought it first. Call [Get remix
        requirements](/api-reference/get-remix-requirements) first to see which
        secrets the app needs.


        The remix is named after the app with ` (Copy)` appended. When the app
        is an approved template, the remix copies the approved version of the
        template, name included, rather than the app's current state, unless you
        set `with_chat_history`.


        The body takes only the fields below. Fields that [Create
        app](/api-reference/create-app) accepts, such as `name`,
        `user_description`, `public_settings`, `custom_instructions`, and
        `prevent_iframe_embedding`, are ignored here. The remix copies
        `user_description`, `public_settings`, and `custom_instructions` from
        the app and starts with `prevent_iframe_embedding` set to `true`. Rename
        the remix or change its description afterwards with [Update
        app](/api-reference/update-app). The API has no endpoint for changing
        the other settings yet.


        The response returns as soon as the new app exists. Setting up its files
        can continue in the background, so poll [Get
        app](/api-reference/get-app) until its `status.state` is no longer
        `processing`. A token limited to selected apps doesn't gain access to
        the new app, so use a token with access to all apps in the workspace if
        you need to reach the remix afterwards. This endpoint is limited to 10
        requests per minute.


        <Warning>The new app is created before `secret_values` are applied and
        before the code is copied. A request that fails at either step, for
        example on an invalid `secret_values` 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>
      operationId: remix_app_api_api_apps__app_id__remix_post
      parameters:
        - name: app_id
          in: path
          required: true
          schema:
            type: string
            description: ID of the app to remix.
            title: App Id
          description: ID of the app to remix.
          example: 6820f3a4e7b91d003c45a1f2
        - name: Accept-Language
          in: header
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              Language to return generated text in, as a standard
              `Accept-Language` value. An unsupported language falls back to
              English.
            title: Accept-Language
          description: >-
            Language to return generated text in, as a standard
            `Accept-Language` value. An unsupported language falls back to
            English.
          example: de
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              title: RemixApp
              properties:
                with_chat_history:
                  type: boolean
                  default: false
                  description: >-
                    Whether to copy the app's chat history too. The remix then
                    copies the app's current state, even when the app is an
                    approved template. Only the app's owner, its editor-level
                    collaborators, and its workspace admins can set it.
                  example: false
                secret_values:
                  type: object
                  description: >-
                    Secrets to set on the remix, keyed by secret name. Set
                    `type` to `value` to provide the secret's value. Set `type`
                    to `clone` to copy the value of a secret on the source app,
                    named by `value` or, when you omit `value`, by the key
                    itself. You can clone a secret only from an app you own.
                    Except for `user_agent` apps, you can't clone one when the
                    remix copies an approved template version.
                  additionalProperties:
                    type: object
                    required:
                      - type
                    properties:
                      type:
                        type: string
                        enum:
                          - value
                          - clone
                        description: >-
                          `value` to set the secret to `value`, or `clone` to
                          copy a secret from the source app.
                        example: value
                      value:
                        type: string
                        description: >-
                          The secret's value when `type` is `value`. When `type`
                          is `clone`, the name of the source app's secret to
                          copy, which defaults to the key.
                        example: sk_test_example
                  example:
                    STRIPE_API_KEY:
                      type: value
                      value: sk_test_example
                    SENDGRID_API_KEY:
                      type: clone
            example:
              secret_values:
                STRIPE_API_KEY:
                  type: value
                  value: sk_test_example
      responses:
        '200':
          description: The new app.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AppSummary'
        '400':
          description: >-
            You can't remix the app, its type can't be remixed, you set
            `with_chat_history` without owning the app, collaborating on it as
            an editor, or administering its workspace, or a `secret_values`
            entry is malformed or clones a secret while the remix copies an
            approved template version of an app that isn't a `user_agent` app.
        '401':
          description: Missing or invalid credentials.
        '403':
          description: >-
            Your token is read-only, the app is a paid template you haven't
            bought, your role, plan, or account doesn't let you create another
            app of this type in the workspace, Superagent is disabled in the
            workspace for a `user_agent` app, or a `secret_values` entry clones
            a secret from an app you don't own.
        '404':
          description: >-
            The app doesn't exist, is outside the workspace or apps your token
            is scoped to, or a secret that a `secret_values` entry clones
            doesn't exist on it.
        '409':
          description: >-
            The app's connected GitHub repository can't be reached. Its owner
            has to reconnect GitHub.
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
        '429':
          description: Rate limit exceeded (10 requests per minute).
components:
  schemas:
    AppSummary:
      properties:
        id:
          anyOf:
            - type: string
            - type: 'null'
          title: Id
          description: ID of the app.
          example: 6820f3a4e7b91d003c45a1f2
        first_prompt_model_comparison:
          anyOf:
            - $ref: '#/components/schemas/FirstPromptModelComparisonPublicState'
            - type: 'null'
          description: >-
            Accepted first-prompt model comparison, including its durable
            comparison ID.
        name:
          anyOf:
            - type: string
            - type: 'null'
          title: Name
          description: Display name of the app.
          example: My CRM
        slug:
          anyOf:
            - type: string
            - type: 'null'
          title: Slug
          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
        user_description:
          anyOf:
            - type: string
            - type: 'null'
          title: User Description
          description: >-
            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.
          example: A CRM to track leads and deals
        created_by:
          anyOf:
            - type: string
            - type: 'null'
          title: Created By
          description: Email of the user who created the app.
          example: developer@example.com
        created_date:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Created Date
          description: Time the app was created, as a UTC timestamp in ISO 8601 format.
          example: '2026-08-01T09:15:00'
        updated_date:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Updated Date
          description: >-
            Time the app document was last written, as a UTC timestamp in ISO
            8601 format.
          example: '2026-08-02T14:30:00'
        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.
        last_deployed_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Last Deployed At
          description: >-
            Time the app was last published, as a UTC timestamp in ISO 8601
            format, or `null` if it has never been published.
          example: '2026-08-02T14:30:00'
        screenshot_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Screenshot Url
          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
        preview_screenshot_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Preview Screenshot Url
          description: >-
            URL of a preview screenshot taken before publishing, distinct from
            `screenshot_url`, or `null` if none has been captured.
          example: https://storage.base44.com/previews/6820f3a4e7b91d003c45a1f2.png
      type: object
      title: AppSummary
      description: An app in a workspace, limited to the properties the caller requested.
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    FirstPromptModelComparisonPublicState:
      properties:
        id:
          type: string
          title: Id
        client_creation_id:
          type: string
          title: Client Creation Id
        models:
          items:
            type: string
          type: array
          title: Models
        status:
          type: string
          enum:
            - preparing
            - running
            - failed
            - selected
            - cancelled
          title: Status
      type: object
      required:
        - id
        - client_creation_id
        - models
        - status
      title: FirstPromptModelComparisonPublicState
    AppStatusResponse:
      properties:
        state:
          type: string
          enum:
            - ready
            - processing
            - error
          title: 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.
          example: ready
        details:
          anyOf:
            - type: string
            - type: 'null'
          title: Details
          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
        request_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Request Id
          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
        last_updated_date:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Last Updated Date
          description: >-
            Time the status was last updated, as a UTC timestamp in ISO 8601
            format.
          example: '2026-08-02T14:30:00Z'
        error_source:
          anyOf:
            - type: string
            - type: 'null'
          title: Error Source
          description: >-
            Where the failure originated when `state` is `error`, or `null`
            otherwise. A value of `paywall` means the work was blocked because
            the app's workspace has no credits left.
          example: build
        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.
      type: object
      required:
        - state
      title: AppStatusResponse
      description: The app's current build status.
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
    PaywallStatusContextResponse:
      properties:
        billing_organization_id:
          type: string
          title: Billing Organization Id
          description: ID of the billing organization the paywall was evaluated against.
          example: 67e0b12c4d8a3f005b21c9e4
        user_id:
          type: string
          title: User Id
          description: ID of the user the paywall was evaluated for.
          example: 6706af53b9c1e2004a37d85f
        evaluated_at:
          type: string
          format: date-time
          title: Evaluated At
          description: >-
            Time the paywall condition was evaluated, as a UTC timestamp in ISO
            8601 format.
          example: '2026-08-02T14:30:00Z'
      type: object
      required:
        - billing_organization_id
        - user_id
        - evaluated_at
      title: PaywallStatusContextResponse
  securitySchemes:
    PersonalAccessTokenAuth:
      type: http
      scheme: bearer
      description: 'Personal access token, sent as `Authorization: Bearer <token>`.'

````