Terminal Integration Checklist Beta

    Use this checklist to ensure a smooth deployment of Stripe Terminal.

    Stripe Terminal requires integrating hardware and software to bring Stripe to the physical world. As you develop, refer to this checklist to make sure you cover all the critical steps.

    It’s fine to go out of order, but understanding the full scope of a Terminal integration helps you connect all the pieces.

    After following the integration guides for the Stripe Terminal SDK (JavaScript, iOS, Android), check that your app is set up correctly.

    To handle the connection token lifecycle, set up an endpoint on your backend that creates a connection token for your client app. Do not hardcode the token in your app—it prevents you from reconnecting to a reader. Authenticate this endpoint to control who can access your readers. To further control access to internet-connected readers like the Verifone P400, use Locations.

    When the SDK returns a processed PaymentIntent to your app, the payment is authorized but not captured. To complete collection of funds, you must capture the PaymentIntent.

    When your app receives a processed PaymentIntent from the SDK, make sure it notifies your backend to capture the PaymentIntent.

    Provide your customer with the option to receive a paper or email receipt. You can use Stripe’s pre-built receipts, or use receipt data from the Stripe API to build custom receipts that are on-brand for your business. Test that you get an email when you test a payment.

    If you provide your customers with custom receipts, save a copy of receipts as dispute evidence. If you use Stripe’s pre-built receipts, a copy of the receipt is saved automatically and available in the Dashboard.

    Reconcile payments with your internal orders system on your server at the end of a day’s activity to avoid unintended authorizations or uncaptured funds:

    • A user abandoning your app’s checkout flow early can result in an uncaptured PaymentIntents, which may appear to the cardholder as an unintended authorization.
    • Similarly, the request from your app notifying your backend to capture the PaymentIntent may fail, resulting in incomplete collection of funds.

    The BBPOS Chipper 2X BT does not auto-update, so it’s important for your app to support updates. Although they’re rare, updates usually contain important features or critical fixes. Make sure your app supports the following:

    1. First, check for whether an update is available.
    2. If an update is available, display in the UI the estimated time to complete the update, along with options to continue or cancel.
    3. While the update is in progress, have the UI tell the user to leave the reader powered on and nearby. Block the user from navigating away from the page.
    4. Display a visual indicator of the update progress (e.g., percentage, progress bar).

    Refer to our example apps (JavaScript, iOS, Android) for a reference UI.

    For the Verifone P400, you must register the reader to your account before you can connect your application to the reader. How you handle reader registration depends on your use case.

    For smaller deployments, register each reader in the Stripe Dashboard. For larger deployments that require shipping readers to various locations, site managers should be able to add new readers to your company’s Stripe account. Build a workflow into your app to let others register readers to your Stripe account. The endpoint for registering a reader must be called server side. If you support registering readers from your client application, the app must communicate with your backend to register the reader.

    If you use Connect destination charges, specify an operator account when registering a new reader. With direct charges, use the Stripe account header to register the reader on the connected account.

    Make sure your application can display an updating list of discovered readers, with the label and/or serial number of each. Refer to our Example applications for an example UI.

    If you expect your mobile app to be used with multiple Bluetooth readers, use the Bluetooth Proximity discovery method. Include in your app instructions to hold the reader close to the app device, and wait for it to begin flashing multiple colors. Make sure your app’s UI allows canceling the reader discovery process.

    If you use the Verifone P400, check that the reader and the device running your application are both on the correct LAN. Include in your application instructions for verifying the correct LAN.

    Stripe periodically releases updates to the Stripe Terminal iOS SDK and Stripe Terminal Android SDK, which can include new functionality, bug fixes, and security updates. Developers should update their integrated version of the Stripe Terminal iOS and Android SDKs as soon as new versions are available. The Stripe Terminal JavaScript SDK is updated automatically.

    Read more about SDK updates (iOS, Android) for details.

    The BBPOS and Chipper™ name and logo are trademarks or registered trademarks of BBPOS Limited in the United States and/or other countries. The Verifone® name and logo are either trademarks or registered trademarks of Verifone in the United States and/or other countries. Use of the trademarks does not imply any endorsement by BBPOS or Verifone.


    We're always happy to help with code or other questions you might have. Search our documentation, contact support, or connect with our sales team. You can also chat live with other developers in #stripe on freenode.

    Was this page helpful? Yes No


    Thank you for helping improve Stripe's documentation. If you need help or have any questions, please consider contacting support.

    On this page