Hacked together a proof of concept to better define the api. A little more messing around and I believe I'll be confident when writing test cases.