Skip to main content

InventoryHub

WebSocket hub for inventory operations. All operations verify that the character belongs to the authenticated user.

Endpoint: /inventoryHub

Authorization: All methods require authentication ([Authorize])

Methods

GetBagGrid

Get the bag grid state for a character (placement positions for items).

public async Task<InventoryGrid> GetBagGrid(Guid characterId, string seasonId)

Returns: InventoryGrid

{
width: number;
height: number;
items: GridItem[]; // Items with positions
}

GetBagItems

Get all items in a character's bag.

public async Task<IReadOnlyDictionary<Guid, Item>> GetBagItems(
Guid characterId,
string seasonId)

Returns: Record<string, Item> - Map of item ID to Item

Item Structure:

{
itemId: string;
baseTypeId: string;
name: string;
rarity: ItemRarity; // Normal, Magic, Rare, Unique
itemLevel: number;
prefixes: Modifier[];
suffixes: Modifier[];
implicits: Modifier[];
sockets: Socket[];
quality: number;
identified: boolean;
}

GetEquipped

Get equipped items for a character.

public async Task<IReadOnlyDictionary<EquipmentSlot, Item>> GetEquipped(
Guid characterId,
string seasonId)

EquipmentSlot Enum:

enum EquipmentSlot {
Head = 0,
Body = 1,
Gloves = 2,
Boots = 3,
MainHand = 4,
OffHand = 5,
Amulet = 6,
Ring1 = 7,
Ring2 = 8,
Belt = 9
}

MoveBagItem

Move an item within the bag grid.

public async Task<bool> MoveBagItem(
Guid characterId,
string seasonId,
Guid itemId,
int newX,
int newY)

Returns: boolean - true if move succeeded, false if position blocked


Equip

Equip an item from the bag to an equipment slot.

public async Task<EquipResult> Equip(
Guid characterId,
string seasonId,
Guid bagItemId,
EquipmentSlot slot)

Returns: EquipResult

{
success: boolean;
swappedItem?: Item; // Previously equipped item (now in bag)
errorMessage?: string;
}

Unequip

Unequip an item from an equipment slot to the bag.

public async Task<Item?> Unequip(
Guid characterId,
string seasonId,
EquipmentSlot slot)

Returns: The unequipped Item, or null if slot was empty.


GetStats

Get calculated character stats (including equipment bonuses).

public async Task<CharacterStats> GetStats(Guid characterId, string seasonId)

Returns: CharacterStats

{
baseStats: Record<string, number>; // Without equipment
totalStats: Record<string, number>; // With equipment bonuses
bonuses: StatBonus[]; // Breakdown of bonuses
}

Inventory Architecture

Item Movement Flow