---
title: "S24 bindings"
description: "Data-binding map of Growth · Growth: every field to its source, and what each required state shows."
source: "design/hifi/S24/bindings.md"
---

> Part of [Brand and design](/design/llms.txt). Every page: [llms.txt](/llms.txt).

# Data-binding map: S24 Growth · Growth

> Generated by `botgumi-design index` from `../../screens.json`. Edit that file, not this page.

Every field [S24](/design/hifi/s24/index.md) shows and where it comes from.

| Field | Source (endpoint or local state) | Format | Fallback |
|---|---|---|---|
| range | `call GET /growth` · `GET /v1/growth?range=4w\|8w\|12w` | segmented | 8w |
| language chips | `api GET /growth languages[]` · `growth.languages[]` → `?language=` | shown only when `languages.length > 1`; "All languages" + endonym + session count | hidden |
| ability | `api GET /growth ability` · `growth.ability`, `ability_delta_30d`, `sample_count`, `algo_version` | display + delta | null → baseline card `growth.baseline.title` with `sample_count` |
| ability | `api GET /growth ability_delta_30d` |  |  |
| ability | `api GET /growth sample_count` |  |  |
| ability | `api GET /growth algo_version` |  |  |
| level badge | `api GET /me level.level` · `me.level.level` | — | — |
| trend label | `api GET /growth trend` · `growth.trend` | `growth.trend.<value>` | — |
| chart | `api GET /growth series[].week_start` · `growth.series[].week_start / value / sample_n` | one point per week; `value = null && sample_n = 0` → gap marker "None"; no interpolation; weeks before the first session are blank; partial current week (**CCR-5**) dashed | — |
| chart | `api GET /growth series[].value` |  |  |
| chart | `api GET /growth series[].sample_n` |  |  |
| hook | `api GET /growth next_unlock` · `growth.next_unlock` (Accept-Language) | lock pill | hidden when null |
| dimensions | `api GET /growth dimensions[].label` · `growth.dimensions[].label (Accept-Language) / score / delta_30d / color_token` | bars | null score → "—" + "shown after 3 sessions" |
| dimensions | `api GET /growth dimensions[].score` |  |  |
| dimensions | `api GET /growth dimensions[].delta_30d` |  |  |
| dimensions | `api GET /growth dimensions[].color_token` |  |  |
| micro-skills | `api GET /growth micro_skills[].title` · `growth.micro_skills[].title (Accept-Language) / suggested / achieved / mastery` + current focus = `me.focus.micro_skill_id` | pips + % | `suggested = 0` → "not suggested yet" |
| micro-skills | `api GET /growth micro_skills[].suggested` |  |  |
| micro-skills | `api GET /growth micro_skills[].achieved` |  |  |
| micro-skills | `api GET /growth micro_skills[].mastery` |  |  |
| micro-skills | `api GET /me focus.micro_skill_id` |  |  |
| achievements | `api GET /growth achievements[]` · `growth.achievements[]` (Accept-Language) | unlocked lime / locked progress | — |
| recent sessions | `api GET /growth recent_sessions[]` · `growth.recent_sessions[]` → `article.title` (article language), `completed_at`, `round1_overall`, `round2_overall`, `duration_delta_ms`, `xp_awarded` | row | hide section when empty |
| empty | `api GET /growth state` · `growth.state = empty` | empty state | — |
| `GET /v1/growth?range=4w\|8w\|12w&language=` | `call GET /growth` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `growth.ability_delta_30d` | `api GET /growth ability_delta_30d` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `growth.achievements[0] (Accept-Language)` | `api GET /growth achievements[]` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `growth.achievements[1] (Accept-Language)` | `api GET /growth achievements[]` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `growth.achievements[2] (Accept-Language)` | `api GET /growth achievements[]` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `growth.achievements[3] (Accept-Language)` | `api GET /growth achievements[]` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `growth.achievements[4] (Accept-Language)` | `api GET /growth achievements[]` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `growth.achievements[5] (Accept-Language)` | `api GET /growth achievements[]` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `growth.achievements[6] (Accept-Language)` | `api GET /growth achievements[]` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `growth.dimensions[0].delta_30d` | `api GET /growth dimensions[].delta_30d` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `growth.dimensions[0].label (Accept-Language)` | `api GET /growth dimensions[].label` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `growth.dimensions[0].score` | `api GET /growth dimensions[].score` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `growth.dimensions[1].delta_30d` | `api GET /growth dimensions[].delta_30d` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `growth.dimensions[1].label (Accept-Language)` | `api GET /growth dimensions[].label` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `growth.dimensions[1].score` | `api GET /growth dimensions[].score` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `growth.dimensions[2].delta_30d` | `api GET /growth dimensions[].delta_30d` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `growth.dimensions[2].label (Accept-Language)` | `api GET /growth dimensions[].label` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `growth.dimensions[2].score` | `api GET /growth dimensions[].score` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `growth.dimensions[3].delta_30d` | `api GET /growth dimensions[].delta_30d` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `growth.dimensions[3].label (Accept-Language)` | `api GET /growth dimensions[].label` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `growth.dimensions[3].score` | `api GET /growth dimensions[].score` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `growth.languages[0].language / sessions → GET /v1/growth?language=` | `api GET /growth languages[].language` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `growth.languages[0].language / sessions → GET /v1/growth?language=` | `api GET /growth languages[].sessions` |  |  |
| `growth.languages[0].language / sessions → GET /v1/growth?language=` | `call GET /growth` |  |  |
| `growth.languages[1].language / sessions → GET /v1/growth?language=` | `api GET /growth languages[].language` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `growth.languages[1].language / sessions → GET /v1/growth?language=` | `api GET /growth languages[].sessions` |  |  |
| `growth.languages[1].language / sessions → GET /v1/growth?language=` | `call GET /growth` |  |  |
| `growth.micro_skills[0] (mastery = achieved/suggested, last 10 sessions)` | `api GET /growth micro_skills[]` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `growth.micro_skills[1] (mastery = achieved/suggested, last 10 sessions)` | `api GET /growth micro_skills[]` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `growth.micro_skills[2] (mastery = achieved/suggested, last 10 sessions)` | `api GET /growth micro_skills[]` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `growth.micro_skills[3] (mastery = achieved/suggested, last 10 sessions)` | `api GET /growth micro_skills[]` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `growth.micro_skills[4] (mastery = achieved/suggested, last 10 sessions)` | `api GET /growth micro_skills[]` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `growth.micro_skills[5] (mastery = achieved/suggested, last 10 sessions)` | `api GET /growth micro_skills[]` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `growth.micro_skills[6] (mastery = achieved/suggested, last 10 sessions)` | `api GET /growth micro_skills[]` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `growth.next_unlock (Accept-Language)` | `api GET /growth next_unlock` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `growth.recent_sessions[0]` | `api GET /growth recent_sessions[]` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `growth.recent_sessions[1]` | `api GET /growth recent_sessions[]` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `growth.recent_sessions[2]` | `api GET /growth recent_sessions[]` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `growth.sample_count (ability = null)` | `api GET /growth sample_count` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `growth.sample_count + algo_version` | `api GET /growth sample_count` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `growth.sample_count + algo_version` | `api GET /growth algo_version` |  |  |

## Binds on the boards

The `data-bind` values across every state.

- `GET /v1/growth?range=4w|8w|12w&language=`
- `growth.ability`
- `growth.ability_delta_30d`
- `growth.achievements[0] (Accept-Language)`
- `growth.achievements[1] (Accept-Language)`
- `growth.achievements[2] (Accept-Language)`
- `growth.achievements[3] (Accept-Language)`
- `growth.achievements[4] (Accept-Language)`
- `growth.achievements[5] (Accept-Language)`
- `growth.achievements[6] (Accept-Language)`
- `growth.dimensions[0].delta_30d`
- `growth.dimensions[0].label (Accept-Language)`
- `growth.dimensions[0].score`
- `growth.dimensions[1].delta_30d`
- `growth.dimensions[1].label (Accept-Language)`
- `growth.dimensions[1].score`
- `growth.dimensions[2].delta_30d`
- `growth.dimensions[2].label (Accept-Language)`
- `growth.dimensions[2].score`
- `growth.dimensions[3].delta_30d`
- `growth.dimensions[3].label (Accept-Language)`
- `growth.dimensions[3].score`
- `growth.languages[0].language / sessions → GET /v1/growth?language=`
- `growth.languages[1].language / sessions → GET /v1/growth?language=`
- `growth.micro_skills[0] (mastery = achieved/suggested, last 10 sessions)`
- `growth.micro_skills[1] (mastery = achieved/suggested, last 10 sessions)`
- `growth.micro_skills[2] (mastery = achieved/suggested, last 10 sessions)`
- `growth.micro_skills[3] (mastery = achieved/suggested, last 10 sessions)`
- `growth.micro_skills[4] (mastery = achieved/suggested, last 10 sessions)`
- `growth.micro_skills[5] (mastery = achieved/suggested, last 10 sessions)`
- `growth.micro_skills[6] (mastery = achieved/suggested, last 10 sessions)`
- `growth.next_unlock (Accept-Language)`
- `growth.recent_sessions[0]`
- `growth.recent_sessions[1]`
- `growth.recent_sessions[2]`
- `growth.sample_count (ability = null)`
- `growth.sample_count + algo_version`
- `growth.series[].week_start / value / sample_n`
- `growth.state = empty`
- `growth.trend`
- `me.level.level`

## States

- Loading: From [states.md](/design/states/index.md) (Growth): chart/card skeletons
- Empty: growth.state = empty (0 sessions).
- Error (retryable / not): From [states.md](/design/states/index.md) (Growth): inline Retry card · fatal: generic error
- Offline: From [states.md](/design/states/index.md) (Growth): cached `/growth` + banner
