Skip to main content
Magic Canvas lets a PAL show interactive cards, such as multiple-choice questions, calendars, charts, and text, during a live video conversation. User responses flow back to the PAL and your backend. The PAL decides when to show a card; there is no per-card API call.

Conversation Flow

1

Attach the Magic Canvas skill

Attach via PUT /v2/pals/{pal_id}/skills/magic_canvas; remove with DELETE on the same path:
Attaching enables every component with default settings, including components Tavus adds later. The exception is scheduling_embed, which stays inactive until you set its scheduling_url.config.components is a sparse overlay: add an entry only to configure or disable a component ({"enabled": false}); unlisted components stay on. See Configuring your PAL.
2

Create a conversation

Video conversations get Canvas actions automatically. Audio-only, text-chat, and external-meeting (meeting_url, e.g. Zoom/Teams/Meet) conversations never get them.
3

PAL shows a card

The PAL invokes a Canvas action; the card renders in a side rail beside the PAL video, and the PAL can clear it mid-conversation.
4

Interaction flows back

When the user submits, skips, or dismisses a card:
  • The PAL responds to it, as it does to speech.
  • Tavus records it and delivers a canvas.interaction event to your conversation webhook, once per interaction.
Fetch a conversation’s full Canvas interaction history with your API key; see Canvas interactions.

When cards appear

The PAL decides when to show a card; you do not call an API to trigger one. Steer that behavior with usage_guidance on the skill, the PAL’s system prompt, or per-conversation context. See When cards appear for how each lever fits.

Hosted vs SDK

Both use the same PALs, components, and webhook; the difference is how much of the UI you own.

Components

Seven components: four interactive (submit an answer or skip) and three display-only (dismiss only).

Rendering

Components render in a sandboxed iframe that isolates styles and scripts in both directions, served from Tavus infrastructure. To render cards in your own React tree, register a renderer per component in the SDK; interactions flow back identically. See Custom rendering.

Next Steps