# App install

Show a button to install an app.

App install renders a component that enables your connected account to install an app. App install is a private preview component that requires using preview versions of Stripe SDKs. Read more about [private preview components](https://docs.stripe.com/connect/supported-embedded-components.md#preview-components).

For full integration details, see the [Embedded Stripe Apps integration guide](https://docs.stripe.com/stripe-apps/embedded-apps.md).

### Create an Account Session 

When [creating an Account Session](https://docs.stripe.com/api/account_sessions/create.md), enable the App install component by specifying `app_install` in the `components` parameter. You must enable the app you want to install by specifying the `features` parameter under `allowed_apps`.

```curl
curl https://api.stripe.com/v1/account_sessions \
  -u "<<YOUR_SECRET_KEY>>:" \
  -H "Stripe-Version: 2026-04-22.preview; embedded_connect_beta=v2;" \
  -d "account={{CONNECTEDACCOUNT_ID}}" \
  -d "components[app_install][enabled]=true" \
  -d "components[app_install][features][allowed_apps][]=APP_ID"
```

After creating the account session and [initializing ConnectJS](https://docs.stripe.com/connect/get-started-connect-embedded-components.md#account-sessions), you can render the App install component in the front end:

#### JavaScript

```js
const appInstall = stripeConnectInstance.create('app-install');
appInstall.setApp('{{APP_ID}}');
container.appendChild(appInstall);
```

This embedded component supports the following parameters:

#### HTML + JS

| Method   | Type     | Description                                                                                                                                                   |
| -------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `setApp` | `string` | Sets the ID of the App your connected account can install. See the list of [available apps](https://docs.stripe.com/stripe-apps/embedded-apps.md#app-select). |

#### React

| React prop | Type     | Description                                                                                                                                                   |
| ---------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `app`      | `string` | The ID of the app that your connected account can install. See the list of [available apps](https://docs.stripe.com/stripe-apps/embedded-apps.md#app-select). |

You can configure custom behavior based on the current or updated state of an install.

#### JavaScript

```js

// index.html
<div id="app-install-container"></div>

// index.js

// Do something when install state fetched on render
const handleAppInstallFetched = (response) => {
  console.log(`Install state fetched for app  ${response.appId} to ${response.state}`);
};

// Do something when install state changes
const handleAppInstallChanged = (response) => {
  console.log(`Install state changed for app  ${response.appId} to ${response.state}`);
};


const container = document.getElementById('app-install-container');
const appInstall = stripeConnectInstance.create('app-install');
appInstall.setApp('{{APP_ID}}');
appInstall.setOnAppInstallStateFetched(handleAppInstallFetched);
appInstall.setOnAppInstallStateChanged(handleAppInstallChanged);
container.appendChild(appInstall);
```

#### HTML + JS

| Method                        | Description                                                                                        | Variables                                                                                                      |
| ----------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
| `setOnAppInstallStateFetched` | Allows users to specify custom behavior in a callback function on install fetch.                   | - `response.appId`: The app installed
  - `response.state`: The state of the install `INSTALLED | UNINSTALLED` |
| `setOnAppInstallStateChanged` | Allows users to specify custom behavior in a callback function when the install state has changed. | - `response.appId`: The app installed
  - `response.state`: The state of the install `INSTALLED | UNINSTALLED` |

#### React

| React prop                 | Description                                                                                        | Variables                                                                                                      |
| -------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
| `onAppInstallStateFetched` | Allows users to specify custom behavior in a callback function on install fetch.                   | - `response.appId`: The app installed
  - `response.state`: The state of the install `INSTALLED | UNINSTALLED` |
| `onAppInstallStateChanged` | Allows users to specify custom behavior in a callback function when the install state has changed. | - `response.appId`: The app installed
  - `response.state`: The state of the install `INSTALLED | UNINSTALLED` |

You can integrate our sample app (set `APP_ID` to `stripe.app-explorer`), which we’ve pre-approved for embedding on your platform.

## Request early access  (Private preview)

Sign in to request access to this Connect embedded component in preview.

If you don’t have a Stripe account, you can [register now](https://dashboard.stripe.com/register).
