Docket: Fun with Todoist and Beeminder APIs

13 Jun 2016

Python  Technology 

Originally posted at

So, I recently changed over my todo list usage to use Todoist. However, now I had a chunky amount of my phone screen chewed up with both a display of that and my existing Beeminder list, and I wondered if I could somehow merge the two. Also, because my Beeminder emergency days are one of the significant sources of things I need to on a day to day basis, having a single view of things is really quite useful.

Enter Docket (yes, I know that sounds a lot like another tool you may be familiar with…), which will go through and create tasks in Todoist corresponding to Beeminder emergency days. I’d used the Beeminder API before, and was familiar with it, and it uses fairly standard REST-ish methods covering at most of the things people want access to.

The Todoist API is somewhat less user-friendly. Part of this wasn’t helped by their official Python library (which is their only API library AFAIK), which appears to be still part way through a conversion to the latest version of their API, and various items like the “resource_types” argument in their example code doesn’t work any more.

Here’s a list of things I ran into along the way, and this is all with their official HTTP API:

Overall, I get the impression that what they actually built this for was low data-rate syncing, with rare calls to the “sync” command and any changes batched locally as the command structures before being occasionally sent off, but it makes for a very unfriendly experience for anyone coming from outside. I suspect it makes a lot of sense to their internal developers, but this was not designed with external users in mind.

Despite all that, much complaining and head scratching later I was able to build Docket, and the code is available as per always.

Previously: Scrutiny: Github permissions audit and backup tool Next: Dawn: Mobile bus stops display