Skip to content

UI Mounts API

Base path: /api/catalog/workspaces/{workspaceId}/ui-mounts

The UI Mount API lets the frontend shell discover all navigation items, routes, and widgets contributed by installed extensions — without any hardcoded knowledge of which extensions exist.

Authorization: Requires ADMIN role or workspace membership.

Get All Mounts (Bundle)

Returns nav items, routes, and widgets in a single response. Use this on app initialization.

http
GET /api/catalog/workspaces/{workspaceId}/ui-mounts

Example

bash
curl http://localhost:8080/api/catalog/workspaces/ws-uuid/ui-mounts \
  -b cookies.txt

Response

json
{
  "code": "SUCCESS",
  "data": {
    "nav": [
      {
        "extensionKey": "crm-extension",
        "label": "CRM",
        "icon": "briefcase",
        "route": "/crm",
        "displayOrder": 1
      }
    ],
    "routes": [
      {
        "extensionKey": "crm-extension",
        "path": "/crm",
        "assetsBaseUrl": "http://localhost:8081/assets"
      }
    ],
    "widgets": [
      {
        "extensionKey": "crm-extension",
        "mountPoint": "dashboard.sidebar",
        "assetsBaseUrl": "http://localhost:8081/assets"
      }
    ]
  }
}

Get Nav Items

http
GET /api/catalog/workspaces/{workspaceId}/ui-mounts/nav

Returns the ordered list of navigation items to render in the app sidebar/header.

Response

json
{
  "code": "SUCCESS",
  "data": [
    {
      "extensionKey": "crm-extension",
      "label": "CRM",
      "icon": "briefcase",
      "route": "/crm",
      "displayOrder": 1
    }
  ]
}

Get Routes

http
GET /api/catalog/workspaces/{workspaceId}/ui-mounts/routes

Returns all frontend routes registered by extensions.

Response

json
{
  "code": "SUCCESS",
  "data": [
    {
      "extensionKey": "crm-extension",
      "path": "/crm",
      "assetsBaseUrl": "http://localhost:8081/assets"
    }
  ]
}

Get Widgets

http
GET /api/catalog/workspaces/{workspaceId}/ui-mounts/widgets?mountPoint=dashboard.sidebar

Query Parameters

ParameterRequiredDescription
mountPointFilter widgets by their mount point (e.g. dashboard.sidebar)

Get Extension UI Asset

Proxies static assets (JS, CSS, images) from an extension's asset server through the platform.

http
GET /api/catalog/workspaces/{workspaceId}/ui-mounts/{extensionKey}/assets/**

Example

GET /api/catalog/workspaces/ws-uuid/ui-mounts/crm-extension/assets/main.js

Mount Types

TypeDescription
NAVNavigation item in the shell sidebar or header
ROUTEA full page/view registered in the frontend router
WIDGETAn embeddable component rendered at a named mount point

Integration Pattern

javascript
// On login — fetch all mounts once
const { data: mounts } = await fetch(`/api/catalog/workspaces/${workspaceId}/ui-mounts`).then(r => r.json());

// Register routes dynamically
mounts.routes.forEach(route => {
  router.addRoute({ path: route.path, component: () => loadRemoteModule(route.assetsBaseUrl) });
});

// Render nav items
mounts.nav.sort((a, b) => a.displayOrder - b.displayOrder).forEach(item => {
  renderNavItem(item.label, item.icon, item.route);
});

See the Frontend UI Mount Integration Guide for a complete walkthrough.

MetaOne Platform Documentation