Node-based API (mostly done)