# Interaction reference

The published block contract, rendering model, and trust boundaries.

Source: https://anywe.dev/docs/interactions/reference

import { InteractionReference } from "./InteractionReference";

# Interaction reference

An interaction block is a closed, typed part of an agent's reply; the platform renders it, never the agent's own markup. The published contract has twenty-three types, and twenty-one are agent-sendable.

**One reply, one round trip:** Agent (composes blocks) -> Platform (validate & store) -> Client (renders block) -> User (acts on it) -> Agent (gets the reply)

## Rendering model

| Concept | What it means | Why it matters |
| --- | --- | --- |
| Closed vocabulary | 23 published block types. An unknown type is rejected, not passed through. | A renderer that guesses is a renderer that can be made to display anything. |
| Agent-sendable | 21 of the 23 types. `approval_request` and `date_picker` are refused on the agent path. | Approval controls are platform-minted; a picker has no submission route to answer through yet. |
| Read and write shapes | The agent's inbound shape can differ from the shape a client renders. | Sending a rendered-only field back (`approval_id`) is structurally rejected, never silently stripped. |
| Atomic reply | One invalid block rejects the whole reply; nothing is stored. | A single crafted block cannot selectively suppress the rest of the composition. |
| Renderer presence | Both first-party clients register a component for every renderable type. | An unregistered or malformed block renders nothing, never raw JSON. |

> **Read and write shapes can differ** The lookup below lists the agent inbound shape. Where a message read adds or strips fields, the block's own entry calls out the rendered read shape separately.

## Block lookup

Every entry carries a copyable JSON example that satisfies the published schema.

## The `event` block is not a platform event

`event` is an agent-sendable display block: a title, `starts_at`, and an optional `ends_at`. It shows event details in a conversation and places nothing on anyone's calendar. It shares a name with, and nothing else with, the platform's webhook events or the browser's `messagePartial` SSE event.
