Submitting Vital Sign Measurements
For product owners and partners: Use this page to understand how home-measured vital signs (e.g. blood pressure, weight, pulse rate) are submitted into the MediKIT API and turned into clinical
Observationrecords.For architects and developers: Use this page to implement the
$create-vital-signsoperation with the correctParametersrequest shape, coding rules, and response handling.
Vital sign measurements are submitted as a FHIR R4 custom operation. Each request creates one or more Observation resources, category vital-signs, scoped to a single patient and organization.
What this endpoint is for
Use $create-vital-signs when your product needs to submit measured vital signs such as:
- home blood pressure, weight, or pulse-rate readings from a patient-facing app or connected device
- staff-recorded vitals captured outside a full encounter workflow
Endpoint map
| Use case | Endpoint | Notes |
|---|---|---|
| Create vital sign Observations | POST /v2/{organizationId}/fhir/R4/Patient/{patientId}/Observation/$create-vital-signs | Body is a Parameters resource |
Required access
Required scope
observation.create-vital-signs
Request body
The request body is a Parameters resource with the following top-level parts. No other top-level parameter names are accepted — an unrecognized parameter name is rejected.
| Parameter | Required | Repeatable | Description |
|---|---|---|---|
effective-date-time | Yes | No | A dateTime with timezone/offset information. Exactly one must be present. |
measurement | At least one of measurement / composite-measurement | Yes | A simple single-value measurement. |
composite-measurement | At least one of measurement / composite-measurement | Yes | A composite measurement made up of multiple component measurements (e.g. a blood pressure reading with systolic and diastolic values). |
Each measurement occurrence must include:
code— aCodingidentifying the measurement type.systemmust be one of the allowed code systems.value— the measurement value, expressed as one of:valueQuantity— a numeric value with a unit.systemmust behttp://unitsofmeasure.org(UCUM) andunitmust be present.valueCodeableConcept— a coded value (e.g. a severity category).valueBoolean— a true/false value.
Each composite-measurement occurrence must include:
code— aCodingidentifying the composite measurement type, subject to the same code-system rule as above.component— one or more parts, each holding ameasurementsub-part with the same structure as the top-levelmeasurementparameter.
Allowed code systems
| System | Notes |
|---|---|
http://loinc.org | LOINC |
https://referentiemodel.nhg.org/tabellen/nhg-tabel-45-diagnostische-bepalingen | NHG table 45 |
Request size limit
A single request may contain at most 150 measurements combined (measurement + composite-measurement occurrences). Exceeding this returns a validation error.
Request example
Simple measurement (e.g. body weight)
{
"resourceType": "Parameters",
"parameter": [
{
"name": "effective-date-time",
"valueDateTime": "2024-01-15T10:30:00+01:00"
},
{
"name": "measurement",
"part": [
{
"name": "code",
"valueCoding": {
"system": "http://loinc.org",
"code": "29463-7",
"display": "Body weight"
}
},
{
"name": "value",
"valueQuantity": {
"value": 72.0,
"unit": "kg",
"system": "http://unitsofmeasure.org",
"code": "kg"
}
}
]
}
]
}
Composite measurement (e.g. blood pressure)
{
"resourceType": "Parameters",
"parameter": [
{
"name": "effective-date-time",
"valueDateTime": "2024-01-15T10:30:00+01:00"
},
{
"name": "composite-measurement",
"part": [
{
"name": "code",
"valueCoding": {
"system": "http://loinc.org",
"code": "85354-9",
"display": "Blood pressure panel"
}
},
{
"name": "component",
"part": [
{
"name": "measurement",
"part": [
{
"name": "code",
"valueCoding": {
"system": "http://loinc.org",
"code": "8480-6",
"display": "Systolic blood pressure"
}
},
{
"name": "value",
"valueQuantity": {
"value": 120.0,
"unit": "mmHg",
"system": "http://unitsofmeasure.org",
"code": "mm[Hg]"
}
}
]
},
{
"name": "measurement",
"part": [
{
"name": "code",
"valueCoding": {
"system": "http://loinc.org",
"code": "8462-4",
"display": "Diastolic blood pressure"
}
},
{
"name": "value",
"valueQuantity": {
"value": 80.0,
"unit": "mmHg",
"system": "http://unitsofmeasure.org",
"code": "mm[Hg]"
}
}
]
}
]
}
]
}
]
}
Response shape
Successful responses return a FHIR R4 Bundle (type: collection) containing the newly created Observation resources — one entry per measurement or composite-measurement submitted. Each observation has:
status:preliminarycategory:vital-signssubjectset to the patientperformerset to the patient
Each request is persisted atomically: either all measurements are created, or none are.
Error behavior
| Status | Scenario |
|---|---|
403 | Client lacks observation.create-vital-signs scope or access to the requested patient context |
422 | Missing/unrecognized parameters, invalid effective-date-time, no measurements provided, unsupported code system, non-UCUM quantity, or more than 150 measurements in one request |
500 | The request was valid but could not be persisted |