api: add interactive()