画面 × API マップ(全 25 画面) Screen × API map (all 25 screens)

各画面が叩く View endpoint(画面入口)Action endpoint(ユーザー操作)Telemetry endpoint(fire-and-forget)を網羅した一覧です。 パス・契約は api/src/routes-manifest.tsViewEnvelope 仕様が 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)
  • TelemetryPOST /v1/mobile/telemetry/events)=計測・記録系、結果は無視可
  • Telemetry (POST /v1/mobile/telemetry/events) — analytics / logging; fire-and-forget

画面一覧と叩く endpoint Screens and the endpoints they hit

01 スプラッシュSplash

KindEndpointトリガ / 用途Trigger / purpose
ViewGET /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
ViewGET /v1/mobile/i18n/bundleboot と並列で取得。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

KindEndpointトリガ / 用途Trigger / purpose
(API 呼び出しなし。静的スライド)(No API. Static slides)
TelemetryPOST /v1/mobile/telemetry/eventsスライド閲覧・完了イベントSlide view / completion events

03 認証Auth

KindEndpointトリガ / 用途Trigger / purpose
ViewGET /v1/mobile/views/auth-config画面起動時。プロバイダ有効化・文言・同意文取得(認証不要)On screen open. Fetches enabled providers, copy, consent text (no auth required)
ActionPOST /v1/mobile/actions/auth/request-otp「メールで OTP を送る」ボタン"Send OTP by email" button
ActionPOST /v1/mobile/actions/auth/verify-otpOTP 入力確定OTP entry submit
ActionPOST /v1/mobile/actions/auth/sign-upサインアップ確定Sign-up submit
ActionPOST /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)

KindEndpointトリガ / 用途Trigger / purpose
ViewGET /v1/mobile/views/home-feed画面起動時・pull-to-refresh。lots(地図ピン)・sponsors(近隣スポンサー施設)・active_sessionbanners[](ホーム上部広告枠)・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
ViewGET /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
TelemetryPOST /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

KindEndpointトリガ / 用途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

KindEndpointトリガ / 用途Trigger / purpose
ViewGET /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)
ActionPOST /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

KindEndpointトリガ / 用途Trigger / purpose
ViewGET /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
ActionPOST /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:
  • distanceMetershourlyFeeMinordailyFeeMinorratingratingCounttotalSpacesoperatingHoursoperatorNameisOpenisSavedthumbnailUrl
  • 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

KindEndpointトリガ / 用途Trigger / purpose
ViewGET /v1/mobile/views/ai-search画面起動時。サジェスト例・直近クエリOn open. Suggestion chips and recent queries
ActionPOST /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
ActionPOST /v1/mobile/actions/search-presets「この条件をプリセット保存」"Save as preset"
extractedFilters のフィールド: extractedFilters fields:
  • keywords[]maxPricePerHourroofopen24hvehicleTyperadiusMsort。status=parsed 時のみ非 null
  • keywords[], maxPricePerHour, roof, open24h, vehicleType, radiusM, sort. Non-null only when status=parsed

06b プリセット選択シートPreset picker sheet

KindEndpointトリガ / 用途Trigger / purpose
ViewGET /v1/mobile/views/search-presetsシート展開時に 1 回取得Fetched once when the sheet opens

06c プリセット管理Preset management

KindEndpointトリガ / 用途Trigger / purpose
ViewGET /v1/mobile/views/search-presets画面起動時On open
ActionPOST /v1/mobile/actions/search-presets「作成」ボタン"Create" button
ActionPATCH /v1/mobile/actions/search-presets/{id}/update「保存」ボタン"Save" button
ActionPOST /v1/mobile/actions/search-presets/{id}/delete「削除」ボタン"Delete" button
ActionPOST /v1/mobile/actions/search-presets/{id}/set-default「デフォルトにする」"Set as default"

07 駐車場詳細Parking lot detail

KindEndpointトリガ / 用途Trigger / purpose
ViewGET /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
ViewGET /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
ActionPOST /v1/mobile/actions/lots/{id}/toggle-save保存ボタン(ハートアイコン)Save button (heart icon)
ActionPOST /v1/mobile/actions/lots/{id}/navigateナビボタン。Google Maps 経路 URL を返す。計測対象Navigate button. Returns a Google Maps directions URL. Analytics target
ActionPOST /v1/mobile/actions/lots/{id}/share共有ボタン。OS 共有シート起動用の URL + デフォルトテキスト。計測対象Share button. Returns URL + default text for the OS share sheet. Analytics target
ActionPOST /v1/mobile/actions/lots/{id}/report-incorrect「誤情報を報告」"Report incorrect info"
ActionPOST /v1/mobile/actions/sessions/start「駐車開始」ボタン(モーダル確定後)。planned_end_at 指定可"Start parking" (after the modal confirms). Accepts planned_end_at

08 駐車開始モーダルStart parking modal

KindEndpointトリガ / 用途Trigger / purpose
ActionPOST /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)

KindEndpointトリガ / 用途Trigger / purpose
ViewGET /v1/mobile/views/parking-sessions画面起動時・pull-to-refreshOn open / pull-to-refresh

10 駐車詳細(駐車中)Parking detail (active)

KindEndpointトリガ / 用途Trigger / purpose
ViewGET /v1/mobile/views/parking-session/{id}画面起動時。料金ルール・累計料金・完了予定・完了率・メモ・アラート設定を集約On open. Aggregates pricing rules, running fare, planned end, completion rate, memo, alert config
ActionPATCH /v1/mobile/actions/sessions/{id}完了予定時刻 / メモを部分更新(body: planned_end_at / memo、null で clear)Partial update of planned_end_at / memo (null clears the field)
ActionGET /v1/mobile/actions/sessions/{id}/notificationsセッション通知設定一覧List notification triggers attached to the session
ActionPOST /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)
ActionPATCH /v1/mobile/actions/session-notifications/{id}通知更新(発火済みは 409)Update a notification trigger (fired triggers return 409)
ActionDELETE /v1/mobile/actions/session-notifications/{id}通知削除Delete a notification trigger
TelemetryPOST /v1/mobile/telemetry/eventsgeofence 離脱・位置サンプルGeofence exit, location samples

11 駐車終了フローEnd parking flow

KindEndpointトリガ / 用途Trigger / purpose
ActionPOST /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
ActionPOST /v1/mobile/actions/sessions/{id}/cancel「キャンセル」(誤タップ救済、5 分以内のみ。reason は任意)"Cancel" (mis-tap recovery, within 5 min; optional reason body)

12 レビュー投稿Review compose

KindEndpointトリガ / 用途Trigger / purpose
ViewGET /v1/mobile/views/review-compose/{lot_id}画面起動時。対象駐車場概要・既存自分レビュー・validation ルールOn open. Target lot summary, existing own review, validation rules
ActionPOST /v1/mobile/actions/reviews/create「投稿」ボタン"Post" button

13 駐車履歴Parking history

KindEndpointトリガ / 用途Trigger / purpose
ViewGET /v1/mobile/views/parking-history画面起動時。月グループ・フィルタ・ページングOn open. Month grouping, filters, pagination

14 メディア一覧Media list

KindEndpointトリガ / 用途Trigger / purpose
ViewGET /v1/mobile/views/media-list画面起動時(認証不要)On open (no auth required)

15 記事詳細Article detail

KindEndpointトリガ / 用途Trigger / purpose
ViewGET /v1/mobile/views/article-detail/{slug}画面起動時(認証不要)On open (no auth required)

16 Saved(お気に入り)Saved

KindEndpointトリガ / 用途Trigger / purpose
ViewGET /v1/mobile/views/saved画面起動時・pull-to-refreshOn open / pull-to-refresh
ActionPOST /v1/mobile/actions/saved/{lot_id}/removeスワイプ / 削除ボタンSwipe / delete button

17 通知一覧 / 通知設定Notifications list / settings

KindEndpointトリガ / 用途Trigger / purpose
ViewGET /v1/mobile/views/notifications通知一覧画面Notifications list
ViewGET /v1/mobile/views/notifications/preferences通知設定画面Preferences screen
ActionPOST /v1/mobile/actions/notifications/mark-read既読化(個別 / 一括)Mark as read (single / bulk)
ActionPATCH /v1/mobile/actions/notifications/preferences/update設定保存Save preferences

18 プロフィール(タブトップ)Profile (tab root)

KindEndpointトリガ / 用途Trigger / purpose
ViewGET /v1/mobile/views/profile画面起動時。プロフィール要約・レベル・契約ステータス等On open. Profile summary, level, subscription status
ActionPATCH /v1/mobile/actions/profile/update表示名・bio 保存Save display name / bio
ActionPOST /v1/mobile/actions/profile/avatar-uploadアバター更新(presigned URL 発行)Update avatar (issues presigned URL)
ActionPOST /v1/mobile/actions/profile/request-data-exportデータエクスポート依頼Request data export
ActionPOST /v1/mobile/actions/profile/delete-account退会Delete account

18a 車両管理Vehicle management

KindEndpointトリガ / 用途Trigger / purpose
ViewGET /v1/mobile/views/profile/vehicles一覧取得List fetch
ActionPOST /v1/mobile/actions/profile/vehicles/add車両追加Add vehicle
ActionPATCH /v1/mobile/actions/profile/vehicles/{id}/update車両更新Update vehicle
ActionPOST /v1/mobile/actions/profile/vehicles/{id}/delete車両削除Delete vehicle
ActionPOST /v1/mobile/actions/profile/vehicles/{id}/set-defaultデフォルト車両Set default vehicle

18b 紹介コードReferrals

KindEndpointトリガ / 用途Trigger / purpose
ViewGET /v1/mobile/views/profile/referrals紹介コード・実績Referral code and stats

18c ゲーミフィケーションGamification

KindEndpointトリガ / 用途Trigger / purpose
ViewGET /v1/mobile/views/profile/gamificationEXP / badges / 進捗EXP / badges / progress

18d 設定Settings

KindEndpointトリガ / 用途Trigger / purpose
ViewGET /v1/mobile/views/profile/settings言語・単位・地図スタイル・privacyLanguage / units / map style / privacy
ActionPATCH /v1/mobile/actions/profile/update設定保存Save settings
Supabase Auth (SDK)パスワード変更・メール変更は SDK 直接Password / email change runs against the SDK directly

19 駐車場登録申請Lot registration

KindEndpointトリガ / 用途Trigger / purpose
ViewGET /v1/mobile/views/lot-registrationフォーム起動時(タグ候補・料金ルールテンプレート等)On open. Tag candidates, pricing-rule templates
ActionPOST /v1/mobile/actions/lot-registration/submit「申請する」ボタン"Submit application" button

20 プレミアムプランPremium plan

KindEndpointトリガ / 用途Trigger / purpose
ViewGET /v1/mobile/views/premium画面起動時。プラン比較・契約状況・特商法リンクOn open. Plan compare, current status, required disclosures
ActionPOST /v1/mobile/actions/premium/verify-iapStoreKit / Play Billing のレシート検証Validate StoreKit / Play Billing receipt
ActionPOST /v1/mobile/actions/premium/cancel契約キャンセルCancel subscription
ActionPOST /v1/mobile/actions/premium/apply-couponクーポン適用Apply coupon

21 サポートSupport

KindEndpointトリガ / 用途Trigger / purpose
ViewGET /v1/mobile/views/support画面起動時。FAQ・既存ticket 一覧On open. FAQ plus existing tickets
ActionPOST /v1/mobile/actions/support/submit-ticket「問い合わせを送る」"Submit inquiry"

22 ポリシー / 規約Policies / terms

KindEndpointトリガ / 用途Trigger / purpose
ViewGET /v1/mobile/views/policies画面起動時(認証不要)。終了通告・同意履歴を含むOn open (no auth). Includes termination notices and consent history

23 検索履歴Search history

KindEndpointトリガ / 用途Trigger / purpose
ViewGET /v1/mobile/views/search-history画面起動時(optional user)On open (optional user)
ActionPOST /v1/mobile/actions/search-history/clear「履歴をクリア」"Clear history"
ActionPOST /v1/mobile/actions/search/save-history検索実行時に履歴保存(04/06 から呼ばれる)Saves search history when a search runs (invoked from 04 / 06)

24 権限リクエストPermission request

KindEndpointトリガ / 用途Trigger / purpose
ViewGET /v1/mobile/views/permissions画面起動時。対象権限・説明文・fallback_behaviorOn open. Target permissions, rationale copy, fallback_behavior
ActionPOST /v1/mobile/actions/permissions/recordOS ダイアログ結果の記録(granted / denied)Record OS dialog result (granted / denied)

25 エラー / フォールバックError / fallback

KindEndpointトリガ / 用途Trigger / purpose
ViewGET /v1/mobile/views/error-fallback致命エラー時の画面(認証不要)Fatal-error screen (no auth)
ActionPOST /v1/mobile/actions/error/report「詳細を送信」"Send details"

サポート系(画面横断) Cross-screen auxiliaries

KindEndpointトリガ / 用途Trigger / purpose
TelemetryPOST /v1/mobile/telemetry/events画面横断の analytics / geofence / push 受信 / 位置サンプルCross-screen analytics, geofence, push receipt, location samples
ActionPOST /v1/mobile/actions/push-tokens/registerdevice token 登録(サインイン後 / token rotation 時)Register device token (after sign-in / on rotation)

関連ドキュメント Related docs