Register each DLC as a separate App ID in the Steamworks partner portal, associated with the base game App ID, and define it as DLC in the app configuration
In the game client, call IsDlcInstalled with the DLC's App ID to check whether the DLC is both owned and currently installed on the local machine
If the DLC is owned but not installed, call InstallDLC with the DLC App ID to trigger a background download without requiring the game to restart
Register a DlcInstalled callback to receive a notification when a DLC finishes installing mid-session so the game can unlock the associated content dynamically
To enumerate all DLC associated with the base game, call GetDLCCount and iterate with GetDLCDataByIndex to retrieve each DLC's App ID, owned status, and name
For server-side ownership verification, use the ISteamUser/CheckAppOwnership Steamworks Web API endpoint with the user's SteamID64 and the DLC App ID to confirm entitlement independently of the client
Known gotchas
IsDlcInstalled returns false if the DLC is owned but not yet installed; distinguish between 'not owned' and 'not installed' by cross-referencing GetDLCDataByIndex ownership status with install status
DLC App IDs must be used — not item definition IDs or other identifiers — for all IsDlcInstalled, InstallDLC, and ownership check calls; using the wrong ID type silently returns false
Server-side ownership checks require a publisher Web API key and are subject to rate limits; cache ownership results per session and avoid calling the Web API on every game action
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp