rework link api to match usage patterns