# Get a patient's vitals

Operation ID: `vitals.listVitals`

Reconstruct a vitals record from the patient's FHIR Observations. Optionally pass ?type= to scope the underlying FHIR search to one LOINC code. Only the most recent reading of each recognized type is reflected in the response; unmeasured or unrecognized vitals stay null.

## Public method

`list`

Signature: `vitals.list(patientId, query)`

Return type: `Promise<GetVitalsResponse>`

## Authentication

Classification: **AUTHENTICATED**

Schemes: `bearerAuth`

## Prerequisites

None documented.

## HTTP

`GET /patients/{patient_id}/vitals`

## Path parameters

| Name | Type | Required | Format | Allowed values | Default | Nullable | Description |
|---|---|---:|---|---|---|---:|---|
| `patient_id` | `string` | Yes |  |  |  | No |  |

## Query parameters

| Name | Type | Required | Format | Allowed values | Default | Nullable | Description |
|---|---|---:|---|---|---|---:|---|
| `type` | `string` | No |  |  |  | No | Filter: temperature, weight, height, heart-rate, blood-pressure, oxygen-saturation, respiratory-rate, blood-glucose |

## Body parameters

None.

Request model: None.

## Request example

None declared in canonical OpenAPI.

## Success responses

| Status | Shape | Content type | Description |
|---|---|---|---|
| `200` | [`GetVitalsResponse`](../models/GetVitalsResponse.md) | application/json | Vitals record for the patient |

## Success response examples

### 200

```json
{
  "activity": {
    "active_minutes": 45,
    "calories_burned": 320,
    "distance_meters": 5000,
    "floors_climbed": 8,
    "source": "wearable_device",
    "steps": 7200
  },
  "blood_pressure": {
    "arm": "left",
    "diastolic": 80,
    "position": "sitting",
    "systolic": 120
  },
  "device": "automated_bp_cuff",
  "effective_date": "2026-08-10",
  "effective_datetime": "2026-08-10T12:00:00Z",
  "encounter_id": "encounter-example-001",
  "glucose": {
    "fasting": true,
    "meal_relation": "before_breakfast",
    "value": 90
  },
  "head_circumference": {
    "value": 56
  },
  "heart_rate": {
    "rate": 72,
    "rhythm": "regular"
  },
  "height": {
    "value": 170
  },
  "iop": {
    "left_eye": 15,
    "right_eye": 16
  },
  "notes": "Synthetic vitals example",
  "pain": {
    "location": "lower back",
    "notes": "Mild intermittent discomfort",
    "scale": "numeric",
    "score": 2
  },
  "patient_id": "patient-example-001",
  "peak_flow": {
    "personal_best": 500,
    "value": 450
  },
  "practitioner_name": "Test Practitioner",
  "pulse_oximetry": {
    "fio2": 21,
    "flow_rate": 0,
    "on_supplemental_oxygen": false,
    "spo2": 98
  },
  "respiratory_rate": {
    "rate": 16
  },
  "status": "final",
  "temperature": {
    "route": "oral",
    "value": 36.7
  },
  "vitals_id": "vitals-example-001",
  "weight": {
    "clothed": true,
    "value": 70
  }
}
```

## Common errors

| Status | Shape | Content type | Description |
|---|---|---|---|
| `401` | [`StandardErrorResponse`](../models/StandardErrorResponse.md) | application/json | Authorization required — missing or invalid Bearer JWT |

## Error examples

### 401 — Missing or invalid access token

```json
{
  "error": "Authorization required"
}
```

## NodeJS / TypeScript implementation

```ts
import { HCSDK } from "@healthcloudai/hc-sdk";
```

```ts
const patientId = "<PATIENT_ID>";

const query = {
  "type": "<TYPE>"
};

const result = await vitals.list(patientId, query);
```

## cURL

```bash
curl -X GET \
  -H 'Authorization: Bearer <ACCESS_TOKEN>' \
  'https://dev-api-vitals.health.cloud/patients/%3CPATIENT_ID%3E/vitals?type=%3CTYPE%3E'
```

## Notes

None.

## Prepared Test Console scenario

No canonical scenario is currently associated.

## Real response

No approved real integration response is currently published. Unapproved candidates are never rendered as examples.
