openapi: 3.0.3
info:
title: BodyTrace RPM Data Alerts Data Messages API
description: 'HTTP API for BodyTrace cellular-connected remote patient monitoring (RPM) devices - blood pressure monitors, body-weight scales, and pulse oximeters. Devices transmit measurements directly over the cellular network to the BodyTrace platform; healthcare organizations then read those readings over this API. Authentication is HTTP Basic using credentials issued by BodyTrace.
Scope and honesty note: BodyTrace does not publish an open, self-serve developer portal - device provisioning and API credentials are arranged through BodyTrace sales, and the reference docs live behind partner onboarding (BodyTrace''s own docs plus integrator guides such as Validic). The one endpoint publicly and repeatedly documented in the wild is the data values pull, `GET /1/device/{imei}/datavalues`, and the device push message payload. Those are marked CONFIRMED below. The remaining operations (raw data messages, device listing/status, alerts, and provisioning) are HONESTLY MODELED from BodyTrace''s documented IMEI-centric data model and RPM feature set; their exact paths and parameters should be verified against the partner documentation you receive with credentials. Modeled operations carry `x-endpoint-status: modeled`; confirmed ones carry `x-endpoint-status: confirmed`.
Delivery model: readings can be pulled from the data values endpoint on a polling loop, or pushed by BodyTrace to a customer-hosted HTTP endpoint (a webhook you host and secure). There is no documented public WebSocket surface.'
version: '1.0'
contact:
name: BodyTrace
url: https://www.bodytrace.com
license:
name: Proprietary
url: https://www.bodytrace.com
servers:
- url: https://us.data.bodytrace.com/1
description: BodyTrace US data region
- url: https://eu.data.bodytrace.com/1
description: BodyTrace EU data region (region assigned by BodyTrace)
security:
- basicAuth: []
tags:
- name: Data Messages
description: Modeled surface for raw per-transmission device messages.
paths:
/device/{imei}/datamessages:
parameters:
- $ref: '#/components/parameters/Imei'
get:
operationId: getDeviceDataMessages
tags:
- Data Messages
summary: Get raw device data messages
description: Retrieve the raw, per-transmission messages a device has sent over the cellular network for a given IMEI and time range. Each message mirrors the payload BodyTrace devices emit (deviceId, ts, batteryVoltage, rssi, and a values object). MODELED - the message payload shape is confirmed from BodyTrace's documented device messages, but this read/query surface is gated behind partner credentials; verify path and parameters against your onboarding docs.
x-endpoint-status: modeled
parameters:
- name: from
in: query
required: false
description: Start of the time window, epoch milliseconds (UTC).
schema:
type: integer
format: int64
- name: to
in: query
required: false
description: End of the time window, epoch milliseconds (UTC).
schema:
type: integer
format: int64
- name: limit
in: query
required: false
description: Maximum number of messages to return.
schema:
type: integer
responses:
'200':
description: A list of raw device messages.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/DeviceMessage'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
components:
parameters:
Imei:
name: imei
in: path
required: true
description: The device IMEI (serial). BodyTrace documents this as the IMEI without leading zeros and without the final check digit.
schema:
type: string
example: '357872040012345'
schemas:
DeviceMessage:
type: object
description: A raw per-transmission device message, matching the JSON BodyTrace devices emit over cellular.
properties:
deviceId:
type: string
description: The device IMEI (without leading zeros and final digit).
ts:
type: integer
format: int64
description: Timestamp, epoch milliseconds (UTC).
batteryVoltage:
type: integer
description: Battery voltage in millivolts (functional range ~4700-6000).
rssi:
type: integer
description: Signal strength in negative dBm.
values:
$ref: '#/components/schemas/Values'
Values:
type: object
description: Measurement payload. The populated fields depend on the device type. A scale reports weight/tare; a blood pressure monitor reports systolic/diastolic/pulse; a pulse oximeter reports spo2/pulse. An empty values object indicates a heartbeat / connectivity message.
properties:
unit:
type: integer
description: Unit setting for the measurement (device-defined).
weight:
type: integer
description: Body weight in grams (scale).
tare:
type: integer
description: Tare / calibration offset in grams (scale).
systolic:
type: integer
description: Systolic blood pressure in mmHg (BP monitor).
diastolic:
type: integer
description: Diastolic blood pressure in mmHg (BP monitor).
pulse:
type: integer
description: Pulse in beats per minute (BP monitor / pulse oximeter).
spo2:
type: integer
description: Blood oxygen saturation as a percentage (pulse oximeter).
additionalProperties: true
Error:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string
responses:
Unauthorized:
description: Missing or invalid HTTP Basic credentials.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
NotFound:
description: The device or resource was not found / not registered.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
securitySchemes:
basicAuth:
type: http
scheme: basic
description: HTTP Basic authentication using the username and password issued by BodyTrace for your account. The same credential model secures the customer-hosted push endpoint (you define the username/password BodyTrace uses when POSTing measurements to you).