One catalog item — the single shape every catalog endpoint + WS event speaks.

interface DealItem {
    allTimeLowCents: null | number;
    artwork: DealArtwork;
    cheapsharkGameId: null | string;
    dealUrl: null | string;
    description: null | string;
    developers: null | string[];
    discountTier: GameDiscountTier;
    endsAt: null | string;
    enrichedAt: null | string;
    firstSeenAt: string;
    flags: DealFlags;
    freeWeekendEndsAt: null | string;
    genres: null | string[];
    id: string;
    isDlcOrAddon: boolean;
    kind: GameKind;
    lastSeenAt: string;
    price: DealPrice;
    publishers: null | string[];
    ratings: null | DealRatings;
    sourceIds: Partial<Record<GameSourceId, string>>;
    sources: GameSourceId[];
    startsAt: null | string;
    steamAppId: null | number;
    store: GameStore;
    tags: null | string[];
    title: string;
    updatedAt: string;
    url: string;
    watched: boolean;
    worth: null | string;
}

Properties

allTimeLowCents: null | number
artwork: DealArtwork
cheapsharkGameId: null | string
dealUrl: null | string

CheapShark redirect URL — use this for deal links when present (terms requirement)

description: null | string
developers: null | string[]

enrichment — null until metadata lands (show a skeleton, not broken UI)

discountTier: GameDiscountTier
endsAt: null | string

claim deadline for free-to-keep items; price-revert for discounts

enrichedAt: null | string
firstSeenAt: string
flags: DealFlags
freeWeekendEndsAt: null | string

end of a Steam play-for-free window — independent of endsAt

genres: null | string[]
id: string
isDlcOrAddon: boolean
kind: GameKind
lastSeenAt: string
price: DealPrice
publishers: null | string[]
ratings: null | DealRatings
sourceIds: Partial<Record<GameSourceId, string>>
sources: GameSourceId[]
startsAt: null | string
steamAppId: null | number
store: GameStore
tags: null | string[]
title: string
updatedAt: string
url: string

canonical store/claim URL — what the user should click

watched: boolean
worth: null | string