Mobile-prefixed database tables (MobileMenuItems, MobileFavorites, MobileItemTypes). Mobile developers integrate via the MobileMenu.ApiClient NuGet package.
Returns the full navigation tree for the authenticated user, filtered by the user's profile attributes (airline, role, etc.). Items are normalized into a hierarchical structure client-side from a flat list.
GET /api/mobilecontent/menuitems/getallforuser → IEnumerable<MenuItem>
[AllowAnonymous]. When no authenticated user is present, a default empty UserPrivileges profile is used and only publicly visible items are returned.
| Field | Type | Description |
|---|---|---|
id | int | Database ID. |
parentId | int? | Parent menu item ID for building the tree. |
sortOrder | int | Display order within the parent. |
title | string | Display label. May be a template — see Title templates. |
description | string? | Subtitle or short description. |
path | string? | Deep-link path or route. |
imageSource | string? | Icon or image asset reference. |
glyph | string? | Icon glyph identifier. |
glyphFontFamily | string? | Font family for the glyph. |
enabled | bool | Whether the item is tappable. |
visible | bool | Whether the item is shown in the list. |
specialCode | string? | Reserved for special handling logic in the app. |
showOnHomeScreen | bool | Whether to surface this item on the home screen. |
showToAdmin | bool | Whether to show only to admin users. |
showOnTabBar | bool | Whether to include in the bottom tab bar. |
showOnTabBarSort | int | Sort order within the tab bar. |
A title rendered by the Blazor nav chromes (bottom tab bar, drawer row, drawer hero card) may carry {token} placeholders that the app fills from the signed-in member's profile at render time, so one record labels itself per member. Resolution is client-side (ITemplateResolver, AB#2661); the vocabulary is the public properties of the app's AppProperties bag, walked by reflection:
| Token | Value |
|---|---|
{Member.MEC} | The member's MEC code, canonical case (e.g. DAL). Any public profile property is reachable the same way: {Member.LEC}, {Member.BaseAirport}, {Member.FirstName}. Member and UserInfo are two properties on the bag pointing at the same profile, so {UserInfo.MEC} is the same value. |
{mec} | Alias for the member's MEC — the spelling the dynamic-feed containerTitle/title templates already use. |
Example: "title": "{Member.MEC} MEC" renders DAL MEC for a Delta member and UAL MEC for a United member. Tokens match case-insensitively ({Member.mec} works). A title with no braces is plain text and passes through unchanged.
Fallbacks when no member is known (signed out, profile not yet loaded, blank field): the MEC slot record (path /mec) renders My MEC; any other record renders its literal text with the tokens removed ("{UserInfo.LEC} Council" → Council). A raw token is never shown.
Rollout note: while the MEC slot record ships the plain title MEC (Id 230, as served 2026-09-03), the app applies the default template {mec} MEC to that one record. Once the record carries a template of its own, the record's template wins and the client default is not consulted. Templated titles are consumed by the Blazor chromes only; a surface that renders title verbatim would show the braces, so keep templates on Blazor-hybrid records.
Favorites are user-specific bookmarks. Each favorite references an item by itemTypeId (category) and itemId (string identifier within that category). The Favorites API requires authentication — all endpoints except /itemtypes return 401 when no valid user is present.
[Authorize] required for all Favorites endpoints except GET /itemtypes.
GET /api/mobilecontent/favorites → IEnumerable<Favorite> (authenticated user's favorites)
GET /api/mobilecontent/favorites/itemtypes → IEnumerable<ItemType> (anonymous)
POST /api/mobilecontent/favorites → Favorite (201 Created, or 200 if already exists)
DELETE /api/mobilecontent/favorites/{itemTypeId}/{itemId} → 204 No Content
Returns all favorites for the authenticated user. Sorted by SortOrder. Empty list if the user has no favorites.
Returns the lookup table of item type categories (e.g., "Flight", "News", "Event"). Use these IDs in add/remove operations. This endpoint does not require authentication.
| Field | Type | Description |
|---|---|---|
id | int | ID used in add/remove requests. |
description | string | Human-readable category name. |
Adds a new favorite for the authenticated user. If the same itemTypeId + itemId combination already exists for this user, the existing record is returned with 200 OK (idempotent — no duplicate is created).
| Field | Type | Required | Notes |
|---|---|---|---|
itemTypeId | int | Yes | Must be a valid ID from GET /itemtypes. |
itemId | string | Yes | Identifier of the item within the type (e.g., flight number, article ID). |
sortOrder | int | No | Display order hint. Default 0. |
title | string? | No | Display label for the favorite (e.g., "UAL 123 ORD→SFO"). |
| Field | Type | Description |
|---|---|---|
id | int | Database ID. |
userId | string | The authenticated user's ID. |
itemTypeId | int | |
itemTypeName | string | Description from the ItemTypes lookup. |
itemId | string | |
sortOrder | int | |
title | string? |
Permanently removes the specified favorite for the authenticated user. Returns 404 if the favorite does not exist for this user.
GET /api/mobilecontent/menuitems/getallforuser
GET /api/mobilecontent/favorites
GET /api/mobilecontent/favorites/itemtypes
POST /api/mobilecontent/favorites
DELETE /api/mobilecontent/favorites/{itemTypeId}/{itemId}