Search docs

Search the Vexo developer documentation

Get the ring

Get started

Quickstart

From an unopened box to a live capture stream in five steps and about five minutes.

  1. Install the SDK

    The SDK ships typed clients for Node 20+, Bun, and edge runtimes. A Python client with the same surface is published as vexoring on PyPI.

    npm i @vexoring/sdk
  2. Create an app

    Open the developer dashboard and create an app. You get a client id and an app secret. Put the client id in your environment as VEXO_CLIENT_ID. The secret stays server side, it never ships to a browser or a phone.

    Every capture, grant, and webhook you create is owned by this app. One app per product is the right shape.

  3. Pair a ring

    Set the ring on its charger. The charger LED cycles a six-digit pairing code. Pass it to the SDK and the ring binds to your app.

    pair.ts
    import { Vexo } from "@vexoring/sdk";
    
    const vexo = new Vexo({ clientId: process.env.VEXO_CLIENT_ID });
    
    // The six-digit code is on the charger LED right now.
    const device = await vexo.devices.pair({ code: "824-115" });
    
    console.log(device.id); // "dev_7hq2m4"
    console.log(device.firmware); // "3.2.0"
  4. Request consent

    Nothing flows yet. Data moves only after the wearer grants the scopes you ask for, so ask now and ask small.

    consent.ts
    const grant = await vexo.oauth.authorize({
      scopes: ["captures:read", "biometrics:hrv"],
    });
    
    // Resolves once the wearer approves on their phone.
    console.log(grant.token); // "vx_user_9f2k…"
    console.log(grant.scopes); // ["captures:read", "biometrics:hrv"]
  5. Stream your first capture

    With an active grant, open the stream. Each event is a typed capture object carrying the signals your scopes cover.

    stream.ts
    const stream = vexo.captures.stream({ wearer: "wr_31d8" });
    
    for await (const capture of stream) {
      console.log(capture.id, capture.signals);
      // "cap_01j8xq4v" { hr: 58, hrv: 61, temp: 36.4 }
    }

    That is the whole loop. The wearer moves, the ring samples, your handler runs.

Where next

Read Authentication to understand tokens, scopes, and revocation. Move to the Captures API for the full read-and-fan-out surface. Wire Webhooks when you want signed delivery instead of an open socket.