- these are the calls used by the dexcom uploader app
- these are in no particular order!
User-Agent: Dexcom%20Share/3.0.2.11 CFNetwork/672.0.2 Darwin/14.0.0
GET
/ShareWebServices/Services/General/SystemUtcTime
Body:
none
Response:
{
"DateTime":"\/Date(1426767421178)\/",
"OffsetMinutes":0
}
POST
/ShareWebServices/Services/General/LoginPublisherAccountByName
Body:
{
"accountName":"yourlogin",
"applicationId":"d8665ade-9673-4e27-9ff6-92db4ce13d13",
"password":"yourpassword"
}
Response:
"e3e3e6a5-coolsessionid-bro”
POST
/ShareWebServices/Services/General/AuthenticatePublisherAccount
Body:
{
"accountName":"yourlogin",
"applicationId":"d8665ade-9673-4e27-9ff6-92db4ce13d13",
"password":"yourpassword"
}
Response:
"e3e3e6a5-coolsessionid-bro”
POST
/ShareWebServices/Services/Publisher/CheckMonitoredReceiverAssignmentStatus?sessionId={YourSessionId}&serialNumber={YourSerialNumber}/
Body:
none
Response:
`AssignedToYou` or `NotAssigned` (plaintext)
POST
/ShareWebServices/Services/Publisher/ReplacePublisherAccountMonitoredReceiver?sessionId={YourSessionId}&serialNumber={YourSerialNumber}
Body:
none
Response:
No Idea, Someone please tell me, if you assign one to yourself that was
already yours you get a 500 error
POST
/ShareWebServices/Services/Publisher/IsRemoteMonitoringSessionActive?sessionId={YourSessionId}
Body:
none
Response:
`true` or `false` (plaintext)
POST
/ShareWebServices/Services/Publisher/StartRemoteMonitoringSession?sessionId={yoursessionid}&serialNumber={YourdexcomSerialNumber}
Body:
none
Response:
just a status, `200`
POST
/ShareWebServices/Services/Publisher/StopRemoteMonitoringSession?sessionId={YourSessionId}
Body:
none
Response:
just a status, `200`
POST
/ShareWebServices/Services/Publisher/UpdatePublisherAccountRuntimeInfo
Body:
{
"sessionId":"YourSessionId",
"runtimeInfo":
{
"DeviceManufacturer":"Apple",
"DeviceModel":"iPhone5,2",
"DeviceOsVersion":"7.0.2",
"AppVersion":"3.0.2.11",
"AppName":"DexcomShare",
"AppNumber":"SW10569",
"DeviceOsName":"iPhone OS"
}
}
Response:
just a status, `200`
POST
/ShareWebServices/Services/Publisher/PostReceiverEgvRecords?sessionId={yourSessionId}
Body:
{
"SN":"YourSerialNumber",
"Egvs":[
{
"Trend":4,
"ST":"\/Date(1426783106000)\/",
"DT":"\/Date(1426754317000)\/",
"Value":97
}
],
"TA":-14365
}
Response:
just a status, `200`
ST
system time, DT
display time, TA
is a time offset, multiply by 1000 and subtract it from the time (so subtracting a negative in this example, which is really adding)
POST
/ShareWebServices/Services/Publisher/ReadPublisherLatestGlucoseValues?sessionId={YourSessionId}&minutes=1440&maxCount=1
Body:
none
Response:
[
{
"DT":"\/Date(1426780716000-0700)\/",
"ST":"\/Date(1426784306000)\/",
"Trend":4,
"Value":99,
"WT":"\/Date(1426769941000)\/"
}
]
POST
/ShareWebServices/Services/Publisher/DoesContactExistByName?sessionId={YourSessionId}&contactName={NameOfNewFollower}
Body:
none
Response:
`true` or `false` (plaintext)
POST
/ShareWebServices/Services/Publisher/CreateContact?sessionId={YourSessionId}&contactName={FollowerName}&emailAddress={FollowerEmail}
Body:
none
Response:
a contact id (needed for the invite!), `123312-af1341123-coolid`
POST
/ShareWebServices/Services/Publisher/CreateSubscriptionInvitation?sessionId={YourSessionId}&contactId={ContactId}
Body:
{
"AlertSettings":{
"HighAlert":{
"MinValue":200,
"AlarmDelay":"PT1H",
"AlertType":1,
"IsEnabled":false,
"RealarmDelay":"PT2H",
"Sound":"High.wav",
"MaxValue":401
},
"LowAlert":{
"MinValue":39,
"AlarmDelay":"PT30M",
"AlertType":2,
"IsEnabled":false,
"RealarmDelay":"PT2H",
"Sound":"Low.wav",
"MaxValue":70
},
"FixedLowAlert":{
"MinValue":39,
"AlarmDelay":"PT0M",
"AlertType":3,
"IsEnabled":true,
"RealarmDelay":"PT30M",
"Sound":"UrgentLow.wav",
"MaxValue":55
},
"NoDataAlert":{
"MinValue":39,
"AlarmDelay":"PT1H",
"AlertType":4,
"IsEnabled":false,
"RealarmDelay":"PT0M",
"Sound":"NoData.wav",
"MaxValue":401
}
},
"Permissions":1,
"DisplayName":"{YourAccountDisplayName}"
}
Note that permissions 1 means they can view your graph data
Response:
a subscriber id for the person you invited! (Usefull for updating their
subscription permissions and such) `793312-af1341123-coolid`
POST
/ShareWebServices/Services/Publisher/ListPublisherAccountSubscriptions?sessionId={YourSessionId}
Body:
none
Response:
[
{
"ContactId":"FollowersContactId",
"ContactName":"FollowersName",
"DateTimeCreated":{
"DateTime":"\/Date(1437101121008)\/",
"OffsetMinutes":0
},
"DateTimeModified":{
"DateTime":"\/Date(1437101121008)\/",
"OffsetMinutes":0
},
"DisplayName":"YourDisplayName",
"InviteExpires":{
"DateTime":"\/Date(1437705921008)\/",
"OffsetMinutes":0
},
"IsEnabled":false,
"IsMonitoringSessionActive":true,
"Permissions":1,
"State":2,
"SubscriberId":"00000000-0000-0000-0000-000000000000",
"SubscriptionId":"theirSubscriptionIdIsuppose?"
}
]
note: maybe we can use this subscription id to send our own custom invites to followers
POST
/ShareWebServices/Services/Publisher/DeleteContact?sessionId={YourSessionId}&contactId={followersContactId}
Body:
none
Response:
just a status, `200`
- getting the image
- getting the subscription display name
- getting the subscription email address
- reading the contact list
- sending changes to the contacts Permissions
- removing a contact
- follower aknowledging alarms
- follower reading invitation info
- follower accepting invitation
- follower updating runtimeInfo
- folower listing all their subscriptions
- read subscription alerts
curl -v \
-H "Accept: application/json" -H "Content-Type: application/json" \
-H "User-Agent: Dexcom Share/3.0.2.11 CFNetwork/711.2.23 Darwin/14.0.0" \
-X POST https://share1.dexcom.com/ShareWebServices/Services/General/LoginPublisherAccountByName \
-d '{"accountName":"YOURLOGIN","applicationId":"d8665ade-9673-4e27-9ff6-92db4ce13d13","password":"YOURPASSWORD"}'
which should recieve a response like
"8c1234deb-323c-4e9d-8362-39cfa23499ed"
which you use to get values like
curl -v \
-H "Content-Length: 0" -H "Accept: application/json" \
-H "User-Agent: Dexcom Share/3.0.2.11 CFNetwork/672.0.2 Darwin/14.0.0" \
-X POST "https://share1.dexcom.com/ShareWebServices/Services/Publisher/ReadPublisherLatestGlucoseValues?sessionId=8c1234deb-323c-4e9d-8362-39cfa23499ed&minutes=1440&maxCount=1"
@osa1 this still gives me an empty result for the glucose values - but does return the account ID and session ID. Tried turning on/off sharing as well as well as rebooting the phone. Can't believe they would make an API so unusable without any documentation explaining the issue.
Is there any way to just get real time glucose values? Feeling like this shouldn't be as hard as it is.