Write
update_card
Updates content fields on an existing card — heading, subheading, description, button, badge, rating, cover color, or visibility. Only supplied fields are changed; omitted fields are untouched.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| outlineId | string | — | Outline ID. Defaults to your own outline. |
| stackId | string | Yes | ID of the stack containing the card. |
| cardId | string | Yes | ID of the card to update. Get from list_cards. |
| fields | object | Yes | Fields to update. All sub-fields are optional — only supplied ones change. |
| fields.heading | string | — | Main heading text. |
| fields.subheading | string | — | Subheading text. |
| fields.description | string | — | Body description text. |
| fields.buttonText | string | — | CTA button label. |
| fields.buttonUrl | string | — | CTA button URL. Must start with https:// or http://. |
| fields.badge | string | null | — | Badge label text, or null to remove. |
| fields.rating | number | null | — | Star rating (e.g. 5.0), or null to remove. |
| fields.coverColor | string | — | Background color hex for the card cover. |
| fields.hidden | boolean | — | true to hide the card from public view without deleting it. |
Response
| Field | Type | What it means |
|---|---|---|
| outlineId | string | Resolved outline ID. |
| stackId | string | The stack the card belongs to. |
| cardId | string | The card that was updated. |
| updated | object | The full card state after the update — all fields, including those you didn't change. |
Example
Request
json
{
"stackId": "stack_abc",
"cardId": "card_xyz789",
"fields": {
"heading": "Brand Photography",
"subheading": "Half-day & full-day packages",
"description": "In-studio or on-location brand photography for founders and creative teams. Natural light preferred.",
"buttonText": "Book a call",
"buttonUrl": "https://cal.com/alexrivera"
}
}Response
json
{
"outlineId": "42",
"stackId": "stack_abc",
"cardId": "card_xyz789",
"updated": {
"cardId": "card_xyz789",
"kind": "service",
"heading": "Brand Photography",
"subheading": "Half-day & full-day packages",
"description": "In-studio or on-location brand photography for founders and creative teams. Natural light preferred.",
"buttonText": "Book a call",
"buttonUrl": "https://cal.com/alexrivera"
}
}When to use
After add_card creates an empty card, use update_card to fill in the content. Also use to refine existing content based on creator feedback or analytics data.
Gotchas
Watch out
- Only supplied fields change — you cannot accidentally wipe a field by omitting it.
buttonUrlmust start withhttps://orhttp://— bare domains likecal.com/xyzwill fail validation.- Use
hidden:trueto temporarily pull a card from the public profile without losing content. - Get the
cardIdandstackIdfromlist_cardsfirst.