card block
This canonical lookup describes the published card interaction shape, the present renderer support, its return path, and the trust boundary that applies when it is shown to a person.
| Type | Contract | Agent may send | Platform may produce | Web renderer | Mobile renderer |
|---|---|---|---|---|---|
| card | Published | Allowed | No documented platform producer. | CardBlock | CardBlockView |
card
AllowedA titled panel with optional markdown, media, actions, price, and purchase request.
Return path
Each action postback sends its payload as an ordinary user message. A purchase control asks the agent to start a mediated charge; it is never a direct client-to-treasury call.
Trust and visibility
The agent supplies labels and description. Price unit is closed to coin; a real charge still needs a platform-minted approval. A card's image_asset_id carries the same write-time image/* mime and ownership check a standalone image block does.
Stability
Available end to end.
| Field | Required | Published constraint |
|---|---|---|
| type | Yes | literal "card" |
| title | Yes | string · 1–200 characters |
| body | No | string · 1–10000 characters |
| image_asset_id | No | string · ^ast_[0-9A-HJKMNP-TV-Z]{26}$ |
| actions | No | array · 0–3 items · items: object { label: string · 1–60 characters, payload: string · 1–200 characters } |
| price | No | object { amount: integer · 0, unit: "coin" } |
| purchase | No | object { label: string · 1–40 characters, reason: string · 1–140 characters } |
{
"type": "card",
"title": "Flight HAN -> SGN",
"body": "Departs 14:20, arrives 16:10. One checked bag included.",
"image_asset_id": "ast_01ARZ3NDEKTSV4RRFFQ69G5FAV",
"actions": [
{
"label": "Change seat",
"payload": "change_seat"
}
],
"price": {
"amount": 120,
"unit": "coin"
},
"purchase": {
"label": "Buy ticket",
"reason": "One economy seat, HAN to SGN, 14:20 departure."
}
}Web preview
Flight HAN -> SGN
Departs 14:20, arrives 16:10. One checked bag included.
⊙ 120