Jawbone UP API Discovery
On Saturday I stopped by the Apple store and picked up an UP device by Jawbone. The UP is a wristband and iPhone app that will track your fitness and sleep activity and help encourage you to live a more active life style. It’s very similar to the Fitbit device, and lets you track:
- calories burned
- active/inactive times
- sleep (awake/light/deep sleep)
So far I’m really impressed with both the wristband and iPhone app. However, I was a little disappointed the wristband didn’t support ANT or Bluetooth for data synchronization. The data sync is unique and “low impact” (battery-wise) in that it plugs into the iPhone via the headphone jack and uploads data directly to the app. After some digging I was surprised to see no way to send or save the data. I was curious if the data was just saved to the app, or also synchronized with another server.
As with most of my Quantified Self gadets (Fitbit, Zeo, Withings, Neurosky, etc.) my first reaction was to “free my data”. My understanding is that Jawbone has exposed an API to partners, and will soon be releasing a more public API and ability to download data shortly. Similar to my initial journey with the Fitbit, I was inspired to find an “unofficial” way to get access to the data (e.g. my Fitbit Hacks). I was able to get access and save my personal data for about a year before an official method became available. Luckily Fitbit and other companies like Zeo (especially Zeo) have taken an open approach with their APIs and have embraced the developer community. My hope is that UP will do the same.
In the spirit of filling in the data gaps until that day comes and an official announcement is made I decided to do a bit of exploration yesterday morning. Using my favorite HTTP/SSL sniffer (Charles) and some tinkering with the app I was able to decipher how to get access to all of the UP data. I haven’t written a data scraper script yet, but I was able to verify a number of API requests from the command-line using LWP POST and GET.
I wrote up some detailed notes in my wiki yesterday and have posted a snapshot here:
Jawbone UP API – http://eric-blue.com/projects/up-api/
My hope is this should give others enough information to download their own data for the purpose of backing up and analysis with other software. Since this isn’t officially supported and appears to be used only by their app I would use sparingly (no excessive requests) and don’t do anything that would violate a TOS/AUP (use at your own risk). Otherwise, enjoy!
My other Quantified Self-related projects:
TRAQS.me (Tools for Reporting & Analysis of the Quantified Self)
Fitbit Hacks (the original “unofficial” API)
Zeo (Hacking your way to a better night’s sleep)
NeuroSky Brainwave Visualizer
Mindstream – Neurosky EEG Data streamer
Wow… this is an impressive undertaking! Thanks for making this available.
Thanks for discovering this and taking the time to put the documentation together – really great stuff.
I think that you have the states for “deep” and “light” sleep switched in your documentation.
Thanks for pointing this out. I’ll make sure to update the doc.
[…] band and iPhone app) that tracks your daily activity and inspires you to live healthier (Read Eric’s post about it). And, Zeo measures brainwave activity in order to detect when you’re asleep and what […]
Awesome! I tried doing this myself but gave up after days of fighting with wireshark. Thanks for contributing this!
Thanks so much for putting all this together—the documentation is fantastic!
For anyone interested in using this API in a node.js environment, I just published an NPM module based on this work, which can be installed with
npm install node-up. You can also find the source at http://github.com/jonlong/node-up.
Thanks again, Eric!
So quick question on this, so by default all the request/responses are native json ?
Appreciate the breakdown on the api, its hard for me to get ahold of a gadget and not pretty much look first to find a way to “improve” it.
Did you find out exactly how the jawbone is transmitting its sync data to the iphone, without jawbone having a web interface seems as if a simple local sync app could be created to intercept this and upload.
All depending on how deep the objC aspect goes with native functions on the iphone i guess.
[…] API: N/A (unofficial API exploration) […]
any idea on how to retrieve/set alarms ?
Not sure if you’re aware but Jawbone stores all the data from the App in their cloud and will move with you if you change devices. IE move from an iPhone to an Android.
With that said you can download the raw data in .csv format from their website.
Head to Jawbone.com, login with your account. Goto Account -> settings. Click the “Accounts” tab. Scroll to the bottom and download away. Lots of interesting data in there.
can you confirm to me if your unnoficial API stopped work?
I’ve tried to follow the steps that had found in the documentation but I was unable to reproduce any kind of call.
[…] Blue曾经于2011年11月发表过一篇博文jawbone-up-api-discovery， 介绍了他通过网络侦听Jawbone […]
[…] Blue曾经于2011年11月发表过一篇博文jawbone-up-api-discovery，介绍了他通过网络侦听Jawbone […]
Good stuff discovering the API. Can’t seem to get the authentication step working, constantly getting a bad-request. Any ideas on the status of the API at this point in time?