first sketch of the API i don't even know if this will work