> ## Documentation Index
> Fetch the complete documentation index at: https://agentheya.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Agent Details

> Configure your agent's public identity — name, description, instructions, visibility, legal policies, A2A discovery card, and the danger zone.

<Info>
  **Field reference:** [`details`](/reference/details) · [`public_details`](/reference/public_details) · [`a2a_card`](/reference/a2a_card) · [`policy_tos`](/reference/policy_tos) · [`policy_privacy`](/reference/policy_privacy) · [`policy_refund`](/reference/policy_refund) · [`policy_acceptable_use`](/reference/policy_acceptable_use) — every field, type, default, and tier for this page.
</Info>

The **Public Details** page is where you manage everything your subscribers (and other agents) see about this agent: its public name, the description on the web chat page, the instructions shown to first-time visitors, who can access it, and the legal policies that apply.

<Note>
  Looking for the **Web chat page layout**, **Dashboard pages**, or **Response presentation** cards? They live on the [Web](/sidebar-menu/web) page (under **CHANNELS** in the sidebar).
</Note>

## Public identity

| Field             | What it does                                                                                                                                                                                                                                  |
| ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Agent Name**    | The unique slug used in every URL (`agentheya.com/agent/{name}`). Click **Change Name** to edit — renaming changes every URL and existing links / integrations will stop working. Letters, digits, hyphen, underscore. Minimum 12 characters. |
| **Description**   | The body shown on the agent's public web chat page. Accepts **Text, Markdown, and JsonUI** — no HTML.                                                                                                                                         |
| **Instructions**  | A shorter block shown to first-time visitors explaining how to interact with the agent. Same formatting: **Text, Markdown, and JsonUI** — no HTML.                                                                                            |
| **Contact Email** | A public-facing support address for your users. Optional.                                                                                                                                                                                     |

See [Formatting: Text, Markdown and JsonUI](#formatting-text-markdown-and-jsonui) below for what these two fields accept.

## Formatting: Text, Markdown and JsonUI

The **Description** and **Instructions** fields render in three ways, and you can mix all three in the same field:

1. **Text** — plain text. Line breaks are preserved.
2. **Markdown** — standard Markdown for styling, links, and images:
   * **Bold** `**text**`, *italic* `*text*`, headings `## Heading`, bullet/numbered lists, quotes, tables, and code.
   * **External images:** `![alt text](https://example.com/image.png)`
   * **External links:** `[link text](https://example.com)`
3. **JsonUI** — a small, safe component language for laying out richer UI (cards, images, link buttons, tables, stats, alerts, and simple interactive widgets) right on your agent's chat page.

<Note>
  **HTML is not supported.** Any raw HTML you type is shown as literal text, never rendered. Use Markdown for formatting and JsonUI for layout. (This applies to Description and Instructions only — the Legal Policy fields still accept HTML.)
</Note>

### JsonUI

JsonUI is Agentheya's generative-UI format. You write a JSON document inside a fenced code block tagged `jsonui`, and the page renders it as styled components. It's the same engine your [custom tools](/sidebar-menu/tools) use to return rich UI in chat — here you author it by hand.

A JsonUI block looks like this:

````md theme={null}
```jsonui
{
  "root": "welcome",
  "elements": {
    "welcome": { "type": "card", "props": { "title": "Welcome 👋" }, "children": ["msg"] },
    "msg": { "type": "alert", "props": { "message": "Ask me anything about your order.", "variant": "info" }, "children": [] }
  }
}
```
````

#### The spec shape

| Key        | Required | Meaning                                                                                                                                                                               |
| ---------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `root`     | yes      | The key of the top-level element to render.                                                                                                                                           |
| `elements` | yes      | A map of `key → { type, props, children }`. `type` is a component name (table below); `props` configures it; `children` is an array of other element keys (`[]` for leaf components). |
| `state`    | no       | The data model for interactive widgets. Defaults to `{}` — omit it for static UI.                                                                                                     |

Notes & limits:

* Up to **200 elements** and **6 levels** of nesting per block.
* Image `src` and link `href` must be **`https://`** URLs (external images/links). `javascript:`, `data:`, etc. are rejected.
* Unknown component types or props (e.g. a typo) are rejected — the block shows a small inline error instead of breaking the page, so you can fix it.

#### Components

| Component   | Key props                                                                                  | Notes                                                                                                                                               |
| ----------- | ------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| `card`      | `title?`, `subtitle?`                                                                      | Panel container. Has `children`.                                                                                                                    |
| `list`      | `direction?` (`vertical`\|`horizontal`), `gap?` (`sm`\|`md`\|`lg`)                         | Lays children in a row or column. Has `children`.                                                                                                   |
| `image`     | `src` (https), `alt?`, `width?` (px), `href?` (https)                                      | External image. Add `href` to make it a clickable link.                                                                                             |
| `link`      | `href` (https), `label`, `variant?` (`default`\|`button`)                                  | Opens in a new tab. `variant: "button"` renders a call-to-action button.                                                                            |
| `button`    | `label`, `variant?` (`primary`\|`secondary`\|`danger`\|`ghost`), `disabled?`               | Wire behaviour via `on.press` (see Interactivity).                                                                                                  |
| `alert`     | `message`, `title?`, `variant?` (`default`\|`info`\|`success`\|`warning`\|`danger`)        | Banner-style notice.                                                                                                                                |
| `badge`     | `label`, `variant?` (same as alert)                                                        | Small inline chip.                                                                                                                                  |
| `stat`      | `label`, `value`, `change?`, `changeType?` (`up`\|`down`\|`neutral`), `prefix?`, `suffix?` | A single KPI / metric.                                                                                                                              |
| `table`     | `columns` (string\[]), `rows` (cell\[]\[]), `caption?`                                     | Simple data table.                                                                                                                                  |
| `key_value` | `items` (`[{ key, value }]`)                                                               | Definition-list of pairs.                                                                                                                           |
| `divider`   | —                                                                                          | Horizontal separator.                                                                                                                               |
| `form`      | `title?`, `description?`                                                                   | Groups inputs + buttons. Has `children`.                                                                                                            |
| `input`     | `kind`, `name`, `label?`, `placeholder?`, `required?`, `options?`, `min?`, `max?`          | `kind` ∈ `text, email, number, integer, tel, url, password, textarea, select, checkbox`. `options` (`[{ value, label }]`) is required for `select`. |

Optional props (`?`) can simply be left out.

#### Example: a welcome panel with an image and a call-to-action

````md theme={null}
```jsonui
{
  "root": "welcome",
  "elements": {
    "welcome": { "type": "card", "props": { "title": "Welcome to Acme Support" }, "children": ["hero", "intro", "cta"] },
    "hero":    { "type": "image", "props": { "src": "https://acme.com/banner.png", "alt": "Acme", "width": 480 }, "children": [] },
    "intro":   { "type": "alert", "props": { "message": "I can help with orders, refunds, and shipping. Ask me anything.", "variant": "info" }, "children": [] },
    "cta":     { "type": "link", "props": { "href": "https://acme.com/help", "label": "Browse the Help Center", "variant": "button" }, "children": [] }
  }
}
```
````

#### Example: feature highlights with stats

````md theme={null}
```jsonui
{
  "root": "grid",
  "elements": {
    "grid": { "type": "list", "props": { "direction": "horizontal", "gap": "lg" }, "children": ["s1", "s2", "s3"] },
    "s1": { "type": "stat", "props": { "label": "Avg. reply", "value": "30s", "changeType": "up" }, "children": [] },
    "s2": { "type": "stat", "props": { "label": "Resolved", "value": "98%" }, "children": [] },
    "s3": { "type": "stat", "props": { "label": "Languages", "value": 12 }, "children": [] }
  }
}
```
````

#### Example: a comparison table

````md theme={null}
```jsonui
{
  "root": "plans",
  "elements": {
    "plans": { "type": "card", "props": { "title": "Plans" }, "children": ["t"] },
    "t": {
      "type": "table",
      "props": {
        "columns": ["Plan", "Price", "Seats"],
        "rows": [["Starter", "$0", 1], ["Team", "$49", 10], ["Business", "$199", 50]]
      },
      "children": []
    }
  }
}
```
````

#### Example: a list of quick links

````md theme={null}
```jsonui
{
  "root": "links",
  "elements": {
    "links": { "type": "list", "props": { "direction": "vertical", "gap": "sm" }, "children": ["l1", "l2", "l3"] },
    "l1": { "type": "link", "props": { "href": "https://acme.com/docs", "label": "Documentation" }, "children": [] },
    "l2": { "type": "link", "props": { "href": "https://acme.com/status", "label": "System status" }, "children": [] },
    "l3": { "type": "link", "props": { "href": "https://acme.com/contact", "label": "Contact sales" }, "children": [] }
  }
}
```
````

#### Interactivity (optional)

Elements can carry two extra keys alongside `props` and `children`:

* `on` — bind an event to an action, e.g. `"on": { "press": { "action": "setState", "params": { "statePath": "/open", "value": true } } }`.
* `visible` — show/hide based on state, e.g. `"visible": { "$state": "/open" }`.

The actions that work on your web page are the **local-state** ones, which need no server: `setState`, `pushState`, and `removeState`. They read and write the block's `state`, so you can build toggles, expanders, and growing lists.

````md theme={null}
```jsonui
{
  "root": "box",
  "state": { "open": false },
  "elements": {
    "box": { "type": "card", "props": { "title": "Shipping policy" }, "children": ["toggle", "details"] },
    "toggle": {
      "type": "button",
      "props": { "label": "Show details" },
      "on": { "press": { "action": "setState", "params": { "statePath": "/open", "value": true } } },
      "children": []
    },
    "details": {
      "type": "alert",
      "props": { "message": "We ship worldwide within 3-5 business days.", "variant": "default" },
      "visible": { "$state": "/open" },
      "children": []
    }
  }
}
```
````

<Warning>
  The `submit` and `cancel` actions (and the `form`/`input` components) are designed for UI returned by [tools](/sidebar-menu/tools) during a chat, where there's a conversation to send the collected values back to. On the Description / Instructions page there's nowhere to submit to, so **`submit`/`cancel` do nothing here**. For navigation use a `link` (with `variant: "button"`); for in-place interactivity use the local-state actions above.
</Warning>

## Access

The **Access** section controls who can reach this agent.

### Visibility

| Mode        | Behaviour                                                                                 |
| ----------- | ----------------------------------------------------------------------------------------- |
| **Public**  | Anyone can register on the web chat page. Requires Public Pricing to be configured first. |
| **Private** | Only existing users can log in. New users get in by invite link only.                     |
| **Hidden**  | The agent page is completely hidden from visitors.                                        |

### Invite users

Click **Invite Users by Email** to open the **Users** page, where you invite people and manage who can access this agent. The button is a shortcut to that page — invites are sent and managed there, not inline on this page.

## Legal Policies

Policies shown to your subscribers in addition to Agentheya's own policies. These fields accept text, Markdown, or HTML.

* **Name / Company** — Displayed alongside your legal policies on the agent page.
* **Terms of Service**
* **Privacy Policy**
* **Refund Policy**
* **Acceptable Use Policy** — Optional behaviour rules your subscribers must follow (domain-specific restrictions, prohibited content, and so on). Leave it blank to rely on Agentheya's platform Acceptable Use Policy alone.

Each policy has a **Set to default** button that loads a template version referencing your agent name, company/business name, and support email — edit it to suit your business.

## A2A / External Agents

<Info>
  **Business plan.** The **A2A / External Agents** card below is only available on the Business plan. On lower plans it is replaced by an upgrade prompt. (The **Internal Agents** allowlist moved to the [Handoff](/sidebar-menu/human-handoff) page.)
</Info>

Customise how this agent appears to other AI agents that discover it via its A2A agent card. Each agent has its own card at `https://a2a.agentheya.com/agent/{agent_id}/.well-known/agent-card.json` (`{agent_id}` is your agent's immutable 10-character id, shown as the **A2A Server** URL on the [API Keys](/sidebar-menu/api-keys) page). These fields only affect agent-to-agent discovery — they do not change your public-facing page.

| Field                    | Purpose                                                                                          |
| ------------------------ | ------------------------------------------------------------------------------------------------ |
| **A2A Description**      | Task-focused description for external agents. Falls back to your general description when blank. |
| **Example Queries**      | One example per line, max 10. Helps other agents decide whether to route to you.                 |
| **Extra Discovery Tags** | Comma-separated, lowercase letters/digits/hyphen/underscore. Max 10.                             |
| **Documentation URL**    | Optional link to your own integration docs. Falls back to Agentheya's A2A docs.                  |

The per-agent card is **public** — external agents can fetch it without a key. An `Authorization: Bearer sk_ah_...` key is only needed to actually call the agent (POST tasks to `https://a2a.agentheya.com/agent/{agent_id}`), not to read its card. See the [A2A guide](/a2a) for the full protocol.

### Test this agent via A2A

Two buttons open ready-made test harnesses in a popup window, copy-paste ready:

* **Promptfoo eval config** — a Promptfoo configuration that drives this agent through its A2A interface.
* **Node.js test client** — a small Node.js client that calls the same interface.

Any A2A-aware tool can also point straight at the card endpoint above. Both harnesses need an invocation key from the **API Keys** page.

## Danger zone

The danger zone contains irreversible actions:

* **Delete this agent** — permanently removes the agent and all its data, conversations, files, and integrations.

You must type the agent name to confirm deletion. This cannot be undone.

## Manage via the Management MCP

This page can be configured programmatically through the [Management MCP](/manage-mcp) — useful for AI agents and CI pipelines.

|               |                                                                                             |
| ------------- | ------------------------------------------------------------------------------------------- |
| Endpoint      | `https://manage.agentheya.com/mcp`                                                          |
| Tool          | `config.set`                                                                                |
| Section       | `details`                                                                                   |
| Schema (HTTP) | [`GET /api/manage-mcp/schema/details`](https://agentheya.com/api/manage-mcp/schema/details) |

Example:

```json theme={null}
{
  "tool": "config.set",
  "owner_id": "<your owner_id>",
  "agent_id": "<your agent_id>",
  "section": "details",
  "data": { /* see schema for accepted fields */ }
}
```

Partial updates are supported — only the fields you include are changed. Call `config.get` to read the current values and `schema.get` (or the HTTP schema URL above) to see the full field list.
