画面 × API マップ(全 25 画面)
Screen × API map (all 25 screens)
各画面が叩く View endpoint(画面入口)、
Action endpoint(ユーザー操作)、Telemetry endpoint(fire-and-forget)を網羅した一覧です。
パス・契約は api/src/routes-manifest.ts と
ViewEnvelope 仕様が SSoT。
This page enumerates every View endpoint (screen entry),
Action endpoint (user mutation), and Telemetry endpoint (fire-and-forget) that each screen touches.
Paths and contracts are owned by api/src/routes-manifest.ts and the
ViewEnvelope spec.
読み方:
How to read:
- View(views 系: 例
GET /v1/mobile/views/home-feed)=画面を開いた瞬間に 1 回叩く。ViewEnvelope(data/ui_config/navigation/validation/states/fallback_behavior/meta)で返る
- View (views, e.g.
GET /v1/mobile/views/home-feed) — fired once when the screen is opened. Returns a ViewEnvelope (data/ui_config/navigation/validation/states/fallback_behavior/meta)
- Action(actions 系: 例
POST /v1/mobile/actions/sessions/start)=ボタンタップ等のユーザー操作。ActionEnvelope(result + navigation + toast)で返る
- Action (actions, e.g.
POST /v1/mobile/actions/sessions/start) — user gestures (button taps etc.). Returns an ActionEnvelope (result + navigation + toast)
- Telemetry(
POST /v1/mobile/telemetry/events)=計測・記録系、結果は無視可
- Telemetry (
POST /v1/mobile/telemetry/events) — analytics / logging; fire-and-forget
画面一覧と叩く endpoint
Screens and the endpoints they hit
01 スプラッシュSplash
| Kind | Endpoint | トリガ / 用途Trigger / purpose |
| View | GET /v1/mobile/views/boot | 起動時 1 回。コードマスタ本体・codes_summary.version(md5 hash)・i18n.version・app_config・強制更新判定・feature flag を取得。クライアントは codes_summary.version を比較してローカルキャッシュを差分更新Fired once on launch. Returns the code master, codes_summary.version (md5 hash), i18n.version, app_config, force-update check, and feature flags. The client diffs codes_summary.version against local cache to decide whether to refresh |
| View | GET /v1/mobile/i18n/bundle | boot と並列で取得。If-None-Match: "<cached>" で 304 受領可能Fetched in parallel with boot. Supports If-None-Match to receive 304 |
| — | Supabase Auth getSession() | SDK 直接。JWT の有効性確認SDK direct. Checks JWT validity |
02 オンボーディングOnboarding
| Kind | Endpoint | トリガ / 用途Trigger / purpose |
| — | (API 呼び出しなし。静的スライド)(No API. Static slides) | — |
| Telemetry | POST /v1/mobile/telemetry/events | スライド閲覧・完了イベントSlide view / completion events |
03 認証Auth
| Kind | Endpoint | トリガ / 用途Trigger / purpose |
| View | GET /v1/mobile/views/auth-config | 画面起動時。プロバイダ有効化・文言・同意文取得(認証不要)On screen open. Fetches enabled providers, copy, consent text (no auth required) |
| Action | POST /v1/mobile/actions/auth/request-otp | 「メールで OTP を送る」ボタン"Send OTP by email" button |
| Action | POST /v1/mobile/actions/auth/verify-otp | OTP 入力確定OTP entry submit |
| Action | POST /v1/mobile/actions/auth/sign-up | サインアップ確定Sign-up submit |
| Action | POST /v1/mobile/actions/auth/sign-out | サインアウトSign-out |
| — | Supabase Auth (SDK) | JWT の永続化と refresh のみ SDK で扱う。OTP / sign-up / sign-out はすべて BFF Action 経由(api/src/bff/mobile/actions/auth.ts)。OAuth (Google / Apple / Facebook) は signInWithOAuth で起動するが、戻りトークンの app_users upsert は BFF が確認するUse the SDK only to persist and refresh the JWT. OTP, sign-up, and sign-out all flow through BFF actions (api/src/bff/mobile/actions/auth.ts). OAuth (Google / Apple / Facebook) is launched via signInWithOAuth, but the post-callback app_users upsert is reconciled by the BFF |
04 ホーム(Map)Home (Map)
| Kind | Endpoint | トリガ / 用途Trigger / purpose |
| View | GET /v1/mobile/views/home-feed | 画面起動時・pull-to-refresh。lots(地図ピン)・sponsors(近隣スポンサー施設)・active_session・banners[](ホーム上部広告枠)・gamification(ミッションスロット)を 1 本で返すOn open / pull-to-refresh. Returns lots (map pins), sponsors (nearby spots), active_session, banners[] (top banner slots), and gamification (mission slot) in a single call |
| View | GET /v1/mobile/views/search-results?lat=&lng=&radius_m= | 地図パン/ズーム後に 250 ms デバウンスで再検索。カード用の数値と isSaved を含むRe-queried 250 ms after pan / zoom. Includes card-ready numbers and isSaved |
| Telemetry | POST /v1/mobile/telemetry/events | ピンタップ・map_moved・bottom_sheet_expand・banner_impression・banner_click 等Pin taps, map_moved, bottom_sheet_expand, banner_impression / click, etc. |
data.gamification スロット:
data.gamification slot:
slot_type: "tutorial_mission" — チュートリアル系 badge 進行中がある時。missions[] に最大 3 件(完了率高い順)
slot_type: "tutorial_mission" — when tutorial-category badges are still in progress. missions[] holds up to 3 entries (highest completion first)
slot_type: "general_progress" — チュートリアル完走済み。一般 badge 進捗サマリ
slot_type: "general_progress" — tutorials done, falls back to general badge progress
slot_type: "hidden" — 表示スキップ。将来的に広告スロットに差し替え可能
slot_type: "hidden" — render nothing. Swappable with an ad slot later
05 検索絞り込みSearch filter modal
| Kind | Endpoint | トリガ / 用途Trigger / purpose |
| — | モーダル内はローカル状態のみ。適用時に 04/06 を再フェッチ。コードマスタ(タグ・オペレーター・車種等)は boot で取得済みのローカルキャッシュを参照Local state only inside the modal. Applying triggers a refetch of 04 / 06. Code masters (tags, operators, vehicle types) come from the local cache seeded by boot | — |
05a Wherto 目的地入力Wherto destination input
| Kind | Endpoint | トリガ / 用途Trigger / purpose |
| View | GET /v1/mobile/views/destinations | 入力中に 250 ms デバウンスで呼び出し。recentItems(履歴)と autocompleteItems(駐車場名/住所マッチ、Mapbox 契約後は external source merge)を返すFired with a 250 ms debounce while typing. Returns recentItems (history) and autocompleteItems (lot name/address matches; after Mapbox contract, external source is merged) |
| Action | POST /v1/mobile/actions/destinations | 候補を選択した時点で履歴記録。place_id 重複で use_count インクリメントRecords history at the moment a candidate is selected. use_count increments on place_id collision |
06 検索結果一覧Search results
| Kind | Endpoint | トリガ / 用途Trigger / purpose |
| View | GET /v1/mobile/views/search-results | 初期表示 / フィルタ変更 / 並び替え変更。filter: q tags operator_codes vehicle_type max_price_per_hour roof_only open_24h。sort: distance/price_asc/price_desc/rating/availability/recommendedInitial render / filter change / sort change. Filters: q tags operator_codes vehicle_type max_price_per_hour roof_only open_24h. Sort: distance/price_asc/price_desc/rating/availability/recommended |
| Action | POST /v1/mobile/actions/lots/{id}/toggle-save | カード右上の保存ボタン。isSaved で現状を反映Save button on the card (header-right). isSaved reflects current state |
SearchResultItem が含むカード用数値:
SearchResultItem fields surfaced to the card:
distanceMeters・hourlyFeeMinor・dailyFeeMinor・rating・ratingCount・totalSpaces・operatingHours・operatorName・isOpen・isSaved・thumbnailUrl
distanceMeters, hourlyFeeMinor, dailyFeeMinor, rating, ratingCount, totalSpaces, operatingHours, operatorName, isOpen, isSaved, thumbnailUrl
- クライアントは同一値でクライアントサイドソートも可能(price/distance/rating 3 軸は数値で揃っている)
- The client can also perform client-side sort on the same payload (price / distance / rating are all numeric)
06a AI 検索AI search
| Kind | Endpoint | トリガ / 用途Trigger / purpose |
| View | GET /v1/mobile/views/ai-search | 画面起動時。サジェスト例・直近クエリOn open. Suggestion chips and recent queries |
| Action | POST /v1/mobile/actions/ai-search/query | 「検索する」ボタン。自然言語 → 構造化クエリ → 結果。extractedFilters を UI に反映してから通常検索を再実行する設計"Search" button. NL → structured query → results. The client should mirror extractedFilters into the filter UI before re-running the standard search |
| Action | POST /v1/mobile/actions/search-presets | 「この条件をプリセット保存」"Save as preset" |
extractedFilters のフィールド:
extractedFilters fields:
keywords[]・maxPricePerHour・roof・open24h・vehicleType・radiusM・sort。status=parsed 時のみ非 null
keywords[], maxPricePerHour, roof, open24h, vehicleType, radiusM, sort. Non-null only when status=parsed
06b プリセット選択シートPreset picker sheet
| Kind | Endpoint | トリガ / 用途Trigger / purpose |
| View | GET /v1/mobile/views/search-presets | シート展開時に 1 回取得Fetched once when the sheet opens |
06c プリセット管理Preset management
| Kind | Endpoint | トリガ / 用途Trigger / purpose |
| View | GET /v1/mobile/views/search-presets | 画面起動時On open |
| Action | POST /v1/mobile/actions/search-presets | 「作成」ボタン"Create" button |
| Action | PATCH /v1/mobile/actions/search-presets/{id}/update | 「保存」ボタン"Save" button |
| Action | POST /v1/mobile/actions/search-presets/{id}/delete | 「削除」ボタン"Delete" button |
| Action | POST /v1/mobile/actions/search-presets/{id}/set-default | 「デフォルトにする」"Set as default" |
07 駐車場詳細Parking lot detail
| Kind | Endpoint | トリガ / 用途Trigger / purpose |
| View | GET /v1/mobile/views/lot-detail/{id} | 画面起動時。基本情報・料金・直近レビュー 10 件・images[](最大 50 枚)・near-by・is_open_now を 1 本で集約On open. Single aggregate of basics / pricing / 10 most recent reviews / images[] (up to 50) / nearby / is_open_now |
| View | GET /v1/mobile/views/lot-detail/{id}/reviews | レビュータブ展開時 + 無限スクロール。cursor ベースページング、rating 分布(r1..r5)付き summary を含むWhen the reviews tab opens + infinite scroll. Cursor-based pagination, includes rating distribution (r1..r5) in summary |
| Action | POST /v1/mobile/actions/lots/{id}/toggle-save | 保存ボタン(ハートアイコン)Save button (heart icon) |
| Action | POST /v1/mobile/actions/lots/{id}/navigate | ナビボタン。Google Maps 経路 URL を返す。計測対象Navigate button. Returns a Google Maps directions URL. Analytics target |
| Action | POST /v1/mobile/actions/lots/{id}/share | 共有ボタン。OS 共有シート起動用の URL + デフォルトテキスト。計測対象Share button. Returns URL + default text for the OS share sheet. Analytics target |
| Action | POST /v1/mobile/actions/lots/{id}/report-incorrect | 「誤情報を報告」"Report incorrect info" |
| Action | POST /v1/mobile/actions/sessions/start | 「駐車開始」ボタン(モーダル確定後)。planned_end_at 指定可"Start parking" (after the modal confirms). Accepts planned_end_at |
08 駐車開始モーダルStart parking modal
| Kind | Endpoint | トリガ / 用途Trigger / purpose |
| Action | POST /v1/mobile/actions/sessions/start | 「駐車開始」確定。body で planned_end_at(完了予定日時)と memo を任意で送付。ActionEnvelope の navigation で 10 へ"Start parking" submit. Body accepts optional planned_end_at and memo. ActionEnvelope navigation routes to 10 |
09 駐車管理(セッション一覧)Parking management (sessions list)
| Kind | Endpoint | トリガ / 用途Trigger / purpose |
| View | GET /v1/mobile/views/parking-sessions | 画面起動時・pull-to-refreshOn open / pull-to-refresh |
10 駐車詳細(駐車中)Parking detail (active)
| Kind | Endpoint | トリガ / 用途Trigger / purpose |
| View | GET /v1/mobile/views/parking-session/{id} | 画面起動時。料金ルール・累計料金・完了予定・完了率・メモ・アラート設定を集約On open. Aggregates pricing rules, running fare, planned end, completion rate, memo, alert config |
| Action | PATCH /v1/mobile/actions/sessions/{id} | 完了予定時刻 / メモを部分更新(body: planned_end_at / memo、null で clear)Partial update of planned_end_at / memo (null clears the field) |
| Action | GET /v1/mobile/actions/sessions/{id}/notifications | セッション通知設定一覧List notification triggers attached to the session |
| Action | POST /v1/mobile/actions/sessions/{id}/notifications | 通知追加(price_reached / max_price_reached / time_reached / planned_end_minus、delivery は push / in_app / both)Create a notification trigger (price_reached / max_price_reached / time_reached / planned_end_minus; delivery push / in_app / both) |
| Action | PATCH /v1/mobile/actions/session-notifications/{id} | 通知更新(発火済みは 409)Update a notification trigger (fired triggers return 409) |
| Action | DELETE /v1/mobile/actions/session-notifications/{id} | 通知削除Delete a notification trigger |
| Telemetry | POST /v1/mobile/telemetry/events | geofence 離脱・位置サンプルGeofence exit, location samples |
11 駐車終了フローEnd parking flow
| Kind | Endpoint | トリガ / 用途Trigger / purpose |
| Action | POST /v1/mobile/actions/sessions/{id}/finalize | 「駐車終了」確定。body で started_at / ended_at / user_entered_fee_minor を任意で上書き。自動計算と user_entered_fee_minor が不一致の場合 fee_mismatch_flag=true で保存され、運営タスク (admin.admin_tasks.task_kind='parking_fee_mismatch') が自動生成される"End parking" submit. Body allows overriding started_at / ended_at / user_entered_fee_minor. When user input differs from auto-calculated amount, fee_mismatch_flag is set to true and an admin task (task_kind='parking_fee_mismatch') is queued automatically |
| Action | POST /v1/mobile/actions/sessions/{id}/cancel | 「キャンセル」(誤タップ救済、5 分以内のみ。reason は任意)"Cancel" (mis-tap recovery, within 5 min; optional reason body) |
12 レビュー投稿Review compose
| Kind | Endpoint | トリガ / 用途Trigger / purpose |
| View | GET /v1/mobile/views/review-compose/{lot_id} | 画面起動時。対象駐車場概要・既存自分レビュー・validation ルールOn open. Target lot summary, existing own review, validation rules |
| Action | POST /v1/mobile/actions/reviews/create | 「投稿」ボタン"Post" button |
13 駐車履歴Parking history
| Kind | Endpoint | トリガ / 用途Trigger / purpose |
| View | GET /v1/mobile/views/parking-history | 画面起動時。月グループ・フィルタ・ページングOn open. Month grouping, filters, pagination |
14 メディア一覧Media list
| Kind | Endpoint | トリガ / 用途Trigger / purpose |
| View | GET /v1/mobile/views/media-list | 画面起動時(認証不要)On open (no auth required) |
15 記事詳細Article detail
| Kind | Endpoint | トリガ / 用途Trigger / purpose |
| View | GET /v1/mobile/views/article-detail/{slug} | 画面起動時(認証不要)On open (no auth required) |
16 Saved(お気に入り)Saved
| Kind | Endpoint | トリガ / 用途Trigger / purpose |
| View | GET /v1/mobile/views/saved | 画面起動時・pull-to-refreshOn open / pull-to-refresh |
| Action | POST /v1/mobile/actions/saved/{lot_id}/remove | スワイプ / 削除ボタンSwipe / delete button |
17 通知一覧 / 通知設定Notifications list / settings
| Kind | Endpoint | トリガ / 用途Trigger / purpose |
| View | GET /v1/mobile/views/notifications | 通知一覧画面Notifications list |
| View | GET /v1/mobile/views/notifications/preferences | 通知設定画面Preferences screen |
| Action | POST /v1/mobile/actions/notifications/mark-read | 既読化(個別 / 一括)Mark as read (single / bulk) |
| Action | PATCH /v1/mobile/actions/notifications/preferences/update | 設定保存Save preferences |
18 プロフィール(タブトップ)Profile (tab root)
| Kind | Endpoint | トリガ / 用途Trigger / purpose |
| View | GET /v1/mobile/views/profile | 画面起動時。プロフィール要約・レベル・契約ステータス等On open. Profile summary, level, subscription status |
| Action | PATCH /v1/mobile/actions/profile/update | 表示名・bio 保存Save display name / bio |
| Action | POST /v1/mobile/actions/profile/avatar-upload | アバター更新(presigned URL 発行)Update avatar (issues presigned URL) |
| Action | POST /v1/mobile/actions/profile/request-data-export | データエクスポート依頼Request data export |
| Action | POST /v1/mobile/actions/profile/delete-account | 退会Delete account |
18a 車両管理Vehicle management
| Kind | Endpoint | トリガ / 用途Trigger / purpose |
| View | GET /v1/mobile/views/profile/vehicles | 一覧取得List fetch |
| Action | POST /v1/mobile/actions/profile/vehicles/add | 車両追加Add vehicle |
| Action | PATCH /v1/mobile/actions/profile/vehicles/{id}/update | 車両更新Update vehicle |
| Action | POST /v1/mobile/actions/profile/vehicles/{id}/delete | 車両削除Delete vehicle |
| Action | POST /v1/mobile/actions/profile/vehicles/{id}/set-default | デフォルト車両Set default vehicle |
18b 紹介コードReferrals
| Kind | Endpoint | トリガ / 用途Trigger / purpose |
| View | GET /v1/mobile/views/profile/referrals | 紹介コード・実績Referral code and stats |
18c ゲーミフィケーションGamification
| Kind | Endpoint | トリガ / 用途Trigger / purpose |
| View | GET /v1/mobile/views/profile/gamification | EXP / badges / 進捗EXP / badges / progress |
18d 設定Settings
| Kind | Endpoint | トリガ / 用途Trigger / purpose |
| View | GET /v1/mobile/views/profile/settings | 言語・単位・地図スタイル・privacyLanguage / units / map style / privacy |
| Action | PATCH /v1/mobile/actions/profile/update | 設定保存Save settings |
| — | Supabase Auth (SDK) | パスワード変更・メール変更は SDK 直接Password / email change runs against the SDK directly |
19 駐車場登録申請Lot registration
| Kind | Endpoint | トリガ / 用途Trigger / purpose |
| View | GET /v1/mobile/views/lot-registration | フォーム起動時(タグ候補・料金ルールテンプレート等)On open. Tag candidates, pricing-rule templates |
| Action | POST /v1/mobile/actions/lot-registration/submit | 「申請する」ボタン"Submit application" button |
20 プレミアムプランPremium plan
| Kind | Endpoint | トリガ / 用途Trigger / purpose |
| View | GET /v1/mobile/views/premium | 画面起動時。プラン比較・契約状況・特商法リンクOn open. Plan compare, current status, required disclosures |
| Action | POST /v1/mobile/actions/premium/verify-iap | StoreKit / Play Billing のレシート検証Validate StoreKit / Play Billing receipt |
| Action | POST /v1/mobile/actions/premium/cancel | 契約キャンセルCancel subscription |
| Action | POST /v1/mobile/actions/premium/apply-coupon | クーポン適用Apply coupon |
21 サポートSupport
| Kind | Endpoint | トリガ / 用途Trigger / purpose |
| View | GET /v1/mobile/views/support | 画面起動時。FAQ・既存ticket 一覧On open. FAQ plus existing tickets |
| Action | POST /v1/mobile/actions/support/submit-ticket | 「問い合わせを送る」"Submit inquiry" |
22 ポリシー / 規約Policies / terms
| Kind | Endpoint | トリガ / 用途Trigger / purpose |
| View | GET /v1/mobile/views/policies | 画面起動時(認証不要)。終了通告・同意履歴を含むOn open (no auth). Includes termination notices and consent history |
23 検索履歴Search history
| Kind | Endpoint | トリガ / 用途Trigger / purpose |
| View | GET /v1/mobile/views/search-history | 画面起動時(optional user)On open (optional user) |
| Action | POST /v1/mobile/actions/search-history/clear | 「履歴をクリア」"Clear history" |
| Action | POST /v1/mobile/actions/search/save-history | 検索実行時に履歴保存(04/06 から呼ばれる)Saves search history when a search runs (invoked from 04 / 06) |
24 権限リクエストPermission request
| Kind | Endpoint | トリガ / 用途Trigger / purpose |
| View | GET /v1/mobile/views/permissions | 画面起動時。対象権限・説明文・fallback_behaviorOn open. Target permissions, rationale copy, fallback_behavior |
| Action | POST /v1/mobile/actions/permissions/record | OS ダイアログ結果の記録(granted / denied)Record OS dialog result (granted / denied) |
25 エラー / フォールバックError / fallback
| Kind | Endpoint | トリガ / 用途Trigger / purpose |
| View | GET /v1/mobile/views/error-fallback | 致命エラー時の画面(認証不要)Fatal-error screen (no auth) |
| Action | POST /v1/mobile/actions/error/report | 「詳細を送信」"Send details" |
サポート系(画面横断)
Cross-screen auxiliaries
| Kind | Endpoint | トリガ / 用途Trigger / purpose |
| Telemetry | POST /v1/mobile/telemetry/events | 画面横断の analytics / geofence / push 受信 / 位置サンプルCross-screen analytics, geofence, push receipt, location samples |
| Action | POST /v1/mobile/actions/push-tokens/register | device token 登録(サインイン後 / token rotation 時)Register device token (after sign-in / on rotation) |
関連ドキュメント
Related docs