First cut at a higher-level api