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

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

# Data-binding map: S30 Global · Resume session

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

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

| Field | Source (endpoint or local state) | Format | Fallback |
|---|---|---|---|
| resume sheet | `api GET /home resume_session` · `home.resume_session` (SessionSummary) or local unsent recording | — | — |
| `GET /v1/sessions/{id} → route by stage` | `call GET /sessions/{id}` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `POST /v1/sessions {article_id, kind: daily}` | `call POST /sessions` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `POST /v1/sessions/{id}/abandon` | `call POST /sessions/{id}/abandon` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `home.display_name` | `api GET /home display_name` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `home.focus.title (Accept-Language)` | `api GET /home focus.title` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `home.greeting (Accept-Language)` | `api GET /home greeting` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `home.level.level` | `api GET /home level.level` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `home.level.title (Accept-Language)` | `api GET /home level.title` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `home.level.xp_into_level / xp_for_next` | `api GET /home level.xp_into_level` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `home.level.xp_into_level / xp_for_next` | `api GET /home level.xp_for_next` |  |  |
| `home.local_date_label (Accept-Language)` | `api GET /home local_date_label` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `home.quick_picks[0].article.id` | `api GET /home quick_picks[].article.id` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `home.quick_picks[0].subtitle` | `api GET /home quick_picks[].subtitle` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `home.quick_picks[0].title` | `api GET /home quick_picks[].title` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `home.quick_picks[0].topic.glyph / color_token` | `api GET /home quick_picks[].topic.glyph` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `home.quick_picks[0].topic.glyph / color_token` | `api GET /home quick_picks[].topic.color_token` |  |  |
| `home.resume_session.article.title` | `api GET /home resume_session.article.title` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `home.resume_session.round1_overall` | `api GET /home resume_session.round1_overall` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `home.resume_session.stage + created_at` | `api GET /home resume_session.stage` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `home.resume_session.stage + created_at` | `api GET /home resume_session.created_at` |  |  |
| `home.streak.current / today_done / at_risk` | `api GET /home streak.current` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `home.streak.current / today_done / at_risk` | `api GET /home streak.today_done` |  |  |
| `home.streak.current / today_done / at_risk` | `api GET /home streak.at_risk` |  |  |
| `home.today_quest.article.title` | `api GET /home today_quest.article.title` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `home.today_quest.article.topic.name / length.label / est_read_seconds` | `api GET /home today_quest.article.topic.name` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `home.today_quest.article.topic.name / length.label / est_read_seconds` | `api GET /home today_quest.article.length.label` |  |  |
| `home.today_quest.article.topic.name / length.label / est_read_seconds` | `api GET /home today_quest.article.est_read_seconds` |  |  |
| `home.today_quest.steps[0].state + label` | `api GET /home today_quest.steps[].state` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `home.today_quest.steps[0].state + label` | `api GET /home today_quest.steps[].label` |  |  |
| `home.today_quest.steps[1].state + label` | `api GET /home today_quest.steps[].state` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `home.today_quest.steps[1].state + label` | `api GET /home today_quest.steps[].label` |  |  |
| `home.today_quest.steps[2].state + label` | `api GET /home today_quest.steps[].state` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `home.today_quest.steps[2].state + label` | `api GET /home today_quest.steps[].label` |  |  |
| `home.today_quest.xp_reward` | `api GET /home today_quest.xp_reward` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `home.topics[0].name` | `api GET /home topics[].name` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `home.topics[1].name` | `api GET /home topics[].name` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `home.topics[2].name` | `api GET /home topics[].name` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `home.topics[3].name` | `api GET /home topics[].name` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `home.topics[4].name` | `api GET /home topics[].name` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |

## Binds on the boards

The `data-bind` values across every state.

- `GET /v1/sessions/{id} → route by stage`
- `POST /v1/sessions {article_id, kind: daily}`
- `POST /v1/sessions/{id}/abandon`
- `home.display_name`
- `home.focus.title (Accept-Language)`
- `home.greeting (Accept-Language)`
- `home.level.level`
- `home.level.title (Accept-Language)`
- `home.level.xp_into_level / xp_for_next`
- `home.local_date_label (Accept-Language)`
- `home.quick_picks[0].article.id`
- `home.quick_picks[0].subtitle`
- `home.quick_picks[0].title`
- `home.quick_picks[0].topic.glyph / color_token`
- `home.resume_session.article.title`
- `home.resume_session.round1_overall`
- `home.resume_session.stage + created_at`
- `home.streak.current / today_done / at_risk`
- `home.today_quest.article.title`
- `home.today_quest.article.topic.name / length.label / est_read_seconds`
- `home.today_quest.steps[0].state + label`
- `home.today_quest.steps[1].state + label`
- `home.today_quest.steps[2].state + label`
- `home.today_quest.xp_reward`
- `home.topics[0].name`
- `home.topics[1].name`
- `home.topics[2].name`
- `home.topics[3].name`
- `home.topics[4].name`

## States

- Loading: From [states.md](/design/states/index.md) (Global sheets): —
- Empty: From [states.md](/design/states/index.md) (Global sheets): —
- Error (retryable / not): From [states.md](/design/states/index.md) (Global sheets): — · fatal: [error--generic](/design/gallery/global/error--generic.html), [force-update--default](/design/gallery/global/force-update--default.html)
- Offline: From [states.md](/design/states/index.md) (Global sheets): [offline--toast](/design/gallery/global/offline--toast.html)
