an api we can discuss

a lot of stuff which isn't implemented is kind of assumed here

including a lot of control flow :o