Check environment and feature availability before following this guide.
/lb-send, a scheduled message or a batch digest. The record has its own id, message_id, which
every send returns.
Who can change what
An API key’s sends count as its owner’s. Over the API these need the
messages:read,
messages:update and messages:delete scopes. Existing keys don’t get them automatically, so add
them to a key that should have them.
Find a message
Use themessage_id a send returned, or list messages:
template_id, channel_id, message_ts (with channel_id), lifecycle
(live, deleted, expired), source, reference, sent time and expires_before.
GET /v1/messages/{id} adds the blocks as LithoBlocks last posted them, and
GET /v1/messages/{id}/events lists every change and who made it.
A reference is your own handle for a message, given when you send it:
Correct the text
Change the words in place: header, section, section field, context and markdown text. Buttons, links and what they do stay as sent. Correcting text is free.indexis the block’s position inblocksfromGET /v1/messages/{id}.pathistext.text(header, section),fields.N.text(a section field),elements.N.text(context) ortext(markdown).remove_blocksremoves whole blocks.text, if you give it, replaces the notification text; otherwise it’s written from the blocks.
text_editable
is true). A message sent from the web app with sensitive values redacted isn’t; re-render it
instead.
Re-render with corrected data
Compile the message again from its template with the data it should have had. This costs one credit, charged only when Slack accepts the change.version is sent (the template version the message was sent from, the default) or current
(the template’s live version). Pass the data in full: it replaces what the message was sent with.
Delete
scrub=true also clears LithoBlocks’ copy of what
the message said: its blocks, metadata, notification text and the send’s logged input. The record
and its history stay.
Revisions and conflicts
Every change names therevision you read. If the message changed since (someone else corrected
it, a button updated it, it expired), nothing happens and the answer is 409 revision_conflict.
Read it again and decide.
After
slack_outcome_unknown the message is held. LithoBlocks can’t read messages back from
Slack, so a person has to look and say what happened. Until then nothing else can change the
message:
From MCP and the SDK
AI assistants connected over MCP havelist_messages, get_message,
update_message, delete_message and reconcile_message. LithoBlocks’ instructions tell them to
correct a wrong message rather than post a correction under it. The
TypeScript SDK has client.messages.list, get, update, delete and
reconcile.
To retire a message on a schedule instead, see Expiring messages.
