---
title: "Admin pages"
description: "An admin page is the same native page primitive placed in workspace administration. Use it for app configuration and operational controls, not ordinary member workflow."
url: "https://sotaagents.ai/manual/developer-guide/admin-pages"
generated_by: "sotaagents-ldp"
docs_index: "https://sotaagents.ai/manual/llms.txt"
locale: "en"
---

# Admin pages

An admin page is the same native `page` primitive placed in workspace administration. Use it for app configuration and operational controls, not ordinary member workflow.

YAML

```
contributes:
  ui:
    - id: reports-admin
      kind: nativeModule
      surface: page
      slot: admin.workspace.tab
      sectionId: reports
      label: Reports settings
      route: /admin/reports/*
      roles: [OWNER, ADMIN]
      module:
        entry: dist/ui/app.js
        export: ReportsAdmin
        styles: dist/ui/app.css
```

`slot` decides where Core mounts the page. Core passes `route`/`subroute` just as it does for a workspace page; the rendered content remains app-owned. Declare `roles` for the intended administrators and still enforce authorization in the app backend. UI visibility is not a security boundary.

TSX

```
import { useAppFetch } from '@sota/platform';

export function ReportsAdmin() {
  const appFetch = useAppFetch();
  async function save() {
    const response = await appFetch('/settings', {
      method: 'PUT',
      headers: { 'content-type': 'application/json' },
      body: JSON.stringify({ enabled: true }),
    });
    if (!response.ok) throw new Error('Could not save settings');
  }
  return <button type="button" onClick={save}>Enable reports</button>;
}
```
