# Assets

# Tools: assets

16 tool(s) in this category.

### `metrics.evaluate`

**Evaluate Metric**

Use when you need a live numeric value from a registered metric artifact. Pass metric_id; returns the freshly computed value with format and cache hit indicator. The metric's content_json holds the query spec; the evaluator runs that query against platform_artifacts (promoted columns for indexed filtering, JSONB containment otherwise) and respects the metric's refresh_policy for caching (on_read, cache_5m, cache_1h, invalidate_on_event).

- HTTP: `POST /metrics/:id/evaluate`
- Required scopes: `metrics:read`
- Required role: `viewer`
- Stability: `stable`
- Version: `1.0`
- Tags: `metrics`, `compute`, `live-value`

**Input**

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `metric_id` | `string` | yes | UUID of the metric artifact to evaluate. |


### `pages.archive`

**Archive a Page**

Soft-archive a page so it leaves the default library list but stays recoverable, a reversible step distinct from a permanent removal. Use when a user wants to retire a page from view without destroying it. Requires write entitlement on the target page; returns a 404 when the page is missing or already gone.

- HTTP: `DELETE /pages/:id`
- Required scopes: `pages:write`
- Required role: `editor`
- Stability: `stable`
- Version: `1.0`
- Tags: `write`, `pages`, `archive`

**Input**

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `string` | yes | UUID of the page to archive. |


### `pages.create`

**Author a Page**

Author a new workspace page from a catalog spec: a designed UI of catalog components (plus an optional Custom sandbox node) mixing narrative, layout, and live tenant data declared as named queries the host runs server-side. Use when a user or agent wants to publish a fresh data view, dashboard, or report surface. The spec is verified before it persists; a broken draft is rejected with a per-stage verdict, and a Custom node needs the pages:admin scope.

- HTTP: `POST /pages`
- Required scopes: `pages:write`
- Required role: `editor`
- Stability: `stable`
- Version: `1.0`
- Tags: `write`, `pages`, `author`

**Input**

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | `string` | yes | Human-readable page name. Seeds the slug when omitted. |
| `summary` | `string` | no | Optional one-line description of the page. |
| `category` | `string` | no | Optional grouping label for the library view. |
| `tags` | `array<string>` | no | Optional free-form tags for filtering / search. |
| `spec` | `object` | yes | The page body: a json-render-style spec tree (catalog component nodes + optional Custom sandbox node). Verified and persisted; bindings may only reference declared queries. |
| `declared_queries` | `array<object>` | no | Named data bindings the page may invoke at render time (host-run, scoped). |
| `slug` | `string` | no | Optional explicit URL slug; auto-derived from name when omitted. |


### `pages.delete`

**Permanently Delete a Page**

Permanently remove a page so it disappears from every view, the destructive counterpart to a reversible archive. Use when a user explicitly wants a page gone for good, ideally after a confirmation step. Requires the dedicated delete scope plus write entitlement on the page; returns a 404 when the page is missing or already deleted.

- HTTP: `POST /pages/:id/hard-delete`
- Required scopes: `pages:delete`
- Required role: `editor`
- Stability: `stable`
- Version: `1.0`
- Tags: `destructive`, `pages`, `delete`

**Input**

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `string` | yes | UUID of the page to permanently delete. |


### `pages.get`

**Get Page By Id**

Fetch one page definition by its id - the TSX source, compiled module, declared data bindings, and last verification verdict - scoped to the workspace and gated by the page entitlement. Read when opening a page in the editor or inspecting what a saved view is built from. Returns null for a missing or cross-tenant id; live data is fetched separately at render time.

- HTTP: `GET /pages/:id`
- Required scopes: `pages:read`
- Required role: `viewer`
- Stability: `stable`
- Version: `1.0`

**Input**

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `string` | yes | UUID of the page to read. |


### `pages.get_template`

**Get Page Template**

Fetch one Amdahl-shipped page template in full - its catalog spec, declared queries, and intent - by slug or deterministic UUID. Fetch when an author has chosen a template and needs the complete spec to adapt and author a real page from. Templates are code-defined, so the read is the same for every workspace; returns null when the slug or id matches no template.

- HTTP: `GET /pages/templates/:slug`
- Required scopes: `pages:read`
- Required role: `viewer`
- Stability: `stable`
- Version: `1.0`

**Input**

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `slug` | `string` | yes | Slug or deterministic UUID of the template to read. |


### `pages.list`

**List Pages**

Read the workspace pages the caller is entitled to, newest-updated first, after dropping any the caller lacks read access to. Read when rendering the pages library sidebar or letting an agent discover the saved data views it can open. Excludes archived and deleted pages; ungated pages are always shown and admins see the full set.

- HTTP: `GET /pages`
- Required scopes: `pages:read`
- Required role: `viewer`
- Stability: `stable`
- Version: `1.0`

**Input**

_No structured input._


### `pages.list_templates`

**List Page Templates**

Read the catalog of Amdahl-shipped page templates - ready-to-adapt starting points (pipeline health, voice of customer, competitive battlecard) an author turns into a real page. Read when picking a starting point before authoring a page, so the agent adapts a vetted template instead of building a spec from scratch. Lean list (slug, name, intent); fetch the full spec via page_template://<slug>.

- HTTP: `GET /pages/templates`
- Required scopes: `pages:read`
- Required role: `viewer`
- Stability: `stable`
- Version: `1.0`

**Input**

_No structured input._


### `pages.mint_embed_token`

**Mint a Page Embed Link**

Mint a short-lived, token-scoped embed link for one page so it can be iframed on an external site. Use when a user or agent wants a shareable live embed of a page. The embed runs the page data under a scope CLAMPED to the caller's own access (it can never show more than the caller can see), and fails closed. audience 'self' scopes to the caller; 'public' / 'workspace' need an admin caller.

- HTTP: `POST /pages/:id/embed-token`
- Required scopes: `pages:embed`
- Required role: `editor`
- Stability: `stable`
- Version: `1.0`
- Tags: `pages`, `embed`, `share`

**Input**

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `string` | yes | UUID of the page to mint an embed link for. |
| `audience` | `enum("self" | "workspace" | "public")` | no | Who the embed is for. 'self' (default) scopes to exactly the caller's own data slice; 'public' / 'workspace' produce an unscoped (within-tenant) embed and REQUIRE an admin caller. |
| `rules` | `array<object>` | no | Optional explicit data-scope allow-rules for the embed (same grammar as access-policy rules). Clamped to the caller's own rules — anything the caller lacks is dropped. |
| `ttl_seconds` | `number` | no | Optional token lifetime in seconds (default 3600, max 2592000 = 30 days). |
| `origins` | `array<string>` | no | Optional allowed framing origins (CSP frame-ancestors). Empty + public audience ⇒ any origin. |


### `pages.render`

**Run a Page**

Execute a page's declared data bindings live for the current viewer and return the rows the host hydrates the component with, each query tenant- and access-scoped through the shared engine. Use when the sandbox needs to fill a page with real data, or to preview what a viewer would see. Reads nothing persisted; a broken binding returns its error inline rather than failing the run.

- HTTP: `POST /pages/:id/render`
- Required scopes: `pages:read`
- Required role: `viewer`
- Stability: `stable`
- Version: `1.0`
- Tags: `pages`, `render`, `data`

**Input**

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `string` | yes | UUID of the page to run. |
| `params` | `object` | no | Bound values for the page's declared named query params. |


### `pages.update`

**Edit a Page**

Revise an existing page in place: swap its catalog spec, declared queries, or metadata. Use when a user or agent wants to change what a published page renders. The replacement spec is verified before it lands; a broken revision is rejected with a per-stage verdict, a Custom node needs the pages:admin scope, and a clean one bumps the version and snapshots history. Requires write entitlement on the target page.

- HTTP: `PATCH /pages/:id`
- Required scopes: `pages:write`
- Required role: `editor`
- Stability: `stable`
- Version: `1.0`
- Tags: `write`, `pages`, `edit`

**Input**

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `string` | yes | UUID of the page to revise. |
| `name` | `string` | yes | Human-readable page name. |
| `summary` | `string` | no | Optional one-line description of the page. |
| `category` | `string` | no | Optional grouping label for the library view. |
| `tags` | `array<string>` | no | Optional free-form tags for filtering / search. |
| `spec` | `object` | yes | The replacement page body: a json-render-style spec tree (catalog component nodes + optional Custom sandbox node). Verified and persisted; bindings may only reference declared queries. |
| `declared_queries` | `array<object>` | no | Named data bindings the page may invoke at render time (host-run, scoped). |


### `pages.validate`

**Dry-run Page Verification**

Check a page spec through the catalog, prop, binding, and Custom-node code stages without saving it, returning every problem found in one verdict. Use when an editor or agent wants to see whether a draft would pass before committing a create or update. Always succeeds with the verdict as the body; a failing dry-run reports stage errors rather than throwing.

- HTTP: `POST /pages/validate`
- Required scopes: `pages:read`
- Required role: `viewer`
- Stability: `stable`
- Version: `1.0`
- Tags: `pages`, `validate`, `dry-run`

**Input**

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | `string` | no | Optional name (only affects an auto-derived slug). |
| `summary` | `string` | no | Optional one-line description of the page. |
| `category` | `string` | no | Optional grouping label for the library view. |
| `tags` | `array<string>` | no | Optional free-form tags for filtering / search. |
| `spec` | `object` | yes | The page body spec tree (catalog nodes + optional Custom node) to verify. |
| `declared_queries` | `array<object>` | no | Named data bindings to structurally validate against the workspace. |
| `slug` | `string` | no | Optional explicit URL slug. |


### `prompts.artifact.compose_campaign`

**Compose Campaign Prompt**

Use when the user asks for a multi-piece campaign (research + blog + LinkedIn) on one topic. Directs the agent to produce a parent research_report, then two child content pieces linked to it so provenance is explicit and one research run powers both outputs.

- HTTP: (not exposed as REST)
- Required scopes: `artifacts:write`, `data:read`, `knowledge_base:read`
- Required role: `viewer`
- Stability: `stable`
- Version: `1.0`
- Tags: `prompt`, `artifact`, `campaign`

**Input**

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `topic` | `string` | yes | Campaign topic. |


### `prompts.artifact.draft_weekly_report`

**Draft Weekly Report Prompt**

Use when the user asks to compile last week into a saved report. Directs the agent to pull a 7-day activity snapshot via data.query and then save a research_report artifact through artifacts.create with the summary baked in.

- HTTP: (not exposed as REST)
- Required scopes: `data:read`, `artifacts:write`
- Required role: `viewer`
- Stability: `stable`
- Version: `1.0`
- Tags: `prompt`, `artifact`, `report`

**Input**

_No structured input._


### `prompts.artifact.embed_artifact`

**Embed Artifact Prompt**

Use when the user asks to embed, share, or publish a single artifact on an external website. Walks the agent through flipping visibility to public AND surfacing the iframe snippet plus the auto-resize listener from the resulting metadata. Returns the copy-pasteable HTML the user needs.

- HTTP: (not exposed as REST)
- Required scopes: `artifacts:write`
- Required role: `viewer`
- Stability: `stable`
- Version: `1.0`
- Tags: `prompt`, `artifacts`, `embed`, `public`

**Input**

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `artifact_id` | `string` | yes | UUID of the artifact to publish + embed. |


### `prompts.artifact.refine_content_piece`

**Refine Content Piece Prompt**

Use when the user wants to iterate on an existing content artifact with specific feedback. Directs the agent to read the artifact, rewrite the body against the feedback, and save the revision through artifacts.update (new version, history preserved).

- HTTP: (not exposed as REST)
- Required scopes: `artifacts:read`, `artifacts:write`
- Required role: `viewer`
- Stability: `stable`
- Version: `1.0`
- Tags: `prompt`, `artifact`, `content`

**Input**

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `artifact_id` | `string` | yes | UUID of the artifact. |
| `feedback` | `string` | yes | What to change. |
