---
name: set-equipment-slots
description: Reference for Set's 13 equipment slots and the 15 items a character wears. Use when iterating a character's equipment in canonical order, building an inventory or loadout screen, reading the schema of the slots endpoint and of an equipment object, reading each slot's capacity, odds and advisory attribute domain, or applying the optional equipment stat bonus.
license: Free to use when obtained from set.world, commercially too (the API, what it returns, the skills and downloaded models). The source code of Set is © Jimmy Lee under CC BY-NC 4.0 and its commercial use needs a paid waiver.
metadata:
  version: "0.8.9"
  title: Slots
---

# Slots

A character wears fifteen items in thirteen slots. `hand` and `finger` hold two items each; every other slot holds one. This skill owns the slot order, the slot odds and the optional equipment bonus.

```sh
curl https://set.world/api/slots               # JSON
curl 'https://set.world/api/slots?format=csv'  # slot,capacity,setIndex,affects
```

## Schema

```ts
type Slot = 'tool' | 'offhand' | 'head' | 'neck' | 'back' | 'shoulders' | 'chest' | 'waist' | 'legs' | 'feet' | 'wrist' | 'hand' | 'finger';

type SlotsResponse = {
  order: Slot[];                   // the canonical order: iterate equipment in it
  totalItems: 15;
  slots: Array<{ slot: Slot; capacity: 1 | 2; affects: string[]; setIndex: number }>;   // setIndex: the slot's gear table
};
```

```json
{
  "order": ["tool", "offhand", "head", "neck", "back", "shoulders", "chest", "waist", "legs", "feet", "wrist", "hand", "finger"],
  "totalItems": 15,
  "slots": [
    { "slot": "tool", "capacity": 1, "affects": ["physicalDamage", "magicalDamage", "attackSpeed"], "setIndex": 8 },
    { "slot": "offhand", "capacity": 1, "affects": ["physicalDamageReduction", "actionDamage"], "setIndex": 9 },
    { "slot": "head", "capacity": 1, "affects": ["maxHealth", "visionRange"], "setIndex": 5 },
    { "slot": "neck", "capacity": 1, "affects": ["ailmentResistance", "magicalDamageReduction"], "setIndex": 7 },
    { "slot": "back", "capacity": 1, "affects": ["physicalDamageReduction", "carryCapacity"], "setIndex": 15 },
    { "slot": "shoulders", "capacity": 1, "affects": ["carryCapacity", "maxHealth"], "setIndex": 6 },
    { "slot": "chest", "capacity": 1, "affects": ["maxHealth", "physicalDamageReduction"], "setIndex": 17 },
    { "slot": "waist", "capacity": 1, "affects": ["stamina", "carryCapacity"], "setIndex": 16 },
    { "slot": "legs", "capacity": 1, "affects": ["walkSpeed", "stamina"], "setIndex": 12 },
    { "slot": "feet", "capacity": 1, "affects": ["dodgeRate", "jumpHeight"], "setIndex": 13 },
    { "slot": "wrist", "capacity": 1, "affects": ["attackSpeed", "castSpeed"], "setIndex": 10 },
    { "slot": "hand", "capacity": 2, "affects": ["physicalDamage", "actionDamage"], "setIndex": 11 },
    { "slot": "finger", "capacity": 2, "affects": ["criticalHitChance", "ailmentResistance"], "setIndex": 14 }
  ]
}
```

That is the complete response. In CSV, `affects` is one cell with the names separated by spaces.

## Each slot

| Slot | Base types | Odds on one item roll | Material table |
| --- | ---: | ---: | --- |
| `tool` (the mainhand) | 145 | 17.93% | tools |
| `offhand` | 144 | 17.93% | tools |
| `head` | 20 | 9.50% | wearables |
| `neck` | 8 | 0.65% | wearables |
| `back` | 5 | 1.94% | wearables |
| `shoulders` | 8 | 9.50% | wearables |
| `chest` | 26 | 9.50% | wearables |
| `waist` | 4 | 9.50% | wearables |
| `legs` | 10 | 9.50% | wearables |
| `feet` | 5 | 9.50% | wearables |
| `wrist` | 13 | 1.94% | wearables |
| `hand` | 6 | 1.94% | wearables |
| `finger` | 7 | 0.65% | wearables |

A character or set roll keeps drawing until every slot is full, so those always have all 15. The base types of a slot are the entries of its gear table, `/api/tables/<slot>` ([Item properties](https://set.world/skills/item-properties)); the mainhand's base type decides the class ([Classes](https://set.world/skills/character-classes)).

## The equipment object

`equipment` in `/api/roll/character` and `/api/roll/set` is keyed by slot. `hand` and `finger` are arrays of two items; the rest are single items. The type and a filled example are in [Rolling an item](https://set.world/skills/rolling-an-item) and [Rolling a character](https://set.world/skills/rolling-a-character).

```js
const SLOT_ORDER = ['tool', 'offhand', 'head', 'neck', 'back', 'shoulders', 'chest', 'waist', 'legs', 'feet', 'wrist', 'hand', 'finger'];
const items = SLOT_ORDER.flatMap((slot) => [character.equipment[slot]].flat());   // 15 items
```

`equipmentOrbBreakdown` (characters) and `orbBreakdown` (sets) give the same walk ready-made: one `{ slot, affects, items }` row per slot.

## What `affects` means

It is a theme, not a modifier. Set never ships resolved item effects: `affects` names the attributes an item in that slot would naturally touch. What an item actually does is your rule.

## The optional equipment bonus

Off by default. With `equipmentBonus=1` on `/api/roll/character`, each equipped item adds points to one base stat by its grade, clamped at 24, and `finalStats` includes them.

| Item grade | Points per item |
| --- | ---: |
| F | 0 |
| E | 0 |
| D | 0 |
| C | 1 |
| B | 1 |
| A | 2 |
| S | 3 |

| Slots | Stat that receives the points |
| --- | --- |
| tool, hand | strength |
| offhand, feet | dexterity |
| head | intelligence |
| neck | wisdom |
| back, legs | agility |
| chest, waist | vitality |
| wrist | perception |
| shoulders | resolve |
| finger | luck |

Both hand items and both finger items count. The response reports the points as `equipmentBonuses`.

## A schema for your loadout

```ts
type Loadout = {
  characterId: string;
  slots: Record<Exclude<Slot, 'hand' | 'finger'>, string | null> & { hand: [string | null, string | null]; finger: [string | null, string | null] };   // your InventoryItem IDs
};
```

Layer order and how each slot is worn on a body: [Item models](https://set.world/skills/anima-item-models).
