abstracted api