synchronous API