---
title: "Remix an app"
method: POST
path: "/api/apps/{app_id}/remix"
---

# Remix an app

`POST /api/apps/{app_id}/remix`

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

## Path parameters

- `app_id` string, required — ID of the app to remix.

## Headers

- `Accept-Language` string, nullable — Language to return generated text in, as a standard `Accept-Language` value. An unsupported language falls back to English.

## Request body

- object
  - `with_chat_history` boolean — 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.
  - `secret_values` object — 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.

## Response `200`

The new app.

- AppSummary — An app in a workspace, limited to the properties the caller requested.
  - `id` string, nullable — ID of the app.
  - `first_prompt_model_comparison` FirstPromptModelComparisonPublicState
    - `id` string, required
    - `client_creation_id` string, required
    - `models` string[], required
    - `status` 'preparing' | 'running' | 'failed' | 'selected' | 'cancelled', required
  - `name` string, nullable — Display name of the app.
  - `slug` string, nullable — 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.
  - `user_description` string, nullable — 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.
  - `created_by` string, nullable — Email of the user who created the app.
  - `created_date` string, date-time, nullable — Time the app was created, as a UTC timestamp in ISO 8601 format.
  - `updated_date` string, date-time, nullable — Time the app document was last written, as a UTC timestamp in ISO 8601 format.
  - `status` AppStatusResponse — The app's current build status.
    - `state` 'ready' | 'processing' | 'error', required — 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.
    - `details` string, nullable — 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.
    - `request_id` string, nullable — ID of the request that last changed the status, or `null` if the status has never changed. Useful when reporting an issue.
    - `last_updated_date` string, date-time, nullable — Time the status was last updated, as a UTC timestamp in ISO 8601 format.
    - `error_source` string, nullable — 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.
    - `paywall_context` PaywallStatusContextResponse
      - `billing_organization_id` string, required — ID of the billing organization the paywall was evaluated against.
      - `user_id` string, required — ID of the user the paywall was evaluated for.
      - `evaluated_at` string, date-time, required — Time the paywall condition was evaluated, as a UTC timestamp in ISO 8601 format.
  - `last_deployed_at` string, date-time, nullable — Time the app was last published, as a UTC timestamp in ISO 8601 format, or `null` if it has never been published.
  - `screenshot_url` string, nullable — URL of a screenshot of the published app. Captured shortly after each publish, so it can briefly lag or be `null` right after publishing.
  - `preview_screenshot_url` string, nullable — URL of a preview screenshot taken before publishing, distinct from `screenshot_url`, or `null` if none has been captured.
  - `main_branch_protected` boolean, nullable — 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](/api-reference/set-main-branch-protection).

## Other responses

- `400` — 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` — Missing or invalid credentials.
- `403` — 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` — 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` — The app's connected GitHub repository can't be reached. Its owner has to reconnect GitHub.
- `422` — Validation Error
- `429` — Rate limit exceeded (10 requests per minute).

## Changes

- **2026-09-27** `5e69adeb8667` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/base44/apis/base44-app-management-api/changes/api/apps/:app_id/remix/post.md)

---

[API](https://skmtc.dev/base44/apis/base44-app-management-api.md) · [All operations](https://skmtc.dev/base44/apis/base44-app-management-api/llms.txt) · [OpenAPI document](https://skmtc.dev/base44/apis/base44-app-management-api/revisions/5e69adeb8667?raw)
