Plugin Endpoints
REST endpoints that become available when the corresponding plugin is installed — auth, workflow, automation, views, realtime, notifications, AI, i18n, GraphQL, and file storage.
Plugin Endpoints
These REST endpoints are only available when the corresponding plugin is installed. Check the discovery manifest services map before calling them; all paths are relative to the base URL (defaults to /api/v1).
Authentication (Plugin Required)
These endpoints are only available when an auth plugin is installed. Check discovery.services.auth.enabled first.
POST /auth/sign-in/email
Authenticate with email and password (better-auth's email sign-in route, mounted under the auth plugin's /auth prefix) and receive a session token. There is no /auth/login route.
Body: { email: "admin@example.com", password: "secret" }
Response: { token: "jwt...", user: { ... } }
Plugin-Provided Service Endpoints
The following endpoints become available when the corresponding plugin is installed and registered with the kernel. Use the discovery services map to check availability.
Workflow (/workflow) — Plugin Required
| Method | Endpoint | Description |
|---|---|---|
| GET | /workflow/:object/config | Get workflow configuration |
| GET | /workflow/:object/:recordId/state | Get record's workflow state |
| POST | /workflow/:object/:recordId/transition | Execute state transition |
Approve/reject are not workflow routes (ADR-0019): approval is a flow node, and decisions are recorded on the approvals runtime via POST /approvals/requests/:id/approve and POST /approvals/requests/:id/reject.
Automation (/automation) — Plugin Required
| Method | Endpoint | Description |
|---|---|---|
| POST | /automation/:name/trigger | Trigger an automation flow by name (legacy alias: /automation/trigger/:name) |
The automation dispatcher also exposes flow CRUD (GET/POST /automation, GET/PUT/DELETE /automation/:name) and run observability/resume routes — see Durable pause & resume.
Views (/ui) — Plugin Required
| Method | Endpoint | Description |
|---|---|---|
| GET | /ui/views/:object | List views for an object |
| GET | /ui/views/:object/:viewId | Get a view definition |
| POST | /ui/views/:object | Create a new view |
| PATCH | /ui/views/:object/:viewId | Update a view |
| DELETE | /ui/views/:object/:viewId | Delete a view |
The auto-generated (non-CRUD) view resolver GET /ui/view/:object/:type is always available and provided by the kernel — see Metadata API. It is a separate route from the /ui/views CRUD above.
Realtime (/realtime) — Plugin Required
| Method | Endpoint | Description |
|---|---|---|
| POST | /realtime/connect | Establish WebSocket/SSE connection |
| POST | /realtime/disconnect | Close connection |
| POST | /realtime/subscribe | Subscribe to channel |
| POST | /realtime/unsubscribe | Unsubscribe |
| PUT | /realtime/presence/:channel | Set presence |
| GET | /realtime/presence/:channel | Get channel presence |
Notifications (/notifications) — Plugin Required
| Method | Endpoint | Description |
|---|---|---|
| GET | /notifications | List notifications (inbox) |
| POST | /notifications/read | Mark notifications as read (body: { ids: string[] }) |
| POST | /notifications/read/all | Mark all as read |
The core dispatcher implements only the list / read / read-all routes above. Device-registration and preference endpoints are provided by specific notification plugins, if any.
AI (/ai) — Plugin Required
| Method | Endpoint | Description |
|---|---|---|
| POST | /ai/nlq | Natural language → query |
| POST | /ai/suggest | Get value suggestions |
| POST | /ai/insights | Get data insights |
There is no /ai/chat route — the AI chat route was removed so the wire protocol aligns with the Vercel AI SDK. Use useChat() (@ai-sdk/react) directly against the streaming chat endpoint rather than the client SDK's ai namespace, which intentionally does not expose a chat method.
i18n (/i18n) — Plugin Required
| Method | Endpoint | Description |
|---|---|---|
| GET | /i18n/locales | List available locales |
| GET | /i18n/translations/:locale | Get translation bundle |
| GET | /i18n/labels/:object/:locale | Get field labels |
GraphQL (/graphql) — Plugin Required
| Method | Endpoint | Description |
|---|---|---|
| POST | /graphql | Execute GraphQL query/mutation |
File Storage (/storage) — Plugin Required
| Method | Endpoint | Description |
|---|---|---|
| POST | /storage/upload | Upload a file |
| GET | /storage/file/:id | Download a file |
See also
- API Overview — discovery, error handling, and protocol types
- Client SDK — service-aware TypeScript client that adapts to installed plugins