{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "#/components/schemas/PinnedSceneTab", "title": "PinnedSceneTab", "type": "object", "properties": { "id": { "type": "string", "description": "Stable identifier for the tab. Generated client-side; safe to omit on create." }, "pathname": { "type": "string", "description": "URL pathname the tab points at \u2014 for example `/project/123/dashboard/45` or `/project/123/insights`. Combined with `search` and `hash` to reconstruct the destination." }, "search": { "type": "string", "description": "Query string portion of the URL, including the leading `?`. Empty string when there is no query." }, "hash": { "type": "string", "description": "Fragment portion of the URL, including the leading `#`. Empty string when there is no fragment." }, "title": { "type": "string", "description": "Default tab title derived from the destination scene. Used when `customTitle` is not set." }, "customTitle": { "type": "string", "nullable": true, "description": "Optional user-provided title that overrides `title` in the navigation UI." }, "iconType": { "type": "string", "description": "Icon key shown next to the tab in the sidebar \u2014 for example `dashboard`, `insight`, `blank`." }, "sceneId": { "type": "string", "nullable": true, "description": "Scene identifier resolved from the pathname when known \u2014 used by the frontend for icon/title hints." }, "sceneKey": { "type": "string", "nullable": true, "description": "Scene key (logic key) for the destination, paired with `sceneParams` for deeper routing context." }, "sceneParams": { "description": "Free-form scene parameters captured at pin time, used by the frontend to rehydrate the destination." }, "pinned": { "type": "boolean", "description": "Whether this entry is pinned. Always coerced to true on save \u2014 pass true or omit." } } }