Metadata & Package API
REST endpoints for object schemas, metadata types, UI views, and package management.
Metadata & Package API
Manage object schemas, metadata types, UI views, and installed packages over REST. All paths are relative to the base URL (defaults to /api/v1) — see the API Overview for discovery and service availability.
Metadata
Retrieve and manage object schemas, metadata types, and UI views. Always available — provided by the kernel.
GET /meta
List all registered metadata types.
Response: { types: ["object", "view", "plugin", ...] }
GET /meta/:type
List all items of a metadata type.
| Parameter | Location | Description |
|---|---|---|
type | path | Metadata type name, singular or plural — object and objects address the same type |
Both spellings are accepted and behave identically: the same audience gate (ADR-0046 §6.7 books/docs), the same RBAC filtering of privileged apps, and the same response shaping apply either way. Metadata type names are singular by convention (Prime Directive #3) while REST paths are plural, so both forms exist in the wild.
Response: { type: "object", items: [{ name: "account", ... }, ...] }
GET /meta/:type/:name
Get a specific metadata item with optional ETag caching.
| Parameter | Location | Description |
|---|---|---|
type | path | Metadata type name |
name | path | Item name (snake_case) |
If-None-Match | header | ETag for conditional request |
Response: { type: "object", name: "account", item: { ... } }
304 if ETag matches (not modified).
PUT /meta/:type/:name
Create or update a metadata item.
Body: { type: "object", name: "account", item: { ... } }
Response: { success: true }
GET /ui/view/:object/:type
Get an auto-generated UI view for an object.
| Parameter | Location | Description |
|---|---|---|
object | path | Object name (snake_case) |
type | path | list or form |
Response: Full ViewSchema definition with columns/fields derived from the object schema.
Package Management
Manage installed plugins/packages.
GET /packages
List installed packages.
POST /packages
Install a package from its manifest (SDK: client.packages.install). Re-installing an
already-installed id returns 409 Conflict unless overwrite: true.
Body: { manifest: { id: "plugin-auth", name: "Plugin Auth", version: "1.0.0", ... }, settings?: { ... }, enableOnInstall?: true, overwrite?: false }
Response: { package: { id: "plugin-auth", version: "1.0.0", ... }, message?: "..." }
POST /packages/publish
Publish a package (manifest + metadata) to the package marketplace registry. This is publisher tooling, not part of the app SDK surface.
Body: { manifest: { id: "plugin-auth", name: "Plugin Auth", version: "1.0.0", ... }, metadata: { objects: [...], views: [...], ... } }
Response: { success: true, message: "...", package: { id: "plugin-auth", version: "1.0.0" } }
GET /packages/:id
Get package details.
DELETE /packages/:id
Uninstall a package.
PATCH /packages/:id/enable
Enable a disabled package.
PATCH /packages/:id/disable
Disable a package without uninstalling.
See also
- API Overview — discovery, error handling, and protocol types
- Data API — CRUD, batch operations, and analytics