channel: add API