Change app slug

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

Changes the app's slug, which sets its <slug>.base44.app address.

Send null to reset the slug to the one Base44 generates from the app's name and ID. Sending the current slug, in any capitalization, changes nothing.

<Warning>The old address stops working as soon as the slug changes, and nothing redirects it to the new one. Change the slug before you share the app's URL or point ads at it.</Warning>

An app listed on Launchpad can't change its slug while a voting round is live, because the slug is also the listing's public URL.

Changing the slug is limited to 30 requests an hour per caller. Some workspaces have a different limit.

<Note>This endpoint accepts a personal API key. Workspace API keys are not authorized for it.</Note>

patch/api/apps/{app_id}/metadata/slug

Path parameters

app_idstring required

ID of the app.

ID of the app.

Request body

slugstring nullable required

New slug, 3 to 50 characters of letters, numbers, and hyphens that starts and ends with a letter or number. It has to be unused by any other app and not a reserved name, and it's lowercased before it's saved. Send null to reset it to the slug Base44 generates from the app's name and ID.

Example request

{
  "slug": "nordwind-furniture"
}

Response

The app, with its new slug.

idstring nullable

ID of the app.

namestring nullable

Display name of the app.

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.

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.

created_bystring nullable

Email of the user who created the app.

created_datestring date-time nullable

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

updated_datestring date-time nullable

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

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.

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

organization_idstring nullable

ID of the workspace the app belongs to.

owner_idstring nullable

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

app_typestring nullable

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.

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

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

is_remixableboolean nullable

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.

hide_entity_created_byboolean nullable

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.

dev_environment_enabledboolean nullable

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

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.

is_unpublishedboolean nullable

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.

Example response

{
  "id": "6820f3a4e7b91d003c45a1f2",
  "name": "My CRM",
  "slug": "my-crm-3c45a1f2",
  "user_description": "A CRM to track leads and deals",
  "created_by": "developer@example.com",
  "created_date": "2026-08-01T09:15:00",
  "updated_date": "2026-08-02T14:30:00",
  "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"
    }
  },
  "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",
  "organization_id": "67e0b12c4d8a3f005b21c9e4",
  "owner_id": "6706af53b9c1e2004a37d85f",
  "app_type": "user_app",
  "public_settings": "public_with_login",
  "auth_config": {
    "enable_username_password": true,
    "enable_google_login": true
  },
  "hide_entity_created_by": true,
  "logo_url": "https://storage.base44.com/6820f3a4e7b91d003c45a1f2/3f2504e0_logo.png",
  "social_image_url": "https://storage.base44.com/6820f3a4e7b91d003c45a1f2/7c9e6679_social.png"
}

Changes

Changed in 4 of the 33 revisions of this API.113

    • ●

      removed the optional property from the response with the status

      response-optional-property-removed

    This revision also has 3 changes that name no endpoint, such as unreferenced schemas being removed. See the revision's changelog

    • ○

      added the optional property to the response with the status

      response-optional-property-added

    • ○

      added the optional property to the response with the status

      response-optional-property-added

    • ○

      added the optional property to the response with the status

      response-optional-property-added

    • ○

      added the optional property to the response with the status

      response-optional-property-added

    • ○

      added the optional property to the response with the status

      response-optional-property-added

    • ○

      added the optional property to the response with the status

      response-optional-property-added

    • ○

      added the optional property to the response with the status

      response-optional-property-added

    • ○

      added the optional property to the response with the status

      response-optional-property-added

    • ○

      added the optional property to the response with the status

      response-optional-property-added

    • ○

      added the optional property to the response with the status

      response-optional-property-added

    • ○

      added the optional property to the response with the status

      response-optional-property-added

    • ○

      added the optional property to the response with the status

      response-optional-property-added

    • ○

      endpoint added

      endpoint-added