FeelTechnology

API documentation

Introduction

The documentation below gives you an overview of how to connect interactive haptic devices to FeelTechnology services and how to integrate the @feelrobotics/feel-apps-api JavaScript library into your web application.
In the interest of simplicity, FeelTechnology will be referred to as FeelTech.

Compatible interactive devices

List of compatible devices

New devices are constantly being added to the FeelTech platform. When a new device is added, it is automatically available to all integrations without any changes on your side.


Services

FeelTechnology offers two integration modes through the @feelrobotics/feel-apps-api library:

  1. Full mode: haptic subtitle playback synchronized with video content, combined with real-time device control
  2. Slider mode: real-time device control only, without subtitle/video synchronization

Both modes communicate with interactive devices through the user's FeelConnect mobile app over the Feel Exchange Center (FEC), a real-time Socket.IO server managed by FeelTech.


Connecting an Interactive Device to the FeelConnect App

Before any API integration can control a device, the device must be paired with the FeelConnect mobile app via Bluetooth.

  1. Download and install the FeelConnect click to download from AppStore or Google Play Store
  2. Turn on Bluetooth on the mobile phone
  3. Turn on the interactive device (it starts in Bluetooth mode automatically)
  4. Open the FeelConnect app
  5. Tap the + button in the top of the screen
  6. Tap Device, then Search for device
  7. Select the device from the list and tap Connect
connecting step mobile
connecting step mobile
connecting step mobile
connecting step mobile
connecting step mobile
connecting step mobile

Connecting the FeelConnect App to Your Website

Once a device is paired, the user connects the FeelConnect app to your website by scanning a QR code. This establishes a real-time session between the app and the Feel Exchange Center (FEC), enabling your page to send haptic commands to the device.

  1. Open the interactive site you want to connect to, or the Demo page
  2. connecting step desktop

  3. Open the FeelConnect App, then press the Sync tab
  4. Tap the Scan button in the top right corner and then tap Website
  5. Scan the QR code displayed on the page
connecting step mobile
connecting step mobile
connecting step mobile

For Webcam

Connecting Devices to the Interactive Tipping Functionality

  1. Connect a device to the FeelConnect App using the instructions above
  2. Follow the link here to the test API for tipping test api image

  3. Click the "Get QR code" button show qr code

  4. Scan the QR code with the FeelConnect App (follow the instructions mentioned above in the Connecting to Your Website section)
  5. Click the "Get User Status" button to get information on connection status and which toys are connected
  6. Click the "Send the Tip" button and the device that is connected will react according to the parameters set
  7. Please find additional detailed information here

Connecting Two People in an Interactive Room

  1. Download the FeelConnect App on two different mobile phones (one for the customer and one for the webcam performer)
  2. Follow the instructions on how to connect the interactive devices to the FeelConnect App for both devices
  3. Follow the instructions to connect to the desktop application for both devices
  4. Open the test API for tipping twice as shown below. Please make sure that the User ID at the top of the page is different for each user test api two people

  5. Enter the same Unique Room ID for both users and select "Add User to the Room". Set each user's role:
    • control = write (the user controls the other's device)
    • be controlled = read (the user's device is controlled)
    In a one-to-many session, the performer should be set to write and the others to read.
    In a one-to-one session, you can enable both read and write for both users so they can control each other. rooms

  6. After adding both users, you can control each other's devices
  7. To remove either user from the room, select the room ID used to set up the connection and click "Kick user out of room"
  8. Note: A user cannot be added to more than one room at the same time. If the user has already joined another room, this call will return an error.
Please note: An API key is needed to get access to this API.
Please find more detailed information on the Room API here.

Connecting to Interactive 2D Video Content on Desktop

  1. Download the FeelConnect app from AppStore or Google Play Store
  2. Follow the connecting device to app instructions above
  3. Go to the example interactive video site here
  4. Follow the instructions to connect the app to the website
  5. On your site, initialize in Full mode and wire up the video element:
    import { init, subs } from '@feelrobotics/feel-apps-api'
    
    await init(feelSubsToken, fecToken, userId, roomName)
    
    // Load haptic subtitle data for the video
    await subs.load(videoId, subtitlesId, externalUserId)
    
    // Wire up the HTML5 video element
    video.addEventListener('play',       () => subs.play(video.currentTime))
    video.addEventListener('timeupdate', () => subs.timeupdate(video.currentTime))
    video.addEventListener('pause',      () => subs.stop())
    video.addEventListener('ended',      () => subs.stop())
  6. After pressing play, the interactive devices will react in sync with the haptic events embedded in the video

Please find more information on how to get started here.
To watch interactive content on mobile, please read the "In Mobile browsers" section.


API Reference

The library is available as the @feelrobotics/feel-apps-api npm package.

npm install @feelrobotics/feel-apps-api

View on npm →

Environments

Set the target environment at build time via the FEEL_ENV variable:

FEEL_ENV Feel Apps API Subtitles API Feel Exchange Center (FEC)
prod api.feel-app.com api.pibds.com fec.feelme.com

To override endpoints at runtime before calling init:

import { setServers } from '@feelrobotics/feel-apps-api'

setServers({
  apps: 'https://api.feel-app.com',
  subs: 'https://api.pibds.com/api/v2',
})

Top-level functions

Function Description
init(feelSubsToken, fecToken, userId, roomName) Full mode: connects to FEC, starts device monitoring, and sets up haptic subtitle playback once a device connects.
initSlider(fecToken, userId, roomName) Slider mode: real-time device control only, without subtitle synchronization.
setServers({ apps, subs }) Override default API endpoints before calling init.
destroy() Disconnect the socket and reset all internal state.

subs module: subtitle / video sync

Function Description
subs.load(videoId, subtitlesId, externalUserId?, channel?) Fetch haptic subtitle data for a video. Returns a Promise.
subs.play(currentPosSec) Start playback from the given video position (in seconds).
subs.timeupdate(currentPosSec) Update the current position. Call on every timeupdate event. Handles seek detection automatically.
subs.stop() Stop playback and reset the device to neutral.
subs.onSubtitleEvent(callback) Subscribe to haptic events. Callback receives percentValue (0–100).
subs.offSubtitleEvent(callback) Unsubscribe from haptic events.

apps module: device status & room data

Function Description
apps.status.subscribe(callback) Listen for device connection changes. Callback receives { online, devices }.
apps.data.subscribe(callback) Listen for haptic position messages from peer devices. Callback receives (percent, deviceName).
apps.data.unsubscribe(callback) Remove a previously registered data callback.

Additional Information

If your developers need any help, please contact us at info@feeltechnology.com.

The FeelTech Team ensures that current and future interactive devices work with the technology. When a new device is released, only the FeelConnect App needs to be updated. Your integration remains unchanged.

The Feel Exchange Center (FEC) provides a real-time presence system: your application is notified immediately when a user's FeelConnect app comes online and when their device connects or disconnects. By updating the user's experience in real time, this ensures the best possible interaction for everyone involved.