Like/unlike are POST/DELETE on /api/likes/{type}/{id}; idempotent (204 on repeats). List endpoints return Page<TrackRef|AlbumRef|ArtistRef> sorted liked_at DESC. /api/likes/ids returns flat id arrays for the client-side heart-button cache.