---
title: "S28 bindings"
description: "Data-binding map of Profile · Sign in with Apple upgrade: every field to its source, and what each required state shows."
source: "design/hifi/S28/bindings.md"
---

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

# Data-binding map: S28 Profile · Sign in with Apple upgrade

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

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

| Field | Source (endpoint or local state) | Format | Fallback |
|---|---|---|---|
| SIWA card | `api GET /me auth_provider` · `me.auth_provider = anonymous` | — | hidden for apple |
| `ASAuthorizationAppleIDProvider → POST /v1/auth/apple` | `device apple_sign_in` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `ASAuthorizationAppleIDProvider → POST /v1/auth/apple` | `call POST /auth/apple` |  |  |
| `derived: first grapheme of me.display_name` | `derived avatar_initial` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `me.display_name` | `api GET /me display_name` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `me.entitlement.status / product_id / trial_ends_at` | `api GET /me entitlement.status` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `me.entitlement.status / product_id / trial_ends_at` | `api GET /me entitlement.product_id` |  |  |
| `me.entitlement.status / product_id / trial_ends_at` | `api GET /me entitlement.trial_ends_at` |  |  |
| `me.level.title + level` | `api GET /me level.title` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `me.level.title + level` | `api GET /me level.level` |  |  |
| `me.settings.practice_languages` | `api GET /me settings.practice_languages` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `me.settings.reminder_time` | `api GET /me settings.reminder_time` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `me.stats.ability` | `api GET /me stats.ability` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `me.stats.completed_sessions` | `api GET /me stats.completed_sessions` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `me.streak.current` | `api GET /me streak.current` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `weekly_quests.quests[0] (title: Accept-Language)` | `api GET /weekly-quests quests[]` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `weekly_quests.quests[1] (title: Accept-Language)` | `api GET /weekly-quests quests[]` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `weekly_quests.quests[2] (title: Accept-Language)` | `api GET /weekly-quests quests[]` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `weekly_quests.week_start / week_end` | `api GET /weekly-quests week_start` · From the board's `data-bind`; no row in data-binding.md yet. |  |  |
| `weekly_quests.week_start / week_end` | `api GET /weekly-quests week_end` |  |  |

## Derived values

Computed on device; each from the sources it names.

| Value | From | How |
|---|---|---|
| `avatar_initial` | `api GET /me display_name` | The first grapheme of the display name. |

## Binds on the boards

The `data-bind` values across every state.

- `ASAuthorizationAppleIDProvider → POST /v1/auth/apple`
- `derived: first grapheme of me.display_name`
- `me.auth_provider = anonymous`
- `me.display_name`
- `me.entitlement.status / product_id / trial_ends_at`
- `me.level.title + level`
- `me.settings.practice_languages`
- `me.settings.reminder_time`
- `me.stats.ability`
- `me.stats.completed_sessions`
- `me.streak.current`
- `weekly_quests.quests[0] (title: Accept-Language)`
- `weekly_quests.quests[1] (title: Accept-Language)`
- `weekly_quests.quests[2] (title: Accept-Language)`
- `weekly_quests.week_start / week_end`

## States

- Loading: From [states.md](/design/states/index.md) (Profile): skeleton stats
- Empty: From [states.md](/design/states/index.md) (Profile): weekly quests none → section hidden
- Error (retryable / not): From [states.md](/design/states/index.md) (Profile): inline Retry · fatal: generic error
- Offline: From [states.md](/design/states/index.md) (Profile): cached `/me`
