Skip to main content
Set when a sent message expires

Authorizations

Authorization
string
header
required

LithoBlocks API key obtained from your organization dashboard. The LithoBlocks MCP server also presents a Supabase-issued user session token here on the user's behalf; such a token acts as that user with the scopes their organization role allows.

Headers

Idempotency-Key
string

Any unique string (a UUID is fine). Repeating a request with the same key and body within 24 hours replays the original response with Idempotency-Replayed: true instead of running again; the same key with a different body is a 409. Incomplete and 5xx outcomes are retained for reconciliation beyond 24 hours. Applies only on the documented endpoints. Never automatically change keys to bypass an uncertain outcome.

Required string length: 1 - 255
Example:

"3f7d2c1a-9b4e-4f0a-8c6d-2e1b5a7c9d10"

Path Parameters

id
string<uuid>
required

Body

application/json

When and how it expires

Expire the message: replace it with a notice, or delete it. Precise to about a minute; a button clicked after the deadline does nothing even before the message is replaced.

after_seconds
integer

Seconds after the message is delivered. At least 60: expiry runs about once a minute.

Required range: 60 <= x <= 31622400
at
string<date-time>

An absolute time, at least 60 seconds from now.

mode
enum<string>
default:replace

replace (default): the message is replaced with a notice that it expired, and its buttons stop working. delete: it is deleted from Slack.

Available options:
replace,
delete
retain_content
boolean
default:false

By default LithoBlocks clears its own copies of what the message said when it expires. true keeps them.

Response

The message with its expiry

id
string<uuid>
required

LithoBlocks' id for the message; send responses return it as message_id.

template_id
string<uuid> | null
required

Null once the template has been deleted.

template_name
string | null
required

The template's name when the message was sent.

template_version_id
string<uuid> | null
required
workspace_id
string
required

The Slack workspace (team) id.

channel_id
string | null
required

The resolved channel; a D… id for a direct message.

channel_name
string | null
required

The channel's name when the message was sent, without the #. Null for direct messages, private channels and messages sent before 2026-10-22.

message_ts
string
required

Slack's timestamp for the message.

recipient_email
string | null
required
recipient_slack_id
string | null
required
sent_at
string
required
sent_by
string<uuid>
required

The user the send is attributed to; for an API key, the key's owner.

sender_api_key_id
string<uuid> | null
required
sender_client_id
string | null
required

The OAuth client a session token was issued to, e.g. an MCP client.

source
enum<string> | null
required

How it was sent. Null for messages sent before 2026-10-22.

Available options:
api,
api_bulk,
web,
scheduled,
digest,
slash
reference
string | null
required

The caller's own handle for the message, if it gave one.

lifecycle
enum<string>
required

What has happened to the message in Slack since it was sent.

Available options:
live,
deleted,
expired
revision
integer
required

Increments with every change; a change names the revision it was made against.

edited_at
string | null
required
deleted_at
string | null
required
expired_at
string | null
required
change_state
enum<string>
required

needs_reconciliation: Slack's answer to a change was lost, and a person must say whether it went through before anything else can change.

Available options:
idle,
in_progress,
needs_reconciliation
pending_action
enum<string> | null
required
Available options:
edit,
rerender,
interaction_update,
delete,
expire
fallback_text
string | null
required

The notification text sent with the blocks.

text_editable
boolean
required

Whether the stored blocks are exactly what Slack holds, so the text can be corrected in place.

expiration
object | null
required

The message's expiry, if one was ever set.