GET /v3/bidder/favorites
const url = 'https://api-ha-prod-p8.handbid.dev/v3/bidder/favorites?limit=20';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://api-ha-prod-p8.handbid.dev/v3/bidder/favorites?limit=20' \ --header 'Authorization: Bearer <token>'NEW (HAN-1586, 2026-05-19). Home-screen rail. Items the authenticated user has favorited via user_favorite_item_relation.
Response: { items: [ItemCard...], totalCount }. Each item is a standard ItemCardSerializer card + extra field favoritedAt (int epoch from ufir.dateCreated). isFavorite is structurally true on every row.
Sort: dateCreated DESC, ufir.id DESC (most-recently-favorited first; deterministic tiebreaker).
Visibility: items from auctions the caller can’t see are filtered at SQL level via AuctionScopeFilter::applyToItemsQuery (same precedence as loadAuctionForItems).
Empty list: returns {items: [], totalCount: 0} with HTTP 200 (NOT 404).
Cache: per-user key v3:bidder:favorites:{md5}:{userId}, 15s TTL, tag V3CacheTags::userFavorites.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Query Parameters
Section titled “Query Parameters ”Default 20, range 1-100 (home-rail default)
Example
20Responses
Section titled “ Responses ”Successful response