> ## Documentation Index
> Fetch the complete documentation index at: https://developer.jtl-software.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Submit to the App Store

> Deploy your app, update your manifest, and get your app listed in the JTL App Store.

Once your app is built and tested locally, the next step is getting it listed in the [App Store](https://apps.jtl-cloud.com/) where merchants can discover and install it.

This page walks you through deploying your app, updating your manifest with production URLs, and requesting your listing.

## How the Submission Process Works

The App Store submission follows this process:

<Steps>
  <Step title="Deploy your app to a production environment" />

  <Step title="Update your manifest with production URLs" />

  <Step title="Register the app on the Partner Portal (if not already done)" />

  <Step title="Contact JTL to request your app be listed in the App Store" />

  <Step title="JTL reviews and publishes your app" />
</Steps>

Let's go through each step.

## 1. Deploy your App

Your app currently runs on `localhost` and merchants can't access that. You need to deploy it to a publicly accessible URL with HTTPS.

**What you need:**

* A hosting provider (Vercel, Railway, AWS, Hetzner, or any platform that runs Node.js)
* A domain or subdomain (e.g. `app.yourcompany.com`)
* HTTPS enabled (required because JTL loads your app in an iframe, and browsers block mixed content)

**What to deploy:**

* Your frontend (the pages that render inside the App Shell)
* Your backend / API routes (the endpoints that handle auth and business logic)

<Tip>
  If you built with fullstack framework like **Next.js**, platforms like [Vercel](https://vercel.com) or [Railway](https://railway.app) can deploy your app with minimal configuration.

  If you used the **template (Express + React)**, you'll need a platform that supports running both services, or deploy them separately behind a reverse proxy.
</Tip>

**Set your production environment variables:**

Wherever you deploy, make sure these environment variables are configured:

```dotenv theme={null}
CLIENT_ID=your-client-id
CLIENT_SECRET=your-client-secret
```

## 2. Update Your Manifest

Your manifest has two sections that both need attention before going live: the technical `manifest` section (URLs and capabilities) and the `listing` section (icons, descriptions, legal links). Update each one separately.

### Technical Configuration

The `manifest` section currently has `localhost` URLs from local development. Update every URL to point to your deployed app.

```json theme={null}
{
  "manifest": {
    "lifecycle": {
      "configurationUrl": "https://app.yourcompany.com/configure"
    },
    "capabilities": {
      "hub": {
        "appLauncher": {
          "redirectUrl": "https://app.yourcompany.com/erp"
        }
      },
      "erp": {
        "menuItems": [
          {
            "id": "my-app-menu",
            "name": "My JTL App",
            "url": "https://app.yourcompany.com/erp"
          }
        ]
      }
    }
  }
}
```

Every URL in the `manifest` section must:

* Use `https://` (not `http://`)
* Point to your production domain (not `localhost`)
* Be publicly accessible

### Presentation Content

In your `listing` section, replace any development placeholders with production content:

* **Icons**: replace placeholder URLs (e.g., `picsum.photos`) with your real app icons hosted at a public, stable URL. Provide both light and dark variants.
* **Name and description**: finalize copy in every locale you support (`name.{locale}.short`, `name.{locale}.full`, `description.{locale}.short`, `description.{locale}.full`).
* **Support URLs**: point `support.url.{locale}` and `support.documentation.{locale}` at real, working pages.
* **Legal URLs**: `legal.privacyPolicy`, `legal.termsOfUse`, `legal.gdpr.request`, and `legal.gdpr.delete` must all resolve to real, published pages. JTL requires these for compliance.

<Tip>
  See [App Shell & UI Integration](/guides/cloud-apps/app-shell-ui-integration#listing-section) for the full listing field reference.
</Tip>

## 3. Register your App (if not already done)

If you already registered your app on the [Partner Portal](https://partner.jtl-cloud.com/) during the quickstart, you have your client credentials and the app exists in JTL's system.

If you're registering for the first time with production URLs:

1. Open the [Partner Portal](https://partner.jtl-cloud.com/)
2. Click **+ Create** button
3. Paste your updated manifest (with production URLs) into the Manifest Editor
4. Click **Register app** button
5. **Copy your credentials immediately**, as they're shown only once

Update your production environment variables with the new credentials if they've changed.

## 4. Submit your Listing Request

With your app deployed, your manifest updated, and the app registered, you can submit a listing request to the JTL partner team by filling the form below:

<iframe src="https://forms.office.com/e/tGR3zjKTrY?embed=true" title="Contact form" height="720px" className="w-full rounded-xl" frameborder="0" marginwidth="0" marginheight="0" allowfullscreen webkitallowfullscreen mozallowfullscreen msallowfullscreen />

Prefer to open the form in a new tab?  [Submit your listing request directly](https://forms.office.com/pages/responsepage.aspx?id=C73w-5V9hUueKLpvoKvGl1evQ-Bq_5lFv2Ua0947AqNUQlRRRTJWT0dTMVAyWFo5S0g2RVBKVTFPUS4u\&route=shorturl)

To get your app ID, follow these steps:

1. Open the [Partner Portal](https://partner.jtl-cloud.com/) and navigate to the **Manage apps** section.
2. Click on the **ellipsis (...)** menu for your app and select **Edit app**.
   <img src="https://mintcdn.com/jtlsoftwaregmbh/A_YLqjk5dQ8YM4fE/images/get-app-id.png?fit=max&auto=format&n=A_YLqjk5dQ8YM4fE&q=85&s=376308c12632a46c7033b1f897c063d5" alt="Get App ID" width="1854" height="274" data-path="images/get-app-id.png" />
3. Copy the **App ID** from the URL.

`https://partner.jtl-cloud.com/{TenantSlug}/{PublisherId}/app-edit/{AppId}`

The App ID is the last segment of the URL.

## 5. JTL Reviews and Publishes

After you contact JTL, the team will:

1. Review your app and verify it's working at the production URL
2. Make your app visible in the App Store
3. Notify you once the listing is live

## Pre-submission Checklist

Before contacting JTL, make sure everything is in order:

| Check                                                                | Status |
| -------------------------------------------------------------------- | ------ |
| App is deployed and accessible via HTTPS                             | ⬜      |
| All manifest URLs point to production (no `localhost`)               | ⬜      |
| App loads correctly in JTL Hub from production URL                   | ⬜      |
| Setup flow completes successfully (session token verification works) | ⬜      |
| App renders correctly in the ERP Cloud                               | ⬜      |
| Support URL in manifest leads to a real page                         | ⬜      |
| Privacy policy and terms of use URLs are live                        | ⬜      |
| App icon URLs are publicly accessible                                | ⬜      |

## What to Expect After Listing

Once your app is live in the App Store:

* **Merchants can discover it** by browsing or searching the store
* **Installation triggers your setup flow**: the same flow you tested locally
* **You manage the app** through the Partner Portal (credentials, payouts, updates)
* **App updates** are deployed through your hosting provider; if the manifest changes, coordinate with JTL

## What's Next?

<CardGroup cols={2}>
  <Card title="What's Next?" icon="compass" href="/get-started/whats-next">
    Explore what to build next: deeper API integration, pane views,
    marketplace channels, and more.
  </Card>

  <Card title="App Shell & UI" icon="app-window" href="/guides/cloud-apps/app-shell-ui-integration">
    Add pane views, custom tabs, and deeper ERP integration to your app.
  </Card>
</CardGroup>
