wrap payload in callback