Skip to content

Cards overview

A card is a structured UI element the voice agent renders on the user’s screen during a call. The user interacts with it (tap, select, type, upload) and the result is returned to the LLM so the conversation continues with accurate, confirmed data.

Cards replace the “can you spell that for me?” loop entirely.

When to use a card

Use caseWithout PowsooWith Powsoo
Capture emailAgent asks user to spell: “j-o-h-n at…”STT pre-fill, user taps Confirm
Capture phoneRepeat-back loop, mishears digitsTap-to-confirm with edit option
Pick appointmentSay a date verbally, mishear timeDate/time picker card
Choose from a listRead all options aloud, wait for verbal pickTap-to-select list card
Upload a photoImpossible over voiceUpload card with camera/gallery
ConsentAsk verbally, no recordConsent checkbox card with timestamp

Card anatomy

Every card has:

  • Title — short heading shown at the top ("Confirm your email")
  • Description — optional sub-text for context
  • Fields — zero or more editable rows; each has a label, a pre-filled value (from STT), and a type
  • Actions — one or more tap buttons ("Confirm", "Edit", "Skip")

The LLM populates fields with values it captured during the conversation. The user can edit before confirming. Edits are returned in edited: [...] so the LLM knows what changed.

The one-card rule

Only one card is visible at a time. If the LLM fires a second powsoo_show_card before the first is resolved, the second card is queued and slides in after the first is dismissed. This matches how voice conversations naturally flow — one question at a time.

Card result shape

Every card interaction returns the same structure to the LLM:

{
"status": "confirmed",
"action": "confirm",
"fields": { "Email": "john@example.com" },
"edited": []
}
FieldDescription
status"confirmed" = no edits. "edited" = user changed at least one field. "skipped" = user tapped a skip/cancel action.
actionThe value of the action button tapped.
fieldsKey-value map of all field labels → current values (including any edits).
editedArray of field labels that were changed from the pre-filled value.

Reference