text component displays a read-only card of plain text alongside the live video. Users can’t type into or submit from it; to collect an answer, use question or input.
text has no component-specific configuration; it’s enabled once the Magic Canvas skill is attached (see Enabling and configuring components). To disable it, set { "components": { "text": { "enabled": false } } } in the skill config.
Display Behavior
Enabling the component adds system-prompt guidance to show a text card for reference material the user reads while the conversation continues. The PAL keeps talking while the card is on screen, and updates it via theupdate_component control action rather than stacking a second one.
Arguments
The PAL invokescanvas_show_text; Tavus renders the card. The tool_call_id is echoed back on every interaction the card generates.
| Field | Type | Required | Description |
|---|---|---|---|
title | string | ❌ | Short heading above the body. The renderer enforces a 120-character limit. |
body | string | ✅ | The text to display, rendered as plain text by default (as Markdown when format is markdown). The renderer enforces a 4,000-character limit. |
format | string | ❌ | plain or markdown, controlling how body is rendered. Defaults to plain. |
layout | object | ❌ | { "preferred_slot": "safe-area-right" | "safe-area-left" }, where the card prefers to appear. Defaults to safe-area-right, beside the PAL video. Available on every component. |
display_mode | string | ❌ | inline (the only supported value). Available on every component. |
Example call
Interactions
text is a lifecycle-only component: it never produces submit or skip interactions. The interactions endpoint accepts four types:
| Type | When it fires |
|---|---|
dismiss | The user closed the card via a close control. The stock Tavus text card has an always-present X button (aria-label “Dismiss text”); clicking it fires a recorded dismiss interaction. |
clear | The card was removed: the PAL cleared or replaced it. The stock renderer handles canvas_clear and replacement locally without recording an interaction. |
error | The card failed on the client. Stock-renderer failures surface through the SDK’s local onError callback, not as recorded interactions. |
heartbeat | A liveness signal a custom renderer may post while a card is on screen. The stock renderer never posts heartbeats. |
The stock Tavus renderers (hosted embed and
@tavus/cvi-ui) post a dismiss interaction for text cards (from the X button). They do not post clear, error, or heartbeat; expect those only from a custom renderer.canvas.interaction webhook event and appears in the interaction history (requires your API key):
Webhook Payload
Adismiss for a text card; the other types share the same envelope, with only type (and sometimes value) changing.

