First pass at a user api, but it's very far from reality.