---
name: set-character-skills
description: Reference for the 288 character skills in the Set World API, such as acrobatics, alchemy or arcana, each with a line of flavor prose. Use when listing or downloading the skill table, reading the schema of a skill row and of the skills on a rolled character, building a skill tree or talent picker, or deciding what a skill does in a game.
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: Skills
---

# Skills

Set has 288 character skills. Each is a name and one sentence of flavor, written like a line from a monastic rule. A skill has no mechanic in the API: it is vocabulary for your game.

This page is about the characters' skills. The agent skills that teach Set (this document is one) are listed in [AGENTS.md](https://set.world/AGENTS.md).

```sh
curl https://set.world/api/skills               # JSON
curl 'https://set.world/api/skills?format=csv'  # id,name,flavor
```

## Schema

```ts
type CharacterSkill = { id: number; name: string; flavor: string };   // id: the position in the table, from 0
type SkillsResponse = { data: CharacterSkill[] };
```

```json
{
  "data": [
    { "id": 0, "name": "acrobatics", "flavor": "To move as one unbound by weight, for the body becomes an instrument of grace beyond the common measure" },
    {
      "id": 3,
      "name": "alchemy",
      "flavor": "To discern the hidden virtue within base matter and draw it forth; let the practitioner remember that transformation begins with understanding"
    }
  ]
}
```

Two of the 288 rows are shown. The table opens `acrobatics`, `acting`, `arcana`, `alchemy`, `appraisal`, `aerial attacks`, `animal training`, `animal speech`, `astrology`, `art`.

## Query one skill

```sh
curl 'https://set.world/api/skills?name=alchemy'     # one skill by name
curl 'https://set.world/api/skills?id=3'             # one skill by id
curl 'https://set.world/api/skills?q=blade'          # every skill whose name or flavor has the text
```

```json
{
  "data": [
    {
      "id": 3,
      "name": "alchemy",
      "flavor": "To discern the hidden virtue within base matter and draw it forth; let the practitioner remember that transformation begins with understanding"
    }
  ]
}
```

The filters are owned by [API connection](https://set.world/skills/api-connection); the voice of `flavor` by [Text flavor](https://set.world/skills/text-flavor).

## On a character

`/api/roll/character` gives each character 1 to 4 skills, drawn uniformly without repeats. `stats.skills` is the count; `traits.skills` is the list. Each entry is the table row plus its `index`, as in the example in [Rolling a character](https://set.world/skills/rolling-a-character).

## What a skill does

In Set, a skill adds 25 to the power rating ([Calculations](https://set.world/skills/calculations)) and nothing else: it changes no stat and no attribute. Its prose is part of the content fingerprint, so an edit moves `contentVersion`. Never infer a rule from the flavor sentence: what `alchemy` unlocks, costs or rolls against is your game's design. A hypothetical schema for giving skills meaning:

```ts
type SkillRule = { skill: string; rank: number; maxRank: number; unlocks: string[]; check?: { stat: StatName; difficulty: number } };
// { skill: 'alchemy', rank: 1, maxRank: 5, unlocks: ['brew-potion'], check: { stat: 'intelligence', difficulty: 14 } }
```

Names are data: keep them exactly as returned ([Text flavor](https://set.world/skills/text-flavor)).
