Terminal
Fleet management

Fleet management

Group and manage a fleet of readers by physical location.

If your Terminal deployment uses many readers across multiple physical locations, keeping track of them all can get overwhelming. Locations help you manage readers and their activity by associating them with a physical operating site. They also ensure your readers download the proper regional configurations.

Use the Terminal Locations object to group readers, view their connectivity status, and customize their settings by physical location. This can be especially helpful for marketplaces with many connected accounts.

Creating a location Server-side Dashboard

To create a new location, use the create location request.

curl https://api.stripe.com/v1/terminal/locations \ -u sk_test_4eC39HqLyjWDarjtT1zdp7dc: \ -d display_name=HQ \ -d "address[line1]"="1272 Valencia Street" \ -d "address[city]"="San Francisco" \ -d "address[state]"=CA \ -d "address[country]"=US \ -d "address[postal_code]"=94110
# Set your secret key. Remember to switch to your live secret key in production! # See your keys here: https://dashboard.stripe.com/account/apikeys Stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc' Stripe::Terminal::Location.create({ display_name: 'HQ', address: { line1: '1272 Valencia Street', city: 'San Francisco', state: 'CA', country: 'US', postal_code: '94110', } })
# Set your secret key. Remember to switch to your live secret key in production! # See your keys here: https://dashboard.stripe.com/account/apikeys stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc' stripe.terminal.Location.create( display_name='HQ', address={ line1: '1272 Valencia Street', city: 'San Francisco', state: 'CA', country: 'US', postal_code: '94110', }, )
// Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys \Stripe\Stripe::setApiKey('sk_test_4eC39HqLyjWDarjtT1zdp7dc'); \Stripe\Location::create([ 'display_name' => 'HQ', 'address' => [ 'line1' => "1272 Valencia Street", 'city' => "San Francisco", 'state' => "CA", 'country' => "US", 'postal_code' => "94110", ] ]);
// Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys Stripe.apiKey = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"; LocationCreateParams.Address address = LocationCreateParams.Address.builder() .setLine1("1272 Valencia Street") .setCity("San Francisco") .setState("CA") .setCountry("US") .setPostalCode("94110") .build(); LocationCreateParams params = LocationCreateParams.builder() .setDisplayName("HQ") .setAddress(address) .build(); Location.create(params);
// Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys const stripe = require('stripe')('sk_test_4eC39HqLyjWDarjtT1zdp7dc'); const location = await stripe.terminal.locations.create({ display_name: 'HQ', address: { line1: '1272 Valencia Street', city: 'San Francisco', state: 'CA', country: 'US', postal_code: '94110', } })
// Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys stripe.Key = "sk_test_4eC39HqLyjWDarjtT1zdp7dc" params := &stripe.TerminalLocationParams{ Address: &stripe.AccountAddressParams{ Line1: stripe.String("1272 Valencia Street"), City: stripe.String("San Francisco"), State: stripe.String("CA"), Country: stripe.String("US"), PostalCode: stripe.String("94110"), }, DisplayName: stripe.String("HQ"), } l, _ := location.New(params)
// Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys StripeConfiguration.ApiKey = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"; var options = new LocationCreateOptions { DisplayName = "HQ", Address = new AddressOptions { Line1 = "1272 Valencia Street", City = "San Francisco", State = "CA", Country = "US", PostalCode = "94110", }, }; var service = new LocationService(); service.Create(options);

You can also create locations from the Stripe Dashboard, under Locations.

Whenever you register the Verifone P400 , the specified location groups the reader and defines its country settings. If you do not provide a location, the reader will be ungrouped on your account and default to the regional configuration associated with the country of your Stripe account.

When you connect to a BBPOS Chipper 2X BT for the first time, it will be automatically registered and will be ungrouped on your account. The BBPOS Chipper 2X BT can only be used in the United States.

Creating Connection Tokens Server-side

When creating a ConnectionToken for the Terminal SDK, you may provide a location parameter to control access to readers. If you provide a location, the ConnectionToken is only usable with readers assigned to that location. If you do not provide a location, the ConnectionToken is usable with all readers.

curl https://api.stripe.com/v1/terminal/connection_tokens \ -u sk_test_4eC39HqLyjWDarjtT1zdp7dc: \ -d location="{LOCATION_ID}"
# Set your secret key. Remember to switch to your live secret key in production! # See your keys here: https://dashboard.stripe.com/account/apikeys Stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc' Stripe::Terminal::ConnectionToken.create({ location: '{LOCATION_ID}' })
# Set your secret key. Remember to switch to your live secret key in production! # See your keys here: https://dashboard.stripe.com/account/apikeys stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc' connection_token = stripe.terminal.ConnectionToken.create( location='{LOCATION_ID}' )
// Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys const stripe = require('stripe')('sk_test_4eC39HqLyjWDarjtT1zdp7dc'); let connectionToken = stripe.terminal.connectionTokens.create({ location: '{LOCATION_ID}' });
// Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys \Stripe\Stripe::setApiKey('sk_test_4eC39HqLyjWDarjtT1zdp7dc'); $connectionToken = \Stripe\Terminal\ConnectionToken::create([ 'location' => '{LOCATION_ID}' ]);
// Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys Stripe.apiKey = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"; ConnectionTokenCreateParams params = ConnectionTokenCreateParams.builder() .setLocation("{LOCATION_ID}") .build(); ConnectionToken connectionToken = ConnectionToken.create(params);
// Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys stripe.Key = "sk_test_4eC39HqLyjWDarjtT1zdp7dc" params := &stripe.TerminalConnectionTokenParams{ Location: stripe.String("{LOCATION_ID}"), } ct, _ := connectiontoken.New(params)
// Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys StripeConfiguration.ApiKey = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"; var options = new ConnectionTokenCreateOptions{}; var service = new ConnectionTokenService( Location = "{LOCATION_ID}" ); var connectionToken = service.Create(options);

Registering a reader to a location

Verifone P400 Server-sideDashboard

Register Verifone P400 readers to a location for better onsite discoverability. When discovering readers, your app can provide a location parameter to only show readers in that location.

curl https://api.stripe.com/v1/terminal/readers \ -u sk_test_4eC39HqLyjWDarjtT1zdp7dc: \ -d registration_code="{READER_REGISTRATION_CODE}" \ -d location="{LOCATION_ID}" \ -d label="Alice's Reader"
# Set your secret key. Remember to switch to your live secret key in production! # See your keys here: https://dashboard.stripe.com/account/apikeys Stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc' Stripe::Terminal::Reader.create({ registration_code: "{READER_REGISTRATION_CODE}", label: "Alice's Reader", location: "{LOCATION_ID}", })
# Set your secret key. Remember to switch to your live secret key in production! # See your keys here: https://dashboard.stripe.com/account/apikeys stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc' stripe.terminal.Reader.create( registration_code="{READER_REGISTRATION_CODE}", label="Alice's Reader", location="{LOCATION_ID}", )
// Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys \Stripe\Stripe::setApiKey('sk_test_4eC39HqLyjWDarjtT1zdp7dc'); \Stripe\Terminal\Readers::create([ 'registration_code' => "{READER_REGISTRATION_CODE}", 'label' => "Alice's Reader", 'location' => "{LOCATION_ID}", ]);
// Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys Stripe.apiKey = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"; ReaderCreateParams params = ReaderCreateParams.builder() .setRegistrationCode("{READER_REGISTRATION_CODE}") .setLabel("Alice's Reader") .setLocation("{LOCATION_ID}") .build(); Reader.create(params);
// Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys const stripe = require('stripe')('sk_test_4eC39HqLyjWDarjtT1zdp7dc'); const reader = await stripe.terminal.readers.create({ registration_code: "{READER_REGISTRATION_CODE}", label: "Alice's Reader", location: "{LOCATION_ID}", });
// Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys stripe.Key = "sk_test_4eC39HqLyjWDarjtT1zdp7dc" params := &stripe.TerminalReaderParams{ Label: stripe.String("Alice's Reader"), Location: stripe.String("{LOCATION_ID}"), RegistrationCode: stripe.String("{READER_REGISTRATION_CODE}"), } r, _ := reader.New(params)
// Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys StripeConfiguration.ApiKey = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"; var options = new ReaderCreateOptions { RegistrationCode = "{READER_REGISTRATION_CODE}, Label = "Alice's Reader", Location = "{LOCATION_ID}", }; var service = new ReaderService(); service.Create(options);

You can also register readers in the Dashboard, under Locations.

BBPOS Chipper 2X BT Dashboard

The BBPOS Chipper 2X BT is automatically registered when you connect to the reader.

Filtering discovered readers

Verifone P400 Client-side

Your application uses the SDK’s discoverReaders method to look for readers it can connect to. When discovering a Verifone P400, you can discover the intended reader more easily by filtering results by location.

With the code below, only readers in a given location are returned to your app’s callback. You can find the location’s ID in the Dashboard, under Locations.

terminal.discoverReaders({ location: "<LOCATION_ID>" }).then(function(discoverResult) { // ... });
async () => { const discoverResult = await terminal.discoverReaders({ location: "<LOCATION_ID>" }); // ... }
func discoverReadersAction() { let config = DiscoveryConfiguration( deviceType: .verifoneP400, discoveryMethod: .internet, location: "<LOCATION_ID>", simulated: false) self.discoverCancelable = Terminal.shared.discoverReaders(config, delegate: self) { error in // Handle discovery error } }
- (void)discoverReadersAction { SCPDiscoveryConfiguration *config = [[SCPDiscoveryConfiguration alloc] initWithDeviceType:SCPDeviceTypeVerifoneP400 discoveryMethod:SCPDiscoveryMethodInternet location:"<LOCATION_ID>" simulated:NO]; self.discoverCancelable = [[SCPTerminal shared] discoverReaders:config delegate:self completion:^(NSError *error) { // Handle discovery error }]; }

BBPOS Chipper 2X BT

Because your app uses Bluetooth discovery to find a BBPOS Chipper 2X BT, it can only search for nearby readers. There’s no need to filter by location.

Setting a custom splash screen Dashboard

A splash screen is the default screen displayed when your Verifone P400 is ready to accept payments.

Set a custom splash screen for all of your Verifone P400 readers:

  1. From the Readers section of your Dashboard, click on your default location.
  2. In the location details, click Reader settings.
  3. Upload an image (less than 2MB in size) to display on your readers. The Verifone P400 has a 320 x 480 display resolution and you will be prompted to crop your image to fit those dimensions.

You can also customize the splash screen for each location, so that all readers registered to a site share the same branding. For Connect users, custom splash screens enable you to create different checkout experiences to reflect the various merchants connected to your platform.

Was this page helpful?
Questions? Contact us.
Developer tutorials on YouTube.