---
name: set-character-talents
description: Reference for the 288 character talents in the Set World API, such as acrobatics, alchemy or arcana, each with a line of flavor prose. Use when listing or downloading the talent table, reading the schema of a talent row and of the talents on a rolled character, building a talent tree or picker, or deciding what a talent does in a game.
license: "Free to use when obtained from set.world, commercially too (the API, what it returns and the skills). Its models, animations and textures, Anima included, are CC BY 4.0: free to use with attribution to Jimmy Lee (j@internet.dev). 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.11.7"
  title: Talents
---

# Talents

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

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

## Schema

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

```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 talent

```sh
curl 'https://set.world/api/talents?name=alchemy'     # one talent by name
curl 'https://set.world/api/talents?id=3'             # one talent by id
curl 'https://set.world/api/talents?q=blade'          # every talent 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 talents, drawn uniformly without repeats. `stats.talents` is the count; `traits.talents` 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 talent does

In Set, a talent 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`. Set's own game layer reads no talent either: AnimaSystem's stats, combat and stratagems ignore them, and an Anima's body colour comes from its advantages and disadvantages only ([Character models](https://set.world/skills/anima-character-models)). 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 talents meaning:

```ts
type TalentRule = { talent: string; rank: number; maxRank: number; unlocks: string[]; check?: { stat: StatName; difficulty: number } };
// { talent: '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)).
