Skip to main content
Below, find reference information for developer platform app features, including configuration file definitions, scopes details, and more.

Project structure

  • All project components must live within the src directory specified in the top-level hsproject.json config file.
  • All app features and components must live within the src/app/ directory. Within this app/ directory, you’ll define subdirectories for each feature you want your app to support:
    • App events are configured within app-events/.
    • App objects are defined within app-objects/.
    • All card features are defined within cards/ .
    • App pages are defined within pages/.
    • Settings page features are defined within settings/.
    • Serverless functions are configured within functions/.
    • Telemetry is configured within telemetry/.
    • Webhook subscriptions are defined within webhooks/.
    • Custom workflow actions are defined within workflow-actions/.
  • Within each feature subdirectory, you’ll configure the feature are using a *-hsmeta.json file. You can prefix the file name with something meaningful to your app (e.g., my-app-hsmeta.json), as long as the file ends with -hsmeta.json. These files must live at the root level of their respective folder (e.g., app/my-app-hsmeta.json, cards/my-card-hsmeta.json).
The example directory structure below outlines all available features. Details for configuring the top-level app schema app-hsmeta.json file are provided in the app schema section below. Once you’re ready to add app features, check out the adding app features section.
The HubSpot Visual Studio Code extension provides type checking for each of the properties in your *-hsmeta.json configuration files.

Specifying UIDs

The uid field is an internally unique identifier for your specific app, and must also be globally unique within the project. Any app features will each have their own uid defined in their respective *-hsmeta.json files, which must be distinct from the top-level uid you choose in your app’s app-hsmeta.json file.

App schema

The top-level configuration for your app is specified within an app-hsmeta.json configuration file in the app directory.
Below are the configuration options available for app-hsmeta.json.
Each of the configuration options are detailed in the table below. More context on distributing your app, configuring authentication, and specifying scopes are provided in the sections below the table.

Distribution

The distribution field in your app schema allows you to configure how you want to distribute your app:
  • If you plan to list your app on the HubSpot Marketplace, set the distribution field to "marketplace". If you choose this option, ensure that you set the type within the auth property to oauth, as detailed in the authentication section below.
  • If you want to allow your app to be installed in a specific set of allowlisted accounts, or if you want to restrict installation to a single account at a time, set distribution to "private". Ensure that you set the type within the auth property accordingly:
    • If you want to install your app in multiple accounts based on an allowlist you configure in your project settings, set the authentication type to oauth.
    • To restrict installation to a single account, either the same you use for development or another account that the installing user has access to, set the authentication type to static.

Authentication

Authentication for your app is configured via the auth property in your app schema. You can specify your app’s scope requirements, redirect URLs, and authentication type.

Scopes

In the auth field of an app configuration file, three types of scopes are available: required scopes, conditionally required scopes, and optional scopes. Apps configured with static auth can only define required scopes. If your app uses OAuth authentication, you can also specify conditionally required scopes and optional scopes, which provide more flexibility and control for the permissions that users grant to your app. At a minimum, your app must include the read scope to enable customers to access the associated CRM object or asset type (e.g., crm.objects.contacts.read to retrieve contacts).
For a full list of available scopes, see the scopes reference.

Adding app features

To configure app features such as webhook subscriptions, custom workflow actions, and app cards, check out the guides below for details on how to add the associated *-hsmeta.json files to your project:
Last modified on September 8, 2026