Skip to content
Create account
or
Sign in
The Stripe Docs logo
/
Ask AI
Create account
Sign in
Get started
Payments
Finance automation
Platforms and marketplaces
Money management
Developer tools
Get started
Payments
Finance automation
Get started
Payments
Finance automation
Platforms and marketplaces
Money management
Overview
About Stripe payments
Upgrade your integration
Payments analytics
Online payments
OverviewFind your use caseManaged Payments
Use Payment Links
Build a checkout page
Build an advanced integration
Build an in-app integration
Payment methods
Add payment methods
Manage payment methods
Faster checkout with Link
Payment interfaces
Payment Links
Checkout
Web Elements
In-app Elements
Payment scenarios
Custom payment flows
Flexible acquiring
Orchestration
In-person payments
Terminal
    Overview
    Accept in-person payments
    Integration design
    Select your reader
    Design an integration
    Quickstart
    Example applications
    Testing
    Terminal setup
    Set up your integration
    Connect to a reader
    Accepting a payment
    Collect card payments
    Additional payment methods
    Accept offline payments
    Mail order and telephone order payments
    Regional considerations
    During checkout
    Collect tips
    Collect and save payment details for future use
    Flexible authorizations
    After checkout
    Refund transactions
    Provide receipts
    Customize checkout
    Cart display
    Collect on-screen inputs
    Collect swiped data
    Collect tapped data for NFC instruments
    Apps on devices
      Build and test your app
      Prepare for app review
      Submit your app for review
      Deploy your app in the Dashboard
      Deploy your app with the API
      Monitor your deployment
      Troubleshooting
    Manage readers
    Order, return, replace readers
    Register readers
    Manage locations and zones
    Configure readers
    Encryption
    References
    API references
    Mobile readers
    Smart readers
    SDK migration guide
    Deployment checklist
    Stripe Terminal reader product sheets
Other Stripe products
Financial Connections
Crypto
Climate
HomePaymentsTerminalApps on devices

Deploy your app with the API

Learn how to deploy your Android app to your devices through a webhook.

Copy page

After Stripe reviews and approves your app for deployment, we notify you by email through a webhook. You can then follow the instructions below to deploy your app.

During deployment, your app is immediately sent and downloaded to your device. The device reboots to install the app. Devices reboot every 24 hours and apply any updates automatically. To check for and apply updates immediately, you can manually reboot your device.

Deploy your app to devices by creating a device deploy group and associating it with a location.

Private preview

The Apps on Devices API is currently in private preview. If you’re interested in gaining access, contact your sales representative to assess your eligibility.

Create a device deploy group

Create a device deploy group with a given name and device_type.

Command Line
cURL
curl https://api.stripe.com/v1/terminal/device_deploy_groups \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -H "Stripe-Version: 2025-04-30.basil; terminal_deploy_api_beta=v1" \ -d name=my_toy_store_ddg \ -d device_type=stripe_s700

The following response shows a tmddg_... identifier that you used to create the deployment plan.

{ "id": "tmddg_EuEMSgeudJ0Zyw", "object": "terminal.device_deploy_group", "current_device_asset_versions": [], "device_type": "stripe_s700", "is_default": false, "livemode": false, "name": "my_toy_store_ddg" }

Add readers to the device deploy group

Use the location API to add devices to a device deploy group. You can set the device_deploy_groups field on a location to map a device_type to the device deploy group.

The Deploy API supports the stripe_s700 device type (used by production Stripe S700 devices) and the stripe_s700_devkit device type (used by DevKit devices).

Command Line
cURL
curl https://api.stripe.com/v1/terminal/locations/tml_EUmKfAsUh3 \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -H "Stripe-Version: 2025-04-30.basil; terminal_deploy_api_beta=v1" \ -d "device_deploy_groups[stripe_s700]"=tmddg_EuEMSgeudJ0Zyw

When you deploy a device asset version to a deploy group, the API validates that the compatible_device_types parameter matches the deploy group’s device_type.

Set the default app

Use the preferred_kiosk_app parameter to set the default app that launches on your devices.

Command Line
cURL
curl https://api.stripe.com/v1/terminal/deploy_plans \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -H "Stripe-Version: 2025-04-30.basil; terminal_deploy_api_beta=v1" \ -d device_deploy_group=tmddg_EuEMSgeudJ0Zyw \ -d "device_asset_versions_to_install[]"=tmdav_5300BozlU0005TThQ5411LAZYXcVxtG \ -d "device_asset_versions_to_install[]"=tmdav_5300QO3Ea0005SSea9p11HdL2OHx9Vf \ -d preferred_kiosk_app=tmda_5300slhdm0005YeJakU11De7w9i9cLi

Update your app

Use the device_asset_versions_to_install parameter to update the device asset version on your devices.

Command Line
cURL
curl https://api.stripe.com/v1/terminal/deploy_plans \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -H "Stripe-Version: 2025-04-30.basil; terminal_deploy_api_beta=v1" \ -d device_deploy_group=tmddg_EuEMSgeudJ0Zyw \ -d "device_asset_versions_to_install[]"=tmdav_5300BozlU0005TThQ5411LAZYXcVxtG \ -d "device_asset_versions_to_install[]"=tmdav_5300QO3Ea0005SSea9p11HdL2OHx9Vf \ -d "device_asset_versions_to_install[]"=tmdav_5300d2sWI0015SS1YVA11HdL2OHx9Vf \ -d preferred_kiosk_app=tmda_5300slhdm0005YeJakU11De7w9i9cLi

After you deploy your app, you can monitor its progress.

Uninstall your app

Use the device_assets_to_uninstall parameter to uninstall your app from your devices.

Command Line
cURL
curl https://api.stripe.com/v1/terminal/deploy_plans \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -H "Stripe-Version: 2025-04-30.basil; terminal_deploy_api_beta=v1" \ -d device_deploy_group=tmddg_EuEMSgeudJ0Zyw \ -d "device_asset_versions_to_install[]"=tmdav_5300BozlU0005TThQ5411LAZYXcVxtG \ -d "device_asset_versions_to_install[]"=tmdav_5300QO3Ea0005SSea9p11HdL2OHx9Vf \ -d "device_assets_to_uninstall[]"=tmda_5300slhdm0005YeJakU11De7w9i9cLi \ -d preferred_kiosk_app=tmda_5300OPKai0005SiSmpV11HdL2OHx9Vf

Launch the Stripe Reader app

You can revert your device deploy group to launch the Stripe Reader app instead of your preferred kiosk app.

In a single request, use the device_assets_to_uninstall parameter to uninstall your app, then set the preferred_kiosk_app parameter to STRIPE_APP (case sensitive). Make sure there are no third-party apps in the device deploy group.

Command Line
cURL
curl https://api.stripe.com/v1/terminal/deploy_plans \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -H "Stripe-Version: 2025-04-30.basil; terminal_deploy_api_beta=v1" \ -d device_deploy_group=tmddg_EuEMSgeudJ0Zyw \ -d "device_assets_to_uninstall[]"=tmda_5300slhdm0005YeJakU11De7w9i9cLi \ -d preferred_kiosk_app=STRIPE_APP

Remove readers from a device deploy group

To remove readers from a device deploy group, set the device_deploy_groups parameter on a location to map a device_type to an empty string.

Command Line
cURL
curl https://api.stripe.com/v1/terminal/locations/tml_EUmKfAsUh3 \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -H "Stripe-Version: 2025-04-30.basil; terminal_deploy_api_beta=v1" \ -d "device_deploy_groups[stripe_s700]"=

Deploy group best practices

You can sort devices into different deploy groups to roll out software independently and isolate fault in case of any issues. You might have fewer or more deploy groups based on tooling, risk tolerance, and specific business needs.

We recommend the following deploy group setup:

  • Alpha - Contains locations that correspond to your internal devkits or internal production devices.
  • Beta - Contains a small number of actual user locations. You can randomly choose these locations, select them based on meaningful criteria (for example, less risky locations), or have users opt in to the Beta deploy group based on their risk tolerance.
  • General - Contains all remaining actual user locations, except those in the Alpha or Beta groups. You can use a default deploy group to avoid manually assigning each remaining location.

When your app is ready for deployment, promote deploy groups from least to most risky:

1AlphaFirst, deploy to the Alpha deploy group to test your app in a way that minimizes risk to users. Discovering a bug or undesirable behavior at this stage only affects a small number of internal devices, rather than actual users and real payments.
2BetaSecond, deploy to the Beta deploy group. This balances exposing your app to real users and not exposing all users to potential issues.
3GeneralFinally, deploy to the General deploy group after addressing any issues or confirming that no issues existed for the Beta deploy group.

Next step

  • Monitor your deployment
Was this page helpful?
YesNo
Need help? Contact Support.
Join our early access program.
Check out our changelog.
Questions? Contact Sales.
LLM? Read llms.txt.
Powered by Markdoc