Virtual Peaker Pairing Code Device Discovery - End User App API

The [pairing code](./device-partner-api.html#section/Pairing-Codes) device discovery flow works as follows: 1. The device owner fills out an onboarding form on Virtual Peaker's site. 2. At the end of the form, we provide them with a pairing code and instructions to enter it in the Device Partner's app. 3. Optionally, the user selects which devices to enroll via the Device Partner's interface. Otherwise, all devices are enrolled by default. 4. When the user enters the pairing code in the Device Partner's app, the Device Partner publishes a device enrollment event to Virtual Peaker's API. 5. The publish event includes the pairing code, allowing Virtual Peaker to link the device back to the onboarding form entry. 6. If multiple devices are enrolled, the same pairing code is used in each publish payload. 7. Virtual Peaker discovers the user details associated with the enrolled device(s). 8. We subscribe to the devices for data publishing and provide a `DEVICE_PUBLISH_SECRET`. The user experience is driven through the Device Partner's web or mobile app after receiving the pairing code. This links together the Virtual Peaker and Device Partner platforms.

Operations 1

GET /device/{DEVICE_UID}/user Describe device's user #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/virtual-peaker-pairing-code-device-discovery-end-user-app-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

virtual-peaker-pairing-code-device-discovery-end-user-app-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: '# Introduction

    Welcome to the Gravity Connect API documentation for Device Partners (typically Device OEMs).'
  x-logo:
    url: ./assets/vp_logo.png
    backgroundColor: '#FFFFFF'
    altText: Virtual Peaker Logo
  version: 2.0.6
  title: Gravity Connect API (Device Partner) Pairing Code Device…
  license:
    name: BSD
servers:
- url: https://example.com
security:
- device_partner_api_auth:
  - device_partner_basic_auth
- device_partner_user_auth:
  - user_read
tags:
- name: Pairing Code Device Discovery - End User App
  description: 'The pairing code device discovery flow works as follows:

    1.'
paths:
  /device/{DEVICE_UID}/user:
    get:
      summary: Describe device's user
      description: If a new device is added to Virtual Peaker via the Virtual Peaker's publish device enrollment endpoint. Virtual Peaker will use this endpoint to discover the user associated with the device.
      operationId: readDeviceUser
      tags:
      - Pairing Code Device Discovery - End User App
      security:
      - device_partner_api_auth:
        - basic_partner_read_write
      parameters:
      - $ref: '#/components/parameters/deviceUID'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserDetails'
        '400':
          $ref: '#/components/responses/badRequest'
        '401':
          $ref: '#/components/responses/unauthorized'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Details'
components:
  schemas:
    Details:
      type: object
      required:
      - message
      properties:
        message:
          type: string
          description: A human readable response. Because there's no standard for what is included or how information should be formatted, this should not be parsed and utilized programmatically.
    UserDetails:
      type: object
      required:
      - userId
      properties:
        userId:
          type: string
          description: Unique identifier for the user within the device partner's platform
        accountNumber:
          type: string
          description: Utility customer identifier (if available)
        name:
          type: string
        email:
          type: string
        deviceUids:
          type: array
          items:
            type: string
        serviceAddress:
          $ref: '#/components/schemas/ServiceAddress'
    ServiceAddress:
      type: object
      required:
      - streetAddress
      - city
      - state
      - postalCode
      - country
      properties:
        streetAddress:
          type: string
        streetAddress2:
          type: string
        city:
          type: string
        state:
          type: string
          description: Within the US, passed as a 2 letter abbreviation
        postalCode:
          type: string
        country:
          type: string
          description: A 2 letter indication of country. Following [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)
  parameters:
    deviceUID:
      name: DEVICE_UID
      in: path
      required: true
      description: The unique identifier for the target device within the partner's platform
      schema:
        type: string
  responses:
    unauthorized:
      description: The request was not properly authorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Details'
    badRequest:
      description: Request was not properly formatted
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Details'
  securitySchemes:
    device_partner_api_auth:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://example.com/oauth/token
          scopes:
            basic_partner_read_write: conducts all actions on the partners behalf
    device_partner_user_auth:
      type: oauth2
      description: If using the OAuth onboarding method, this authentication method is used for the respective endpoints. Please the the FAQ for more details.
      flows:
        authorizationCode:
          authorizationUrl: https://example.com/oauth/authorize
          tokenUrl: https://example.com/oauth/token
          scopes:
            user_read: read details about new user
x-tagGroups:
- name: Base Implementation
  tags:
  - Devices
  - Commands
  - Energy Interval Endpoint
- name: Device Onboarding
  tags:
  - OAuth Device Discovery (Preferred)
  - Pairing Code Device Discovery - End User App
  - Pairing Code Device Discovery - Utility Commissioned Installation
  - Device Partner Driven Enrollment
- name: Group Management
  tags:
  - Group Management