---
title: "Reader login"
method: POST
path: "/api/v1/readers/login"
tags: ["Readers"]
---

# Reader login

`POST /api/v1/readers/login`

## Request

- Base URL: `https://api.passentry.com`
- URL: `https://api.passentry.com/api/v1/readers/login`
- Auth: none required

Sign in as a PassEntry Reader using its Reader ID and password, exactly as the PassEntry Reader app does. Returns a session token, a refresh token and the reader's NFC configuration. A reader holds one session at a time: logging in again invalidates the previous session's tokens. Keep the session alive with Reader heartbeat every 5 minutes.

## Request body

- ReaderLogin
  - `passentry_reader` object, required
    - `uuid` string, required: The Reader ID set when the reader was created
    - `password` string, required: The reader password set when the reader was created

## Response `200`

Successful

- object
  - `data` object
    - `id` string: Reader ID
    - `type` string
    - `attributes` object: Attributes returned only by Reader login, in addition to the standard reader attributes.
      - `name` string: Friendly display name of the reader
      - `id` string: Identifier of the reader
      - `type` 'VtapReader' | 'PassentryReader': Type of reader: VtapReader or PassentryReader
      - `password` string: Reader password. Required for PassentryReader type
      - `scanEnabled` boolean: Whether the reader is enabled for scanning. Only present for PassentryReader type.
      - `redeemEnabled` boolean: Whether the reader is enabled for redeeming. Only present for PassentryReader type.
      - `addPointsEnabled` boolean: Whether the reader is enabled for adding points. Only present for PassentryReader type.
      - `mifareClassicNfcEnabled` boolean: Whether the reader is enabled for Mifare Classic NFC scanning. Only present for PassentryReader type.
      - `qrEnabled` boolean: Whether the reader is enabled for QR code scanning. Only present for PassentryReader type.
      - `readerConfiguration` object: NFC credentials for this reader's entity. Send these to a PassEntry terminal in Customer mode as readerConfig so it can read wallet passes over NFC.
        - `nfcEnabled` boolean: Whether NFC reading is enabled for the entity
        - `nfcPrivateKey` string: PEM-encoded EC private key used to decrypt the NFC value
        - `googleCollectorID` string: Google Wallet collector ID
        - `applePassTypeID` string: Apple pass type identifier
        - `googleKeyVersion` integer: Version of the Google key
      - `validationConfiguration` object
        - `validationType` 'internal' | 'external'
        - `validityPeriod` integer
        - `externalEndpointUrl` string
        - `bearerToken` string
      - `token` string: Reader session token. Expires after 30 minutes unless rotated by a heartbeat.
      - `refreshToken` string: Refresh token. Expires after 6 weeks.

## Other responses

- `401`: Error: Unauthorized
- `404`: Error: Not Found

## Changes

- **2026-10-14** `0748466491e3`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/passentry/apis/passentry-api/changes/api/v1/readers/login/post.md)

---

[API](https://skmtc.dev/passentry/apis/passentry-api.md) - [All operations](https://skmtc.dev/passentry/apis/passentry-api/llms.txt) - [OpenAPI document](https://skmtc.dev/passentry/apis/passentry-api/revisions/29baa18b5287?raw)
