# Register readers

Register your readers to a location.

You must register your reader to a [location](https://docs.stripe.com/terminal/fleet/locations-and-zones.md) to accept payments. Your [user role](https://docs.stripe.com/get-started/account/teams/roles.md) must have write permissions to register readers. The process for registering your reader to a location depends on whether it’s a [smart reader](https://docs.stripe.com/terminal/smart-readers.md) or a [mobile reader](https://docs.stripe.com/terminal/mobile-readers.md).

## Register a smart reader 

Register a smart reader using one of the following methods:

#### Registration code

For this method, you must generate a pairing code (also known as a registration code) on the reader. If a reader isn’t registered, a pairing code automatically appears on the screen when you unbox it. If the code doesn’t appear, or you need to re-register a reader, generate a new pairing code using the [admin settings](https://docs.stripe.com/terminal/payments/setup-reader/stripe-reader-s700-s710.md#settings). After generating the pairing code, enter it in the Dashboard or API to register the reader.

#### Dashboard

1. On the **Readers** tab on the [Terminal Readers](https://dashboard.stripe.com/terminal/readers) page, click **Register reader**.
2. Enter the pairing code on the reader and click **Next**.
3. Provide a name for the reader.
4. Assign to a location or create a new one.
5. Confirm the details and click **Register**.

#### API

Provide the registration code when you [create a reader](https://docs.stripe.com/api/terminal/readers/create.md) to register it.

```curl
curl https://api.stripe.com/v1/terminal/readers \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d registration_code={{READER_REGISTRATION_CODE}} \
  --data-urlencode "label=Alice's reader" \
  -d "location={{TERMINALLOCATION_ID}}"
```

#### Serial number

You can register a reader using its serial number. This method doesn’t require physical access to the reader, so you can use it immediately after you unbox it. This method also allows you to re-register the reader without the need to physically have the reader to generate a pairing code. This method allows you to register up to 10 readers at a time.

> This method can’t be used to transfer a reader registered to an [unrelated Stripe account](https://docs.stripe.com/terminal/fleet/register-readers.md#connect-eligibility). If you need to re-register a reader to another Stripe account, use the [Registration code](https://docs.stripe.com/terminal/fleet/register-readers.md?registration-method=registration-code) method.

### Connect eligibility

- You can’t register a reader to a platform account if the order was placed directly by a [connected account](https://docs.stripe.com/connect.md) that your platform doesn’t have [platform controls](https://docs.stripe.com/connect/platform-controls-for-stripe-dashboard-accounts.md) for.
- If the platform placed the order, connected accounts can’t self-register the reader to their own account directly. The platform must register the reader to the connected account on the connected account’s behalf using the [Stripe-Account header](https://docs.stripe.com/connect/authentication.md#stripe-account-header) or [View Dashboard as](https://docs.stripe.com/connect/dashboard/managing-individual-accounts.md#view-the-dashboard-as-a-connected-account).

### Find the serial number

You can find the serial number:

- From the hardware order on the [Hardware orders](https://dashboard.stripe.com/terminal/hardware_orders) tab
- On the reader itself (on the box and the back of the reader)
- If the reader is already registered, from the reader details page in the Dashboard or the [Reader API](https://docs.stripe.com/api/terminal/readers.md)

#### Dashboard

After you find the serial number, you can register the reader through the registration flow in the Dashboard.

1. On the [Terminal Readers](https://dashboard.stripe.com/terminal/readers) page, click **Register reader**.
2. Enter the serial number and click **Next**. To register multiple devices at once, you can enter multiple serial numbers, separated by commas.
3. Optionally, choose a name for the reader.
4. If you already created a location, select the reader’s new location. Otherwise, create a location by clicking **+ Add new**.
5. Click **Register** to finish registering your reader.

#### Order number

This method only works for readers that were ordered by the account (or one of their connected accounts). If the reader isn’t associated with an order with that account, this method won’t work.

#### Dashboard

You can register readers on either the [Hardware orders](https://docs.stripe.com/terminal/fleet/register-readers.md#hardware-orders-page) or the [Terminal Readers](https://docs.stripe.com/terminal/fleet/register-readers.md#terminal-readers-page) page.

### Hardware orders page

1. On the [Hardware orders](https://dashboard.stripe.com/terminal/hardware_orders) page, find an order with a status of either `shipped` or `delivered`. Click the overflow menu (⋯) at the end of the row, then click **Register**.
   - If your order doesn’t have assigned serial numbers, clicking **Register** opens the [pre-registration](https://docs.stripe.com/terminal/fleet/register-readers.md#pre-register-readers-when-ordering) flow.
   - If your order has assigned serial numbers, clicking **Register** opens the **Register readers** page. Continue with the steps below.
2. On the **Register readers** page, select one or more readers from the hardware order to register, then click **Register**.
3. Optionally, choose a name for the reader. If you selected multiple readers, the name serves as a prefix and we name the readers sequentially (for example, for a given input of “Test reader”, we name the readers “Test reader 1”, “Test reader 2”, and so on).
4. If you already created a location, select the reader’s new Location. Otherwise, create a Location by clicking **+ Add new**.
5. Click **Register** to finish registering your readers.

#### Pre-register readers when ordering

When you order Terminal hardware, you can pre-select a location for your readers. Stripe automatically registers each reader to that location when fulfilling your order and assigning serial numbers.

Pre-registration has the following limitations:

- Each order can pre-register readers to one location only. To distribute readers from a single order across multiple locations, use the reader’s serial number, after your order is assigned serial numbers.
- Pre-registration isn’t supported across accounts. Platform accounts can’t pre-register readers to a connected account’s location.

### Terminal Readers page

1. On the [Terminal Readers](https://dashboard.stripe.com/terminal/readers) page, click **Register reader**.
2. Enter the order number and click **Next**. If there are registerable readers in the order, continue by clicking **Register**.
3. On the **Register readers** page, select one or more readers from the hardware order to register, then click **Register**.
4. Optionally, choose a name for the reader. If you selected multiple readers, the name serves as a prefix and we name the readers sequentially (for example, for a given input of “Test reader,” we name the readers “Test reader 1,” “Test reader 2,” and so on).
5. If you already created a location, select the reader’s new location. Otherwise, create a location by clicking **+ Add new**.
6. Click **Register** to finish registering your readers.

## Register a mobile reader 

#### iOS

Register a mobile reader ([Stripe Reader M2](https://docs.stripe.com/terminal/readers/stripe-m2.md), [BBPOS Chipper 2X BT](https://docs.stripe.com/terminal/payments/connect-reader.md?reader-type=bluetooth#connect-reader), and [BBPOS WisePad 3](https://docs.stripe.com/terminal/payments/connect-reader.md?reader-type=bluetooth#connect-reader)) to a location while connecting to the reader by specifying the `locationId` in your `BluetoothConnectionConfiguration`.

You can also register the reader to the last used location by passing in the `reader.locationId` from a discovered reader.

#### Swift

```swift
// Call `connectReader` with the selected reader and a connection config
// to register to a location as set by your app.
var connectionConfig: BluetoothConnectionConfiguration
do {
    connectionConfig = try BluetoothConnectionConfigurationBuilder(delegate: yourMobileReaderDelegate, locationId: ""{{LOCATION_ID}}"")
    .build()
} catch {
    // Handle the error building the connection configuration
    return
}
Terminal.shared.connectReader(selectedReader, connectionConfig: connectionConfig) { reader, error in
    if let reader = reader {
        print("Successfully connected to reader: \(reader)")
    } else if let error = error {
        print("connectReader failed: \(error)")
    }
}
```

#### Android

Register a mobile reader ([Stripe Reader M2](https://docs.stripe.com/terminal/readers/stripe-m2.md), [BBPOS Chipper 2X BT](https://docs.stripe.com/terminal/payments/connect-reader.md?reader-type=bluetooth#connect-reader), and [BBPOS WisePad 3](https://docs.stripe.com/terminal/payments/connect-reader.md?reader-type=bluetooth#connect-reader)) to a location while connecting to the reader by specifying the `locationId` in your `BluetoothConnectionConfiguration`.

You can also register the reader to the last used location by passing in the `reader.locationId` from a discovered reader.

#### Kotlin

```kotlin
// Implement your MobileReaderListener
val mobileReaderListener = yourMobileReaderListener
val autoReconnectOnUnexpectedDisconnect = true

val connectionConfig = BluetoothConnectionConfiguration(
    ""{{LOCATION_ID}}"",
    autoReconnectOnUnexpectedDisconnect,
    mobileReaderListener
)

Terminal.getInstance().connectReader(
    selectedReader,
    connectionConfig,
    object : ReaderCallback {
        override fun onSuccess(reader: Reader) {
            // Placeholder for handling successful operation
        }

        override fun onFailure(e: TerminalException) {
            // Placeholder for handling exception
        }
    }
)
```

#### React Native

Register a mobile reader ([Stripe Reader M2](https://docs.stripe.com/terminal/readers/stripe-m2.md), [BBPOS Chipper 2X BT](https://docs.stripe.com/terminal/payments/connect-reader.md?reader-type=bluetooth#connect-reader), and [BBPOS WisePad 3](https://docs.stripe.com/terminal/payments/connect-reader.md?reader-type=bluetooth#connect-reader)) to a location while connecting to the reader by specifying the `locationId` in your `connectReader` call.

You can also register the reader to the last used location by passing in the `reader.locationId` from a discovered reader.

```tsx
const handleConnectBluetoothReader = async (id) => {
  const { reader, error } = await connectReader({
    discoveryMethod: 'bluetoothScan',
    reader: selectedReader,
    locationId: {{LOCATION_ID}},
  });

  if (error) {
    console.log('connectReader error', error);
    return;
  }

  console.log('Reader connected successfully', reader);
};
```
