Building on the books API

Since launching the bookshelves feature in on the web, I’ve been wondering whether we should build a native interface for this in the app. My answer: no. Books are so unique that it feels like they need a dedicated app, just like there is a native app for Goodreads on iOS and Android. Native apps could make it easy to quickly mark a book as “finished reading”, or provide fun features like barcode scanning from the phone camera.

You can make a pretty strong case that we already have too many official iOS apps:, Sunlit, and Wavelength. Books seems like a great third-party opportunity instead.

I’ve documented the bookshelves API in the Help Center. It can do most of what on the web does, with the notable exception of book search. If you are building a books app, you’ll need to “bring your own” book search from Open Library, ISBNdb, Google Books, Amazon, or wherever.

A theoretical app built on could let the user sign in with their account using IndieAuth. Then the app could get the user’s bookshelves, add new books, or post to their blog with a link to the book.

Like most of, the API is based on JSON Feed. Lists of bookshelves and books are just JSON Feed with a little bit of extra data like isbn in a namespace field. When has the book cover, it’s included in image.

There have been some interesting experiments with custom JSON formats or even based on OPML, but as I was reviewing these it seemed like an unusual departure for to not use JSON Feed. We can consider adding additional formats later.

I’m happy to support whoever wants to tackle this. Jon Hays suggested a hackathon for people to get together and tinker with the API, or build an app together. What do y’all think?

In addition to the API, another area where we could experiment is an app that connects bookshelf data from independent web sites. For blogs, the bookshelves are available via Hugo templates, so it’s possible to generate HTML pages that include Microformats. See the IndieWeb wiki for some prior art about this.

Manton Reece @manton