---
title: "Unlock card readers for staff with the Jovvie Stripe SDK"
description: "Use authorization links from the Stripe SDK so your staff can use card readers on the Jovvie payment page without the Access PIN."
url: https://docs.jovvie.com/developers/unlock-card-readers/
section: "Developers"
last_updated: 2026-10-08
---

# Unlock card readers for staff with the Jovvie Stripe SDK

Section: Developers

> Use authorization links from the Stripe SDK so your staff can use card readers on the Jovvie payment page without the Access PIN.

This page shows you how to let your staff use card readers on the Jovvie payment page without typing the Access PIN. You do this with an authorization link from the Stripe SDK.

Without an authorization link, anyone who opens a checkout link and selects **In-Person Payment** sees **Provide PIN to access** and must enter the Access PIN, the PIN that lets someone use the merchant’s readers. An authorization link unlocks the readers in one browser for a set time.

Authorization links are part of the Stripe SDK only. For NMI, see [Take payments with NMI](https://docs.jovvie.com/developers/nmi-payments/).

## How an authorization link works

1. Your server creates the link with `authorizationLinks()->create()`.
2. Your app sends a staff member’s browser to the link.
3. Jovvie records that this browser is allowed to use the readers, then sends the browser to your redirect URL.

Keep these rules in mind:

- **Each link works once.** After a browser opens it, the link cannot be opened again. Create a new link each time.
- **The access lasts until the expiry time.** If you do not set one, the link and the access expire after 1 hour.
- **The access covers every payment page in that browser,** not only the one you redirect to. It applies to this merchant’s payments in the same mode (live or test) as the client that created the link.

> **Caution**
>
> An authorization link gives card reader access to whoever opens it. Only create links for the merchant’s signed-in staff, and only send them to that staff member’s browser. Never show an authorization link to customers or anonymous visitors, and never put one in an email, a log, or a public page.

## Create an authorization link

Call `$client->authorizationLinks()->create($options, $expiresAt)`.

| Argument                         | What it is                                                                                                                                                                                          |
| -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `$options['redirectUrl']`        | Where to send the browser after the link is opened. Must be a full URL. Always pass it.                                                                                                             |
| `$options['paymentMethodTypes']` | Which payment options the payment page offers in this browser. See [Payment method types](https://docs.jovvie.com/developers/unlock-card-readers/#payment-method-types).                            |
| `$options['locationId']`         | Optional. The ID of a Stripe Terminal location in the merchant’s Stripe account. The payment page then shows only the readers in that location. You can find location IDs in your Stripe Dashboard. |
| `$expiresAt`                     | Optional. When the link and the access expire, as an ISO 8601 date and time with a time zone offset. If you leave it out, they expire after 1 hour.                                                 |

The method returns an `AuthorizationLink` object. Send the browser to its `authorizationLink` field.

> **Caution**
>
> Always pass `redirectUrl`, so the browser returns to the page you chose.

### Payment method types

`paymentMethodTypes` accepts either `true` or an array of these values:

| Value              | What the payment page shows                                                    |
| ------------------ | ------------------------------------------------------------------------------ |
| `card`             | **Card**, a form where the card details are typed on the page.                 |
| `terminal`         | **In-Person Payment** with the reader list, without asking for the Access PIN. |
| `request-terminal` | **In-Person Payment** that asks for the Access PIN first.                      |

If you pass `true`, the payment page keeps the options set on each payment and unlocks **In-Person Payment** so it does not ask for the Access PIN. If you pass an array, the payment page shows exactly those options in this browser.

## Unlock the readers for one payment

Use this when a signed-in staff member takes a payment from your app.

1. Create the payment. See [Create a payment (Stripe)](https://docs.jovvie.com/developers/create-a-payment/).
2. Create an authorization link with the checkout link as the redirect URL.
3. Send the staff member’s browser to the authorization link.

```php
<?php
// $client is your JovviePaymentsClient. $payment is the payment you just created.
// Only run this for a signed-in staff member of the merchant.

$expiresAt = date(DATE_ATOM, time() + 15 * 60); // 15 minutes from now

$link = $client->authorizationLinks()->create(
    [
        'redirectUrl' => $payment->generatedData->checkoutLink,
        'paymentMethodTypes' => ['terminal', 'card'],
    ],
    $expiresAt
);

header('Location: ' . $link->authorizationLink);
exit;
```

The browser opens the Jovvie payment page with the readers ready. For a link like this, use a short expiry, because the browser keeps reader access until it expires.

## Connect a browser to a location

Use this for a shared device, such as a counter tablet or a kiosk, that should always show one location’s readers. A staff member connects the browser once, and it keeps reader access until the expiry time.

1. In your app’s settings, let a signed-in staff member choose a Stripe Terminal location.
2. Create an authorization link with that location, `paymentMethodTypes` set to `true`, a redirect URL back to your settings page, and a longer expiry.
3. On the shared device, have the staff member open your settings page and start the connection, so the device’s browser opens the authorization link.

```php
<?php
// $client is your JovviePaymentsClient. $locationId comes from your settings form.
// Only run this for a signed-in staff member of the merchant.

$expiresAt = date(DATE_ATOM, time() + 7 * 24 * 60 * 60); // 7 days from now

$link = $client->authorizationLinks()->create(
    [
        'locationId' => $locationId,
        'paymentMethodTypes' => true,
        'redirectUrl' => 'YOUR_SETTINGS_PAGE_URL',
    ],
    $expiresAt
);

header('Location: ' . $link->authorizationLink);
exit;
```

Open the link in the browser that will take payments. The access belongs to the browser that opens the link, not to the device where you created it.

When the expiry time passes, the browser goes back to asking for the Access PIN. Connect it again with a new link.

For how this works from the merchant’s side, see [Use Checkout on a shared or kiosk device](https://docs.jovvie.com/checkout/connect-a-browser/).

## If the link does not work

The link shows an error instead of redirecting when:

- It was already opened once.
- It expired.

Create a new authorization link and try again. If the payment page still asks for the Access PIN, check that the link and the payment were created in the same mode (live or test).

## Related pages

- [Create a payment (Stripe)](https://docs.jovvie.com/developers/create-a-payment/)
- [Take a payment on the Jovvie payment page](https://docs.jovvie.com/checkout/jovvie-payment-page/)
- [Reader not showing on the payment page](https://docs.jovvie.com/troubleshooting/reader-connection/)
