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

# Register a push device

> Requires a tenant-admin credential carrying push:register behind the active public station gate when a provider is configured. Provider must match the station configuration. The device token is stored station-scoped and never associated with a staff user.



## OpenAPI

````yaml /radiotools/openapi.json post /api/v1/stations/{stationSlug}/push/devices
openapi: 3.1.0
info:
  title: RadioTools API
  version: 1.0.0
  description: >-
    RadioTools APIs for listener websites and apps, published media, and
    now-playing metadata ingestion.
servers:
  - url: https://radiotools.rivi.software
    description: radiotools API
security: []
tags:
  - name: Public listener
    description: >-
      Tenant-token published delivery (listener:read; push:register for device
      changes). Published media remains anonymous. OPTIONS allows every origin;
      JSON is no-store with a strong ETag for conditional polling.
  - name: Ingest
    description: >-
      Automation credentials. The credential resolves the station; payloads
      cannot change it.
paths:
  /api/v1/stations/{stationSlug}/push/devices:
    post:
      tags:
        - Public listener
      summary: Register a listener push device
      description: >-
        Requires a tenant-admin credential carrying push:register behind the
        active public station gate when a provider is configured. Provider must
        match the station configuration. The device token is stored
        station-scoped and never associated with a staff user.
      parameters:
        - schema:
            type: string
            minLength: 3
            maxLength: 63
          required: true
          name: stationSlug
          in: path
          description: >-
            Public station slug from the station settings; distinct from the
            internal station ID.
          example: radio-rivier
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                token:
                  type: string
                  minLength: 1
                  maxLength: 4096
                  description: >-
                    Push provider device token. This is not an API credential;
                    never use a real device token in shared examples.
                  example: fictional-fcm-device-token
                platform:
                  type: string
                  enum:
                    - ios
                    - android
                  description: Device operating system.
                  example: android
                provider:
                  type: string
                  enum:
                    - fcm
                    - apns
                    - expo
                  description: >-
                    Configured push provider or embed provider; use the allowed
                    values.
                  example: fcm
              required:
                - token
                - platform
                - provider
              example:
                token: fictional-fcm-device-token
                platform: android
                provider: fcm
            examples:
              android:
                summary: Register an Android device
                description: >-
                  Replace the fictional token with the device token from your
                  push provider; the provider must match the station
                  configuration.
                value:
                  token: fictional-fcm-device-token
                  platform: android
                  provider: fcm
      responses:
        '200':
          description: >-
            Registered or refreshed the existing device token This imported
            contract does not specify a response body; treat the HTTP status as
            the documented result.
        '400':
          description: Invalid registration body
        '401':
          description: Station credential missing or invalid
        '404':
          description: Station unavailable
        '409':
          description: Station has no configured provider or provider does not match
      security:
        - machineToken: []
components:
  securitySchemes:
    machineToken:
      type: http
      scheme: bearer
      bearerFormat: rtm_…
      description: >-
        Station-scoped listener credential. Send Authorization: Bearer
        `<token>`, for example Bearer rtm_…. Sending the rtm_ token alone
        without Bearer returns 401 UNAUTHENTICATED. In the interactive
        playground, enter only the raw rtm_ token; the playground adds the
        prefix. Listener REST and GraphQL: listener:read. Listener devices:
        push:register.

````

## Related topics

- [Integrations](/radiotools/station-admin/integrations.md)
- [Unregister a push device](/radiotools/api-reference/public-listener/unregister-push-device.md)
- [Public delivery](/radiotools/api-reference/public-delivery.md)
- [Update push topics](/radiotools/api-reference/public-listener/update-push-topics.md)
- [Listener alerts](/radiotools/daily-work/listener-alerts.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.