> ## Documentation Index
> Fetch the complete documentation index at: https://docs.loyalty.dog/llms.txt
> Use this file to discover all available pages before exploring further.

# Register Device

> Register a new tablet/kiosk device.

This endpoint creates a new device record and generates a JWT token for device authentication.
The token has limited scope (earn, redeem, balance_check) and expires in 24 hours.

### Parameters:
- `request` (DeviceRegisterRequest): Device registration details
- `current_user` (User): Authenticated user making the request

### Returns:
- `DeviceRegisterResponse`: Device ID, SID, and authentication token

### Raises:
- 404: If the specified program doesn't exist



## OpenAPI

````yaml https://api.loyalty.dog/openapi.json post /v2/devices/register
openapi: 3.1.0
info:
  title: LoyaltyDog
  description: >-

    Welcome to the LoyaltyDog API! This API provides access to our loyalty
    program features, allowing you to integrate with various platforms and
    manage your loyalty data.


    Want to query LoyaltyDog via an AI assistant (Claude, Cursor, Windsurf)? See
    the [MCP Integration guide](https://loyaltydog.ai/playground#mcp).
        
  termsOfService: https://loyalty.dog/loyalty-program-terms-service
  contact:
    name: LoyaltyDog Support
    url: https://loyalty.dog/contact-us
    email: support@loyalty.dog
  version: 1.0.1
servers:
  - url: https://api.loyalty.dog
    description: Production
security:
  - bearerAuth: []
paths:
  /v2/devices/register:
    post:
      tags:
        - Devices
      summary: Register Device
      description: >-
        Register a new tablet/kiosk device.


        This endpoint creates a new device record and generates a JWT token for
        device authentication.

        The token has limited scope (earn, redeem, balance_check) and expires in
        24 hours.


        ### Parameters:

        - `request` (DeviceRegisterRequest): Device registration details

        - `current_user` (User): Authenticated user making the request


        ### Returns:

        - `DeviceRegisterResponse`: Device ID, SID, and authentication token


        ### Raises:

        - 404: If the specified program doesn't exist
      operationId: register_device_v2_devices_register_post
      parameters:
        - name: authorization
          in: header
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Authorization
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeviceRegisterRequest'
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeviceRegisterResponse'
        '404':
          description: Program not found.
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    DeviceRegisterRequest:
      properties:
        deviceType:
          $ref: '#/components/schemas/DeviceType'
          description: Type of device (tablet, kiosk, or tablet_kiosk)
        deviceName:
          type: string
          title: Devicename
          description: Human-readable name for the device
        programId:
          $ref: '#/components/schemas/PydanticObjectId'
          description: Loyalty program this device belongs to
        hardwareInfo:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Hardwareinfo
          description: Hardware information (model, OS version, etc.)
        locationName:
          anyOf:
            - type: string
            - type: 'null'
          title: Locationname
          description: Physical location of device
        locationAddress:
          anyOf:
            - type: string
            - type: 'null'
          title: Locationaddress
          description: Address of device location
      type: object
      required:
        - deviceType
        - deviceName
        - programId
      title: DeviceRegisterRequest
      description: Request schema for device registration.
    DeviceRegisterResponse:
      properties:
        deviceId:
          type: string
          title: Deviceid
          description: Device ID
        deviceSid:
          type: string
          title: Devicesid
          description: Device SID (human-readable identifier)
        deviceToken:
          type: string
          title: Devicetoken
          description: JWT token for device authentication
        expiresAt:
          type: string
          format: date-time
          title: Expiresat
          description: Token expiration timestamp
        status:
          $ref: '#/components/schemas/DeviceStatus'
          description: Initial device status
      type: object
      required:
        - deviceId
        - deviceSid
        - deviceToken
        - expiresAt
        - status
      title: DeviceRegisterResponse
      description: Response schema for successful device registration.
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    DeviceType:
      type: string
      enum:
        - tablet_kiosk
        - tablet
        - kiosk
      title: DeviceType
      description: Device type enumeration for tablet/kiosk devices.
    PydanticObjectId:
      type: string
      maxLength: 24
      minLength: 24
      pattern: ^[0-9a-f]{24}$
      example: 5eb7cf5a86d9755df3a6c593
    DeviceStatus:
      type: string
      enum:
        - active
        - inactive
        - blocked
        - pending_activation
      title: DeviceStatus
      description: Device status enumeration.
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: JWT access token obtained from POST /v2/token.

````