openapi: 3.0.3 info: title: VivaLNK Biometrics Data Platform API (Modeled) description: >- A modeled OpenAPI description of the VivaLNK (Vivalink) Biometrics Data Platform cloud API for remote patient monitoring. VivaLNK provides medical-grade wearable biosensors (Multi-Vital ECG patch, temperature patch, SpO2 sensor, BP cuff) and a cloud platform that ingests their data over RESTful HTTPS services (Amazon API Gateway plus Amazon Kinesis for near-real-time ingestion) and makes it available for machine-to-machine (M2M) integration, webhook push, FHIR interoperability, and bulk file export. IMPORTANT: VivaLNK's developer surface is delivered through its SDK and Developer Program and is partner-gated - the full API reference is provided under license rather than published openly. The paths, base URL, request parameters, and schemas below are MODELED from VivaLNK's documented platform capabilities (M2M cloud web services, webhook support, FHIR support, data-file downloads) and are NOT copied from a public reference. Field names, the exact base URL, and authentication scheme must be confirmed against VivaLNK's licensed documentation before use. version: '1.0-modeled' contact: name: VivaLNK (Vivalink) url: https://www.vivalink.com x-status: modeled x-endpoints-confirmed: false x-source-notes: >- Confirmed via VivaLNK marketing/technical pages and the AWS Partner Network blog: REST over HTTPS, Amazon API Gateway, Amazon Kinesis Data Streams for near-real-time access, M2M cloud APIs, webhook support, FHIR support, and bulk data-file downloads. No public WebSocket API is documented. servers: - url: https://api.vivalink.com description: Modeled base URL (partner-gated; actual host provided under the Developer Program) security: - bearerAuth: [] tags: - name: Subjects description: Subjects (patients / study participants) enrolled for monitoring. - name: Devices description: VivaLNK wearable biosensors and their assignment to subjects. - name: Vital Signs description: Biometric measurements captured from wearables. - name: Webhooks description: Subscriptions for pushed biometric data and alert events. - name: FHIR description: HL7 FHIR R4 resources for EHR/CTMS interoperability. paths: /v1/subjects: get: operationId: listSubjects tags: [Subjects] summary: List subjects description: Lists subjects enrolled in your account, project, or study (modeled). parameters: - name: projectId in: query schema: { type: string } description: Filter subjects by project or study. - name: limit in: query schema: { type: integer, default: 50 } - name: cursor in: query schema: { type: string } responses: '200': description: A page of subjects. content: application/json: schema: type: object properties: data: type: array items: { $ref: '#/components/schemas/Subject' } cursor: { type: string } '401': { $ref: '#/components/responses/Unauthorized' } post: operationId: createSubject tags: [Subjects] summary: Create a subject description: Enrolls a new subject for monitoring (modeled). requestBody: required: true content: application/json: schema: { $ref: '#/components/schemas/SubjectInput' } responses: '201': description: The created subject. content: application/json: schema: { $ref: '#/components/schemas/Subject' } '401': { $ref: '#/components/responses/Unauthorized' } /v1/subjects/{subjectId}: parameters: - name: subjectId in: path required: true schema: { type: string } get: operationId: getSubject tags: [Subjects] summary: Retrieve a subject responses: '200': description: The subject. content: application/json: schema: { $ref: '#/components/schemas/Subject' } '404': { $ref: '#/components/responses/NotFound' } patch: operationId: updateSubject tags: [Subjects] summary: Update a subject requestBody: required: true content: application/json: schema: { $ref: '#/components/schemas/SubjectInput' } responses: '200': description: The updated subject. content: application/json: schema: { $ref: '#/components/schemas/Subject' } delete: operationId: deactivateSubject tags: [Subjects] summary: Deactivate a subject responses: '204': { description: Subject deactivated. } /v1/devices: get: operationId: listDevices tags: [Devices] summary: List devices description: Lists VivaLNK wearable biosensors registered to your account (modeled). parameters: - name: type in: query schema: type: string enum: [ecg, temperature, spo2, bp_cuff] - name: assigned in: query schema: { type: boolean } responses: '200': description: A list of devices. content: application/json: schema: type: object properties: data: type: array items: { $ref: '#/components/schemas/Device' } '401': { $ref: '#/components/responses/Unauthorized' } /v1/devices/{deviceId}: parameters: - name: deviceId in: path required: true schema: { type: string } get: operationId: getDevice tags: [Devices] summary: Retrieve a device responses: '200': description: The device. content: application/json: schema: { $ref: '#/components/schemas/Device' } '404': { $ref: '#/components/responses/NotFound' } /v1/devices/{deviceId}/assignment: parameters: - name: deviceId in: path required: true schema: { type: string } put: operationId: assignDevice tags: [Devices] summary: Assign a device to a subject requestBody: required: true content: application/json: schema: type: object properties: subjectId: { type: string } required: [subjectId] responses: '200': description: The updated device assignment. content: application/json: schema: { $ref: '#/components/schemas/Device' } delete: operationId: unassignDevice tags: [Devices] summary: Unassign a device responses: '204': { description: Device unassigned. } /v1/subjects/{subjectId}/measurements: parameters: - name: subjectId in: path required: true schema: { type: string } get: operationId: listMeasurements tags: [Vital Signs] summary: Retrieve subject measurements description: >- Returns time-ranged biometric measurements for a subject - ECG-derived heart rate, HRV, RR interval, respiratory rate, temperature, SpO2, blood pressure, and accelerometer/activity data (modeled). Near-real-time results are served over REST (backed by Amazon Kinesis), not a public streaming socket. parameters: - name: metric in: query schema: type: string enum: [heart_rate, hrv, rr_interval, respiratory_rate, temperature, spo2, blood_pressure, activity, ecg_waveform] - name: start in: query schema: { type: string, format: date-time } - name: end in: query schema: { type: string, format: date-time } - name: interval in: query description: Aggregation interval (raw, 1m, 5m, 1h). Omit for raw samples. schema: { type: string } responses: '200': description: A time series of measurements. content: application/json: schema: type: object properties: subjectId: { type: string } metric: { type: string } unit: { type: string } samples: type: array items: { $ref: '#/components/schemas/Measurement' } '401': { $ref: '#/components/responses/Unauthorized' } /v1/subjects/{subjectId}/exports: parameters: - name: subjectId in: path required: true schema: { type: string } post: operationId: createExport tags: [Vital Signs] summary: Request a bulk data-file export description: >- Requests a bulk export (for example CSV/EDF) of a subject's raw biometric data over a time range for retrospective analysis (modeled). requestBody: required: true content: application/json: schema: type: object properties: start: { type: string, format: date-time } end: { type: string, format: date-time } format: { type: string, enum: [csv, edf, json] } responses: '202': description: Export accepted; poll or await a webhook for completion. content: application/json: schema: { $ref: '#/components/schemas/Export' } /v1/webhooks: get: operationId: listWebhooks tags: [Webhooks] summary: List webhook subscriptions responses: '200': description: A list of webhook subscriptions. content: application/json: schema: type: object properties: data: type: array items: { $ref: '#/components/schemas/Webhook' } post: operationId: createWebhook tags: [Webhooks] summary: Create a webhook subscription description: >- Registers an HTTPS endpoint to receive pushed biometric data and alert events (for example threshold or arrhythmia notifications). Webhook push is a documented VivaLNK platform capability (modeled shape). requestBody: required: true content: application/json: schema: { $ref: '#/components/schemas/WebhookInput' } responses: '201': description: The created subscription. content: application/json: schema: { $ref: '#/components/schemas/Webhook' } /v1/webhooks/{webhookId}: parameters: - name: webhookId in: path required: true schema: { type: string } get: operationId: getWebhook tags: [Webhooks] summary: Retrieve a webhook subscription responses: '200': description: The subscription. content: application/json: schema: { $ref: '#/components/schemas/Webhook' } delete: operationId: deleteWebhook tags: [Webhooks] summary: Delete a webhook subscription responses: '204': { description: Subscription deleted. } /fhir/Observation: get: operationId: searchFhirObservations tags: [FHIR] summary: Search FHIR Observations description: >- Returns biometric measurements as HL7 FHIR R4 Observation resources for EHR/CTMS interoperability (modeled). FHIR support is a documented VivaLNK Biometrics Data Platform capability. parameters: - name: patient in: query schema: { type: string } description: FHIR Patient reference or subject identifier. - name: code in: query schema: { type: string } description: LOINC code for the vital sign. - name: date in: query schema: { type: string } responses: '200': description: A FHIR Bundle of Observation resources. content: application/fhir+json: schema: { type: object } components: securitySchemes: bearerAuth: type: http scheme: bearer description: >- Modeled as an OAuth2/bearer access token issued to Developer Program partners for machine-to-machine access. Confirm the exact scheme (API key vs. OAuth2 client credentials) against VivaLNK's licensed docs. responses: Unauthorized: description: Missing or invalid credentials. content: application/json: schema: { $ref: '#/components/schemas/Error' } NotFound: description: Resource not found. content: application/json: schema: { $ref: '#/components/schemas/Error' } schemas: Subject: type: object properties: id: { type: string } externalId: { type: string } projectId: { type: string } status: { type: string, enum: [active, inactive] } createdAt: { type: string, format: date-time } SubjectInput: type: object properties: externalId: { type: string } projectId: { type: string } metadata: { type: object, additionalProperties: true } Device: type: object properties: id: { type: string } serialNumber: { type: string } type: { type: string, enum: [ecg, temperature, spo2, bp_cuff] } model: { type: string } firmwareVersion: { type: string } assignedSubjectId: { type: string, nullable: true } status: { type: string } Measurement: type: object properties: timestamp: { type: string, format: date-time } value: { type: number } deviceId: { type: string } Export: type: object properties: id: { type: string } status: { type: string, enum: [pending, processing, complete, failed] } downloadUrl: { type: string, nullable: true } Webhook: type: object properties: id: { type: string } url: { type: string, format: uri } events: type: array items: { type: string } active: { type: boolean } WebhookInput: type: object required: [url, events] properties: url: { type: string, format: uri } events: type: array items: type: string enum: [measurement.created, alert.threshold, alert.arrhythmia, export.complete] secret: { type: string } Error: type: object properties: code: { type: string } message: { type: string }