Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/stripe/stripe-terminal-react-native/llms.txt

Use this file to discover all available pages before exploring further.

Requirements

The SDK is compatible with apps targeting iOS 15.1 or above.

Installation

1

Add the package

yarn add @stripe/stripe-terminal-react-native
2

Install CocoaPods dependencies

cd ios && pod install
The podspec pulls in the native StripeTerminal iOS SDK automatically:
stripe-terminal-react-native.podspec
s.platforms = { ios: '15.1' }
s.dependency 'React-Core'
s.dependency 'StripeTerminal', '~> 5.1.1'

Info.plist permissions

Add the following keys to your Info.plist. The values are shown with recommended default descriptions — update them to match your app’s use case.
ios/YourApp/Info.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>

  <!-- Required for all Bluetooth readers -->
  <key>NSBluetoothAlwaysUsageDescription</key>
  <string>This app uses Bluetooth to connect to supported card readers.</string>

  <!-- Required for older iOS versions (kept for compatibility) -->
  <key>NSBluetoothPeripheralUsageDescription</key>
  <string>Bluetooth access is required in order to connect to supported bluetooth card readers.</string>

  <!-- Required for Bluetooth reader discovery -->
  <key>NSLocationWhenInUseUsageDescription</key>
  <string>Location access is required in order to accept payments.</string>

  <!-- Required if your app requests always-on location access -->
  <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
  <string>Location access is required in order to accept payments.</string>

  <!-- Required for internet-connected readers on local networks -->
  <key>NSLocalNetworkUsageDescription</key>
  <string>This app uses the local WiFi network to connect to supported card readers.</string>

</dict>
</plist>
All five keys are required if your app supports both Bluetooth and internet-connected readers. If you only use internet readers, you may omit the Bluetooth and location keys — but App Store review may still ask about them.

Supported discovery methods

The following discovery methods are available on iOS:
MethodDescription
bluetoothScanDiscover Bluetooth readers in range
bluetoothProximityConnect to the nearest Bluetooth reader
internetDiscover internet-connected readers
tapToPayUse iPhone as a reader (requires iOS 16.7+)
usbUSB readers (private preview, iPads with M-series chips only)
USB discovery is in private preview and is only available on iPads with M-series chips. Contact Stripe to request access.

Tap to Pay on iPhone

Tap to Pay on iPhone requires iOS 16.7 or later.
When calling discoverReaders with the tapToPay method, pass both required fields:
const { error } = await discoverReaders({
  discoveryMethod: 'tapToPay',
  tosAcceptancePermitted: true,
  merchantDisplayName: 'My Store',
});
FieldDescription
tosAcceptancePermittedSet to true to allow the SDK to show Stripe’s Terms of Service to the user
merchantDisplayNameBusiness name displayed on the Tap to Pay prompt
Both fields are required for the Tap to Pay flow to proceed.

Build docs developers (and LLMs) love