---
title: "Submit template listing update"
method: POST
path: "/api/app-catalog-items/catalog/{item_id}/submit-update"
---

# Submit template listing update

`POST /api/app-catalog-items/catalog/{item_id}/submit-update`

## Request

- Base URL: `https://app.base44.com`
- URL: `https://app.base44.com/api/app-catalog-items/catalog/{item_id}/submit-update`
- Auth: HTTP bearer

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

Sends the app's current state, and optionally new listing details, as an update to its approved template listing. It's the **Submit update** button in the app's template settings.

The update copies the app as it is in the editor, including changes you haven't published. Publishing with [Deploy an app](/api-reference/deploy-an-app) doesn't change what goes in.

What happens next depends on the listing:

- A workspace template updates right away.
- A public template goes to Base44 for review. The current version stays live until the update is approved. Submitting again replaces an update that's still waiting, including its listing details.

Only an approved listing that isn't archived can be updated. An app that uses a custom connector can't be submitted, because a custom connector works only in the workspace that built it. Get it from `catalog_items` in [Check app delete impact](/api-reference/check-app-delete-impact).

Submitting an update is limited to 10 requests a minute per caller.

<Note>This endpoint accepts a personal API key. A read-only key is refused.</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.</Warning>

## Path parameters

- `item_id` string, required: ID of the template listing to update. Get it from `catalog_items` in [Check app delete impact](/api-reference/check-app-delete-impact).

## Request body

- object
  - `metadata` object: Listing details to change with this update. Send only the fields you want to change, and only the fields documented here, as other keys aren't supported.
    - `name` string: Name of the listing.
    - `description` string: Short description shown in the gallery.
    - `detailed_description` string: Full description of the template.
    - `screenshot_urls` string[]: Screenshot URLs, up to 20. Each must be the public link of an image you uploaded with [Upload app file](/api-reference/upload-app-file). Links hosted anywhere else are refused.
    - `categories` string[]: Gallery categories.
    - `version` string: Version label.
    - `changelog` string: What changed in this version.
    - `is_paid` boolean: Whether the template is sold. A workspace template can't be paid.
    - `price_usd` number: Price in USD for a paid template, from 0.99 to 1000 with at most two decimals.
    - `demo_video_url` string: Link to a demo video.
    - `support_email` string: Support contact.
    - `documentation_url` string: Link to documentation.

## Response `200`

The update was submitted.

- SubmittedTemplateListingUpdate: The template listing after the update was submitted.
  - `id` string, required: ID of the template listing.
  - `app_id` string, required: ID of the app the listing was made from.
  - `name` string, required: Name of the listing. For a public template, a new name waits in `pending_metadata` until the update is approved.
  - `status` string, required: Review status of the listing. Stays `approved`, because the current version stays live.
  - `visibility_scope` string, required: `public` for a listing in the Base44 template gallery, or `workspace` for one shared only within the app's workspace.
  - `pending_metadata` object, nullable, required: Listing details waiting for review, or `null` when none are. Always `null` for a workspace template, whose changes apply right away.
  - `_update_info` TemplateListingUpdateInfo, required: What the submission changed.
    - `has_code_changes` boolean, required: Always `true`, because every submission copies the app.
    - `has_metadata_changes` boolean, required: Whether `metadata` changed any listing details.
    - `auto_approved` boolean, nullable: `true` when the update was applied right away, which happens for a workspace template. Left out for a public template, whose update waits for review.

## Other responses

- `400`: The listing is archived or isn't approved, a `metadata` value is invalid, a workspace template was set to paid, new paid listings aren't allowed, or the app uses a custom connector (`template_uses_custom_connector`).
- `401`: Missing or invalid credentials.
- `403`: You aren't an owner or admin of the workspace the listing belongs to, you don't have access to the app it was made from, its workspace restricts public template publishing (`public_template_publishing_not_allowed`), you can't make paid listings in the workspace, or your personal access token is read-only.
- `404`: The listing doesn't exist, or the app it was made from is outside the workspace or apps your API key is scoped to.
- `422`: Validation Error
- `429`: Rate limit reached. Retry later.

## Changes

> 58 revisions in range; 1 not diffed.

- **2026-10-12** `5e139db2e643`: 1 info
  - the endpoint scheme security `PersonalAccessTokenAuth` was added to the API
- **2026-09-30** `cbaf216bfb03`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/adexad/apis/base44-app-management-api/changes/api/app-catalog-items/catalog/:item_id/submit-update/post.md)

---

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