initial API implementation