Redeploy a backend function

Changed on

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

Deploys the code you send as one of the app's backend functions and saves it as that function's source, the same way Save & Redeploy does in the app editor.

The function is deployed from the code in the request, not from the source already stored in the app. To redeploy a function unchanged, send its current source. The deploy runs even when the code is identical, which is how you recover a function whose deployment is missing or out of date. A name that no function has yet creates a new function.

The request waits for the deploy to finish, and fails with the compiler's diagnostics when the code doesn't build. An app runs one deploy at a time. If another deploy for the app is still running after a short wait, the call is rejected and is safe to retry.

Backend functions need a Builder plan or higher on the app's workspace. If the app has no backend functions yet, the first redeploy sets them up.

The deploy always lands on the app's main line, and is rejected while main is protected.

The published app keeps running the previous version of the function until you publish the app again. Automations and workflows run the redeployed version right away.

This is limited to 50 requests a minute per caller for each app. Some workspaces have a different limit.

The response is the app document as it stands after the change, the same shape Get app returns.

<Note>This endpoint accepts a personal API key belonging to a user with editor access to the app. A read-only key is refused, and workspace API keys are not accepted.</Note>

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

post/api/apps/{app_id}/coding/redeploy-function/{function_name}

Request

  • Base URL: https://app.base44.com
  • URL: https://app.base44.com/api/apps/{app_id}/coding/redeploy-function/{function_name}
  • Auth: HTTP bearer

Path parameters

function_namestring required

Name of the backend function, as a path under functions/. Send the bare name, the name with its file extension, or the name followed by /entry.ts. Nested functions have slashes in their name, and you send those as they are.

app_idstring required

ID of the app whose code to change.

Request body

codestring required

Full source of the function to deploy and save.

Example request

{
  "code": "Deno.serve(async (req) => {\n  return Response.json({ ok: true });\n});\n"
}

Response

The app after the deploy.

idstring

ID of the app.

created_datestring date-time

Time the app was created, as a UTC timestamp in ISO 8601 format.

updated_datestring date-time

Time the app document was last written, as a UTC timestamp in ISO 8601 format.

created_bystring nullable

Email of the user who created the app.

organization_idstring nullable

ID of the workspace the app belongs to.

app_typestring

Kind of app, set when it's created. One of user_app (a web app), user_agent (an AI agent), mobile_app (a native mobile app), user_game (a game), slide (a presentation), or imported_app (an app imported from an existing code repository). List apps returns it as stored, so an older agent app can report agent instead of user_agent, and some older apps don't include it. Get app always returns one of the values above.

namestring

Display name of the app.

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

logo_urlstring nullable

URL of the app's logo, or null if it has none. Set it with Set app logo or Generate app logo.

social_image_urlstring nullable

URL of the image shown when the app is shared on social platforms, or null if none was set, in which case the logo is shown instead. Set it with Set social image.

public_settings'private_with_login' | 'public_with_login' | 'public_without_login' | 'workspace_with_login'

Who can open the published app. Each value is described under Update app, which also changes it.

hide_entity_created_byboolean

Whether the app's entity records leave out the email of the user who created each one (created_by). Newer apps always leave the email out, whatever this is set to.

is_remixableboolean

Whether others can remix the app. While it's true, the published app also shows the Base44 badge if public_settings is public_with_login or public_without_login.

main_branch_protectedboolean

Whether the app's main branch is protected, so changes to main must go through a branch that's merged back. Always true for imported apps. Change it with Set main branch protection.

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

is_unpublishedboolean

Whether the app was taken offline with Unpublish app and hasn't been published again since. While it's true, the published URL is offline and last_deployed_at still shows the last publish.

last_deployed_atstring 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_urlstring 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_urlstring nullable

URL of a preview screenshot taken before publishing, distinct from screenshot_url, or null if none has been captured.

owner_idstring nullable

ID of the user who owns the app. It starts as the creator and changes when ownership is transferred.

dev_environment_enabledboolean

Whether test data is on, which gives the app a test database next to its live one.

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 PersonalAccessTokenAuth was added to the API

    • breaking

      the response's property type changed from no type to object for status

    • breaking

      the response's property type changed from no type to object for status

    • warning

      added the new private_with_login enum value to the response property for the response status

    • warning

      added the new public_with_login enum value to the response property for the response status

    • warning

      added the new public_without_login enum value to the response property for the response status

    • warning

      added the new workspace_with_login enum value to the response 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 #2 from the response property anyOf list for the response status

    • info

      removed subschema #2 from the response property anyOf list for the response status

    • info

      the response's property default value user_app was added for the status

    • info

      the response's property default value false was added for the status

    • info

      the response's property default value false was added for the status

    • info

      the response's property default value false was added for the status

    • info

      the response's property default value false was added for the status

    • info

      the response's property default value false was added for the status

    • info

      the response's property default value untitled was added for the status

    • info

      the response's property default value public_with_login was added for the status

    • info

      response property app_type list-of-types was narrowed by removing types null from media type application/json of response 200

    • info

      response property created_date list-of-types was narrowed by removing types null from media type application/json of response 200

    • info

      response property dev_environment_enabled list-of-types was narrowed by removing types null from media type application/json of response 200

    • info

      response property hide_entity_created_by list-of-types was narrowed by removing types null from media type application/json of response 200

    • info

      response property id list-of-types was narrowed by removing types null from media type application/json of response 200

    • info

      response property is_remixable list-of-types was narrowed by removing types null from media type application/json of response 200

    • info

      response property is_unpublished list-of-types was narrowed by removing types null from media type application/json of response 200

    • info

      response property main_branch_protected list-of-types was narrowed by removing types null from media type application/json of response 200

    • info

      response property name list-of-types was narrowed by removing types null from media type application/json of response 200

    • info

      response property public_settings list-of-types was narrowed by removing types null from media type application/json of response 200

    • info

      response property updated_date list-of-types was narrowed by removing types null from media type application/json of response 200

    • info

      added the required property / to the response with the status