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

---
id: 5088750c-b910-480b-8f23-51b6b6189255
---

# Legacy public apps

> Learn how to maintain and install an existing legacy public app in HubSpot.

export const PublicAppCreationSunsetBanner = () => <Danger>
        <p>As of June 23, 2026, legacy public apps can no longer be created. Existing legacy public apps will continue to be supported, but don't have access to the latest app features. Learn more about this sunset on the <a href="https://developers.hubspot.com/changelog/legacy-public-app-creation-sunset">HubSpot Developer Changelog</a>.</p>
        <p>To get started building apps on HubSpot's developer platform, learn how to <a href="/apps/developer-platform/build-apps/migrate-an-app/migrate-to-the-latest-platform-version#migrate-a-legacy-public-app-non-project-based">migrate an existing legacy public app</a> or <a href="/apps/developer-platform/build-apps/create-an-app">create a new app</a>.</p>

    </Danger>;

<PublicAppCreationSunsetBanner />

In HubSpot, a legacy public app is a type of integration that can be installed on customer accounts or listed on the HubSpot Marketplace. It requires authentication via [OAuth](/apps/legacy-apps/authentication/working-with-oauth). Once a user [installs](#install-an-app) your app on their HubSpot account, you'll be able to make API calls to that account using an [OAuth access token](/api-reference/legacy/authentication/oauth-tokens/v1/guide). Your app will also appear in the account's *Connected Apps* settings.

Connected apps are also able to take advantage of [subscribing to changes using webhooks](/api-reference/latest/webhooks) and creating custom [timeline events](/api-reference/legacy/crm/extensions/timeline/guide).

<Tip>
  You can leverage the same features of legacy public apps by instead building an app on the [latest version](/apps/developer-platform/overview) of the developer platform, which still provides OAuth authentication, and can be distributed to a set of allowlisted accounts or via the HubSpot marketplace. Learn more about how to [create an app](/apps/developer-platform/build-apps/create-an-app).
</Tip>

## Manage legacy public apps in HubSpot

To manage existing legacy public apps in HubSpot:

* In your HubSpot account, navigate to **Development**.
* In the left sidebar menu, click **Legacy apps**.

<Frame>
  <img width="450" src="https://www.hubspot.com/hubfs/Knowledge_Base_2023-24-25/legacy-apps/updated-navigation-to-legacy-apps.png" alt="Navigate to legacy apps in new developer overview" />
</Frame>

* In the app listing table, click the **name** of the app.

From the app details page, you can manage app settings such as:

* [App information](#app-information)
* [Authentication settings](#authentication-settings)
* [Redirect URLs](#redirect-urls)
* [Scopes](#scopes)
* [Domain verification](#domain-verification)

### App information

After [navigating to your app in HubSpot](#manage-legacy-public-apps-in-hubspot), use the *App Info* tab to manage app details such as:

* **Public app name:** the name that appears wherever your app displays in HubSpot. This includes the installation page and the *Powered by* footer for [CRM cards](/api-reference/legacy/crm/extensions/crm-cards/guide) and [timeline events](/api-reference/legacy/crm/extensions/timeline/guide).
* **App logo:** the logo displayed next to your app in HubSpot tools and the App Marketplace.
* **Description:** the app's description that displays in HubSpot tools and the App Marketplace.

To delete the app, scroll to the bottom of the *Basic info* page, then click **Delete**.

<Frame>
  <img src="https://developers.hubspot.com/hubfs/Knowledge_Base_2023-24-25/legacy-apps/delete-legacy-public-app.png" alt="Delete an app by clicking the delete button in the app's Basic info page" />
</Frame>

### Authentication settings

After [navigating to your app in HubSpot](#manage-legacy-public-apps-in-hubspot), click the **Auth** tab to access your app's client credentials and manage its authentication settings, such as redirect URL and scopes.

#### Redirect URLs

In the *Redirect URLs* section, you can update the URL that users are redirected to after installing your app.

* To update an existing redirect URL, click the **URL field** and modify the value, then click **Save changes**.
* To add a redirect URL, click **Add redirect URL**, then enter the value into the field and click **Save changes**. You can add multiple redirect URLs, and can use a `http://localhost` address for local development as you build out and test your app.
* If you have multiple redirect URLs, click the **delete icon** next to the URL you want to delete, then click **Save changes**.

<Frame>
  <img src="https://developers.hubspot.com/hubfs/Knowledge_Base_2023-24-25/legacy-apps/redirect-url-legacy-public-app.png" alt="OAuth redirect URL settings in HubSpot" />
</Frame>

#### Scopes

In the *Scopes* section, you can remove scopes, modify existing scopes, or add new scopes:

* To delete a scope from the app, click **Delete** next to the scope.
* To modify a scope's [type](#scope-types), click the **dropdown menu** next to an existing scope and select a **type**.
* To add new scopes to the app:
  * Click **Add new scope**.
  * In the right panel, use the **search bar** to search for a scope, then select the **checkbox** next to any scope you want the user to authorize. Click the **dropdown menu** next to the scope and select a **scope type**.
  * Click **Update**.

<Frame>
  <img width="500" src="https://developers.hubspot.com/hubfs/Knowledge_Base_2023-24-25/legacy-apps/update-legacy-public-app-scopes.png" alt="Legacy public app scope management settings in HubSpot" />
</Frame>

#### Scope types

There are three different scope types available to configure. You must specify the scopes your app will require for installation, but you can also specify two other scope types: conditionally required scopes and optional scopes.

* **Required scopes:** scopes that must be authorized by the user <u>and</u> must be present in the `scope` query parameter in your app's install URL for successful installation.
* **Conditionally required scopes:** scopes that must be authorized by the user only if they're present in the `scope` query parameter in your app's install URL for successful installation.
  * This scope type allows you to be flexible and provide a separate install URL for tiered features or scopes that are only required when users enable certain features in your app. For example, you could offer two install URLs to your users: one install URL could include the conditionally required scope in the `scope` query parameter for users with access to a feature, while another install URL omits that scope in the `scope` query parameter for users without access.
  * If a conditionally required scope is present in your app install URL and a user without access to the associated feature attempts to install your app using that URL, the installation will fail.
* **Optional scopes:** scopes that are <u>not</u> required to successfully install your app. These scopes are specified in the `optional_scope` query parameter in your app's install URL. For example, if you want your app to be able to fetch [custom object](/api-reference/latest/crm/objects/custom-objects/guide) data (which is only available to *Enterprise* HubSpot accounts), you could add the `crm.objects.custom.read` scope as an optional scope. Then, if an account has access to the custom objects, the scope will be authorized. Otherwise, they'll still be able to install the app without the custom objects scope.

<a id="add-a-verified-domain" />

### Domain verification

When HubSpot users install an app, they consent to give the app's developer access to their account data. The developer's identity and reputation each play an important role in a user's decision to continue with the install. To ensure full user consent when installing an app, HubSpot will display a message on the app install screen to indicate the app's level of verification and HubSpot Marketplace listing:

* When an app doesn't have a verified domain, HubSpot will display a banner on the install screen that says the app has not been verified.

<Frame>
  <img src="https://www.hubspot.com/hubfs/Knowledge_Base_2023/not-verified.png" alt="not-verified" />
</Frame>

* When an app has a verified domain but is not [listed on the HubSpot Marketplace](/apps/developer-platform/list-apps/listing-your-app/listing-your-app), HubSpot will display the verified domain along with a banner on the install screen that says the app has not been reviewed or approved by HubSpot.

<Frame>
  <img src="https://www.hubspot.com/hubfs/Knowledge_Base_2023/verified-not-listed.png" alt="verified-not-listed" />
</Frame>

* When an app has been listed on the marketplace, passing HubSpot's app review process, HubSpot will not display either of the above banners. You're not required to verify the domain if your app has been listed on the HubSpot Marketplace.

<Frame>
  <img src="https://www.hubspot.com/hubfs/Knowledge_Base_2023/verified-and-listed.png" alt="verified-and-listed" />
</Frame>

#### Add a verified domain

To add a verified domain to the app, you'll need to first add the domain to the app's settings, then add a TXT record to the domain's DNS settings:

* In your HubSpot account, navigate to **Development**.
* In the left sidebar menu, click **Legacy apps**.
* In the app listing table, click the **name** of the app.
* In the left sidebar, navigate to **Contact & support**.
* In the *Company domain* field, enter your domain, then click **Save**. A message will appear below the *Company domain* stating that the domain has not yet been verified.
* Click **Verify it now** to begin the verification process.

<Frame>
  <img src="https://www.hubspot.com/hubfs/Knowledge_Base_2023/domain-verification-for-app.png" alt="domain-verification-for-app" />
</Frame>

* In the right panel, confirm that the domain has been entered correctly, then click **Next**.
* Copy the required TXT record value by clicking **Copy** in the *Value* column.

<Frame>
  <img src="https://www.hubspot.com/hubfs/Knowledge_Base_2023/verify-app-domain-copy-value.png" alt="verify-app-domain-copy-value" />
</Frame>

* In your DNS provider, create a TXT record with the copied value. Below are instructions for some common DNS providers:
  * [GoDaddy](https://www.godaddy.com/help/add-a-txt-record-19232)
  * [BlueHost](https://www.bluehost.com/help/article/dns-management-add-edit-or-delete-dns-entries#add)
  * [Namecheap](https://www.namecheap.com/support/knowledgebase/article.aspx/317/2237)
  * [Cloudflare](https://developers.cloudflare.com/dns/manage-dns-records/how-to/create-dns-records/#h_60566325041543261564371)
  * [Hover](https://support.hover.com/support/solutions/articles/201000064728)
  * [Name](https://www.name.com/support/articles/115004972547-Adding-a-TXT-Record)
  * [United Domains](https://help.uniteddomains.com/hc/en-us/articles/115000887125-How-to-set-up-a-TXT-record-on-a-domain-name)
* After updating your DNS settings, navigate back to HubSpot, then click **Next** in the right panel. DNS records can take up to 48 hours to update, so HubSpot might not recognize the change immediately. You can get back to this screen any time by selecting **Verify it now** again from the *Company info* settings page.
* Once verified, you'll see a success status indicator under the *Company domain* field.

<Frame>
  <img src="https://f.hubspotusercontent00.net/hubfs/53/Domain%20verified__export.png" alt="Domain verified__export" />
</Frame>

<a id="additional-notes" />

<Info>
  * To ensure continued ownership of the domain, HubSpot will continue to verify that the TXT record is present on a regular basis. The install warning will return if the TXT record is removed or modified.
  * Currently, you can only have one verified domain per account. All apps in an account share the verified domain. The domain on the install page will link to your root domain.
  * If you delete your verified domain, all the apps you've built in the account will display the install warning again. You can verify another domain, but the process will take a couple hours.
</Info>

## Install an app

<Warning>
  **Please note:**

  Before installing your app, keep in mind the following:

  * An app won't appear on an account's *Connected Apps* page until the initial access and refresh tokens are created.
  * Only users with access to an app's required or conditionally required scopes can install an app.
</Warning>

App installation can be broken down into two steps: authorization and token generation.

### Authorize your app with a customer account

* To authorize your app with a HubSpot account, you'll need to create an authorization URL. Do this by getting the client ID for your app and [initiating the OAuth process](/apps/legacy-apps/authentication/working-with-oauth).
* Once your URL is ready, open it in your browser to see a list of all your HubSpot accounts. This is also what users will see once you begin directing them to this URL.
* Select the **account** where you want to install your app.

<Frame>
  <img width="400" src="https://www.hubspot.com/hubfs/Knowledge_Base_2023-24-25/developer/account-selection-page-legacy-public-app.png" alt="Select account for legacy public app installation" />
</Frame>

* After choosing an account, you'll be presented with a list of scopes based on the `&scope=` and `&optional_scope=` parameters you set for the authorization URL.

<Warning>
  **Please note:**

  If you include an `optional_scope` and the selected account doesn't have access to it (such as the content scope for a CRM-only account), it will not be listed.
</Warning>

* If your app has not yet been verified by the HubSpot Ecosystem Quality team, a warning banner will appear to alert the user that the app is unverified:
  * Carefully review all scopes being requested by the app to confirm they match what you expect.
  * Click **Connect app**.
  * In the dialog box, double-check <u>all</u> details of the app to confirm that the unverified app matches what you expect. Then type **I accept the risk**, and click **Connect** to authorize the app.

<Frame>
  <img width="300" src="https://www.hubspot.com/hubfs/Knowledge_Base_2023-24-25/developer/connect-unverified-app-dialog-box-confirmation.png" alt="Install unverified app confirmation dialog box " />
</Frame>

* After granting access, you'll be redirected based on the `&redirect_uri=` parameter in the original authorization URL, and a `?code=` parameter will be appended to the URL. Use that code in the next step to generate an access token.

### Generate the initial OAuth tokens

To generate your refresh and initial access tokens, you'll need the code from the `?code=` parameter of the authorization URL, `redirect_url`, client ID, and client secret. Learn more in the [Working with OAuth guide](/apps/legacy-apps/authentication/working-with-oauth).

Once you've authorized your app and generated the initial tokens, installation is complete. It'll be listed on your [Connected Apps](https://app.hubspot.com/login?loginRedirectUrl=https%3A%2F%2Fapp.hubspot.com%2Fshortlink%2Fintegrations-beta) page, and you'll start getting [webhook](/api-reference/latest/webhooks) and [CRM Cards](/api-reference/latest/crm/extensions/crm-cards/guide) fetch requests.

<Frame>
  <img src="https://cdn2.hubspot.net/hubfs/428357/connected_apps-1.webp" alt="connected_apps-1" />
</Frame>

## Monitor app behavior

HubSpot logs all requests made to or from a connected app, including incoming requests using an [OAuth access token](/api-reference/legacy/authentication/oauth-tokens/v1/guide) or outgoing requests for webhooks or CRM cards.

To view an app's request log:

* In your HubSpot account, navigate to **Development**.
* In the left sidebar menu, click **Legacy apps**.
* In the app listing table, click the **name** of the app.
* In the left sidebar menu, navigate to **Monitoring**.

<Frame>
  <img width="350" src="https://www.hubspot.com/hubfs/Knowledge_Base_2023-24-25/legacy-apps/in-app-app-monitoring-tab.png" alt="The Monitoring tab in the left sidebar menu of the legacy public app management page" />
</Frame>

* Use the **tabs** to view different types of requests being made to or from the app. While viewing these logs, you can click an individual request to view more information about it, including:
  * for <u>successful</u> requests, the request method, path, and time of request.
  * for <u>unsuccessful</u> requests, additional error information such as response headers and body.

<Frame>
  <img src="https://developers.hubspot.com/hubfs/Knowledge_Base_2023-24-25/legacy-apps/public-app-timeline-event-request-error-detail.png" alt="Request error details on the app monitoring page in HubSpot" />
</Frame>

Below, learn more about each tab of the *Monitoring* page.

* **API calls:** the *API calls* tab shows all requests made to your app using an OAuth access token. It can be filtered by HTTP method, response code, timeframe, or request URL.
* **Webhooks:** the *Webhooks* tab shows HubSpot requests for any of your app's [webhook subscriptions](/api-reference/latest/webhooks). Filter by response (including timeouts and connection failures), status (success, will retry, or failure), subscription type, time frame, attempt, batch, event, or account ID.

<Warning>
  **Please note:**

  The attempt ID is a combination of the `subscriptionId`, `eventId`, and `attemptNumber` from a specific request.
</Warning>

* **CRM extensions:** the *CRM extensions* tab shows requests for your app's [CRM cards](/api-reference/latest/crm/extensions/crm-cards/guide). Filter by extension object type, CRM object type (contact, company, ticket, or deal), error or warning type, time frame, request ID, or CRM record ID (i.e. a specific contact ID).
* **App settings:** the *App settings* tab enables you to configure the [settings page](/apps/legacy-apps/public-apps/create-an-app-settings-page) that comes with your app.

On each tab, if any associated events occurred in the last 30 days (e.g., a webhook trigger occurred or an API call was made), you can click **Export logs** to export the associated event data to a CSV:

* In the dialog box, configure how many days' worth of data to export (up to 30 days).
* Click **Export**. An email notification will be sent to the email address associated with your user in your HubSpot settings.

## Find an app's ID

* In your HubSpot account, navigate to **Development**.
* In the left sidebar menu, click **Legacy apps**.

<Frame>
  <img width="450" src="https://www.hubspot.com/hubfs/Knowledge_Base_2023-24-25/legacy-apps/updated-navigation-to-legacy-apps.png" alt="Navigate to legacy apps in new developer overview" />
</Frame>

* In the app listing table, click the **name** of the app.

You can then find the app ID in two places:

* In the browser's address bar, view the ID at the end of the URL.

<Frame>
  <img src="https://www.hubspot.com/hubfs/Knowledge_Base_2023-24-25/legacy-apps/app-id-in-url.png" alt="Browser URL bar with the app ID at the end of the URL" />
</Frame>

* Click the *Auth* tab, then view the *App ID*.

<Frame>
  <img src="https://www.hubspot.com/hubfs/Knowledge_Base_2023/find-app-id-auth-settings.png" alt="find-app-id-auth-settings" />
</Frame>
