Skip to content
Last updated

Quick Summary

One of:

Blood glucose value, in mg/dL

unitsstring(Blood Unit (mg/dL))required
Enum"mg/dL""mg/dl"
Example: "mg/dL"
valueinteger(int32)(Blood Value (mg/dL))[ 0 .. 1000 ]required

An integer value representing a mg/dL value.

Example: 105
annotationsArray of Annotation (object) or Blood Glucose Out of Range (object)(Annotation Array)[ 0 .. 100 ] itemsunique

An array of annotations.

archivedTimestring(date-time)(Date/Time)read-only
Example: "2017-02-06T02:37:46Z"
archivedDatasetIdstring(Data Set ID)[ 17 .. 37 ] characters^(upid_[0-9a-f]{12}|upid_[0-9a-f]{32}|[0-9a-f...
Example: "ce8cc5f7595575945f91fc6710db6fef"
associationsArray of Association (blob) (object) or Association (datum) (object) or Association (image) (object) or Association (url) (object)(Association Array)

An array of associations for the resource.

clockDriftOffsetinteger(int64)(Clock Drift Offset)[ -86400000 .. 86400000 ]

Clock drift offset, expressed as milliseconds.

Example: 0
conversionOffsetinteger(int64)(Conversion Offset)

Conversion offset, expressed as milliseconds.

Example: 0
createdTimestring(date-time)(Date/Time)
Example: "2017-02-06T02:37:46Z"
createdUserIdstring(Tidepool User ID)^([0-9a-f]{10}|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-...read-only

String representation of a Tidepool User ID. Old style IDs are 10-digit strings consisting of only hexadeximcal digits. New style IDs are 36-digit UUID v4

deduplicatorobject(Deduplicator Descriptor)
deletedTimestring(date-time)(Date/Time)
Example: "2017-02-06T02:37:46Z"
deletedUserIdstring(Tidepool User ID)^([0-9a-f]{10}|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-...read-only

String representation of a Tidepool User ID. Old style IDs are 10-digit strings consisting of only hexadeximcal digits. New style IDs are 36-digit UUID v4

deviceIdstring(Device ID)non-empty

Globally unique to device and repeatable with each upload, e.g. device make and model with serial number

Example: "MMT-1711:12345678"
deviceTimestring(Date/Time without Timezone)^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$
Example: "2017-02-06T02:37:46"
historyArray of objects(Event History [Proposed])

Revision history of the event

idstring(Data Set ID)[ 17 .. 37 ] characters^(upid_[0-9a-f]{12}|upid_[0-9a-f]{32}|[0-9a-f...required
Example: "ce8cc5f7595575945f91fc6710db6fef"
locationobject(Location)

Location information associated with the resource. One or both of name and gps must be specified.

modifiedTimestring(date-time)(Date/Time)
Example: "2017-02-06T02:37:46Z"
modifiedUserIdstring(Tidepool User ID)^([0-9a-f]{10}|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-...read-only

String representation of a Tidepool User ID. Old style IDs are 10-digit strings consisting of only hexadeximcal digits. New style IDs are 36-digit UUID v4

notesArray of strings(Note Array)[ 1 .. 100 ] items

An array of 1 to 100 notes.

originobject(Origin)

External origin information for the source of the resource.

payloadobject(Payload)

Grab bag field for data that isn't yet part of the data model. The maximum size is 4K bytes.

sourcestring
Value"carelink"
tagsArray of strings(Tag Array)

An array of tags.

timestring(date-time)(Date/Time)required
Example: "2017-02-06T02:37:46Z"
timezonestring(Time Zone)
Example: "Europe/London"
timezoneOffsetinteger(int32)(Time Zone offset)[ -10080 .. 10080 ]

Time zone offset, expressed as positive or negative number of minutes from UTC.

Example: -420
typestring(Tidepool Data Type)required

Data type

Enum"cbg""alert""basal""bloodKetone""bolus""cgmSettings""controllerSettings""controllerStatus""deviceEvent""deviceStatus"
Example: "upload"
uploadIdstring(Upload ID)[ 17 .. 32 ] characters^([0-9a-f]{32}|upid_[0-9a-f]{12})$

An upload identifier; this field should be the uploadId of the corresponding upload record

Example: "0d92d5c1c22117a18f3620b9e24d3c06"
trendstring(Glucose Trend)

Trends are annotated in terms of slow, moderate and rapid, since different manufacturers use different arrow glyphs.

Enum"constant""slowFall""slowRise""moderateFall""moderateRise""rapidFall""rapidRise"
trendRateUnitsstring(Glucose Rate Units (mg/dL/minute))
Enum"mmol/L/minute""mg/dL/minute"
Example: "mg/dL/minute"
trendRatenumber(double)(Glucose Trend Rate)[ -100 .. 100 ]
sampleIntervalnumber(int32)(Glucose Sample Interval)[ 0 .. 86400000 ]
backfilledboolean(Glucose Backfilled)
guidstringDeprecated

A string ID. Added to each event during data processing in the Tidepool Uploader or upon ingestion by the platform data ingestion service.


Type (type)

This is the Tidepool data type for continuous glucose monitor sensor data. "CBG" is an abbreviation of "continuous blood glucose" and contrasts with "SMBG," abbreviating "self-monitored blood glucose." SMBG is the Tidepool data type for traditional fingerstick blood glucose meter data.

The device time field is only optional for this data type. This is because Tidepool is now ingesting Dexcom G5 and G6 data via integration with Apple's HealthKit, which only stores a UTC-anchored timestamp and does not have "receiver display time" like earlier generations of Dexcom devices.


Trend Rate Units (trendRateUnits)

A continuous glucose monitor may optionally report the trend rate. That is, the rate at which the glucose value has been changing over some period of time, usually on the order of minutes. If this is available then trendRateUnits and trendRate may be specified to capture this data. Valid values for trendRateUnits are mmol/L/minute and mg/dL/minute.


Trend Rate (trendRate)

A continuous glucose monitor may optionally report the trend rate. That is, the rate at which the glucose value has been changing over some period of time, usually on the order of minutes. If this is available then trendRateUnits and trendRate may be specified to capture this data. The trendRate is a floating point value whose valid range depends upon the trendRateUnits. For a trendRateUnits of mmol/L/minute then the range is from -5.5 to 5.5 and for mg/dL/minute it is -100.0 to 100.0.


Sample Interval (sampleInterval)

With the latest generation of continuous glucose monitors, different devices may support different intervals between glucose samples. For example, every 5 minutes or every 15 minutes between glucose samples. In fact, some newer devices may even report multiple sample intervals from different glucose data streams. For example, a device that reports both 1-minute and 5-minutes glucose samples.

In order to distinguish between sample intervals and to assist with accurate statistical calculations, the sampleInterval should be specified, if it is known. The value must be an integer representing number of milliseconds between samples for the data stream that a datum belongs to. For example, if a device reports both 1-minute and 5-minute samples, then the upload would contain some cbg data with a sample interval of 60000 (milliseconds in 1 minute) and others with a sample interval of 300000 (milliseconds in 5 minutes). The typical sample intervals are 60000 (milliseconds in 1 minute), 300000 (milliseconds in 5 minutes), and 900000 (milliseconds in 15 minutes).

While this field is optional, it is strongly encouraged to provide this field, assuming definitive information regarding sample interval is available from the device.


Backfilled (backfilled)

The backfilled field, an optional boolean, is used to indicate whether this datum was backfilled from the continuous glucose monitor sensor to the device capturing the data. For example, if the CGM sensor is out-of-range of the mobile phone capturing the data, then when the CGM sensor comes back in-range of the mobile phone, the historic sensor data (while the CGM sensor was out-of-range) is "backfilled" to the mobile phone. If it is definitively known that this datum was indeed backfilled, then this field should be set to true. If it is definitely known that this datum was not backfilled, then this field should be set to false. If it is not definitely known one-way-or-the-other, then this field should not be specified.

While this field is optional, it is strongly encouraged to provide this field, assuming definitive information regarding backfill is available from the device.


Examples

Example (client)
{
    "type": "cbg",
    "units": "mmol/L",
    "value": 3.996538553552784,
    "trendRate": -0.4,
    "trendRateUnits": "mmol/L/minute",
    "sampleInterval": 300000,
    "clockDriftOffset": 0,
    "conversionOffset": 0,
    "deviceId": "DevId0987654321",
    "deviceTime": "2018-05-14T18:17:07",
    "guid": "82bd8ef1-cfa1-4b49-9230-e2cecac7c5cd",
    "id": "b8858168bd4e447184ee7c7743ffe303",
    "time": "2018-05-14T08:17:07.384Z",
    "timezoneOffset": 600,
    "uploadId": "SampleUploadId"
}
Example (ingestion)
{
    "type": "cbg",
    "units": "mg/dL",
    "value": 421,
    "trendRate": -2.2,
    "trendRateUnits": "mg/dL/minute",
    "sampleInterval": 60000,
    "clockDriftOffset": 0,
    "conversionOffset": 0,
    "deviceId": "DevId0987654321",
    "deviceTime": "2018-05-14T18:17:07",
    "time": "2018-05-14T08:17:07.385Z",
    "timezoneOffset": 600,
    "uploadId": "SampleUploadId"
}
Example (storage)
{
    "type": "cbg",
    "units": "mmol/L",
    "value": 27.25417263603357,
    "trendRate": -0.4,
    "trendRateUnits": "mmol/L/minute",
    "sampleInterval": 300000,
    "_active": true,
    "_groupId": "abcdef",
    "_schemaVersion": 0,
    "_version": 0,
    "clockDriftOffset": 0,
    "conversionOffset": 0,
    "createdTime": "2018-05-14T08:17:12.385Z",
    "deviceId": "DevId0987654321",
    "deviceTime": "2018-05-14T18:17:07",
    "guid": "6ad8322a-e29d-4db7-825f-e0ad4c45d723",
    "id": "7779ad3759b14d1fadda7b5bab6d79bd",
    "time": "2018-05-14T08:17:07.385Z",
    "timezoneOffset": 600,
    "uploadId": "SampleUploadId"
}

Keep Reading