Check environment and feature availability before following this guide.
https://next.api.lithoblocks.com. Its typed template fields are verified on staging.
The production app release remains a separate cutover step; this guide does not announce a public marketplace release.
Connect and choose a module
- Create a staging API key in API Keys with
templates:readandmessages:create. Addusage:readto inspect credits. - Add LithoBlocks (Staging) to your Make scenario and create a connection with that key.
The connection validates it through
GET /v1/auth/validate. - Add Compile Template, Send Template, or Send Template (Bulk) and choose a template. The active version determines which fields appear. A linked Dev Slack workspace is required for sends.
/v1/... path and the required scopes.
Map template data
Choosing a template loads Template data with one field per input. Nested objects appear as collections; lists have Add item and fields for each item. Map values from earlier modules or enter literals. Changing the selected template reloads the fields. Sample values shown as hints are examples, not defaults that will be sent automatically. Compile first and inspectcompiled_message before sending. Compile consumes one staging credit;
its output is a JSON string containing Slack blocks. Send posts through LithoBlocks and returns
success, message_ts, and channel.
Blank values
Verified in Make’s staging editor on 2026-09-07:
Missing scalar placeholders remain visible in the compiled text, for example
{{note}}.
An empty item can likewise leave unresolved item placeholders. Fill fields you intend to display;
an empty form field is not an instruction to substitute an empty string.
This matches Make’s processing of empty values.
The observed input behavior does not justify changing explicit JSON null into an omitted value.
Advanced raw JSON
Show advanced settings → Data (raw JSON) accepts the entiredata object. When provided, it
replaces the typed collection; the two inputs are not merged. Existing scenarios using data
retain this path. Leave raw JSON unset to use the typed fields. Template data excludes the outer
template_id and destination properties.
The raw-JSON staging test preserved explicit null (rendered as the text “null”) and [] (no loop blocks). The typed editor still validates required fields before making a request. For a workflow that must
control an empty list or explicit nulls without those form constraints, use Make an API Call and
send the complete API body. Always compile and inspect the result before enabling delivery.
Send destinations and partial failures
Send Template takes a destination field and value: a channel ID, recipient email, or Slack user ID. Send Template (Bulk) takes 1–100 destination items. Set exactly one destination field per item:results, total_sent
and total_failed, then route failed items separately. Re-running the whole bulk operation can send
again to recipients who already received it. Keep search/list modules on separate scenario routes
from sends: one bundle per search result can multiply downstream sends.
Errors and retry decisions
Errors include a machinecode and a request_id for support; scope failures identify required
scopes. Fix invalid data, credentials, scopes or credits before another attempt.
Compile Template, Send Template and Send Template Bulk each have an optional Idempotency key
under advanced settings. Map a stable source-event identifier, such as order-123-shipped, for one
intended operation. Leaving the field blank omits the header and preserves existing behavior: every
run can spend another credit or send another message. Existing scenarios do not need to change.
Reuse the same key and exact serialized JSON body when reconciling a retry. Keys are scoped to the
organization and endpoint; /v1 and unversioned forms of that same endpoint share the scope. A
completed non-5xx result is replayable for 24 hours. The same key with a different body returns 409;
an unfinished operation also returns 409. Incomplete and 5xx outcomes are retained for reconciliation
and do not expire automatically. A timeout or Make RuntimeError does not establish whether a write
happened. Inspect usage and delivery records, using the request_id, before retrying.
Use a new key for an intentional second message, even when its content is identical. Do not use a
constant key for every event, generate a fresh key on retries, put sensitive data in keys, or rotate a
key to bypass an uncertain result. The field accepts 1–255 printable ASCII characters without spaces.
Make an API Call and Make’s HTTP module can still supply Idempotency-Key directly.
A keyed bulk replay returns the original whole result, including failed destinations, without sending
again. Inspect results and total_failed. After reconciliation, a deliberate retry of only confirmed
failed destinations is a new operation with a new key; resending the whole list can duplicate successes.
See API idempotency.
HTTP and webhook workflows
Make’s HTTP module can callhttps://next.api.lithoblocks.com/v1/... directly with
Authorization: Bearer YOUR_STAGING_API_KEY and Content-Type: application/json. Keep the key in
connection storage. A send body contains template_id, data, and one destination.
For incoming interactions, create a Make Webhooks → Custom webhook, configure a
LithoBlocks destination, and map the configured payload in Make.
Signed destination delivery requires a receiver that verifies the signature; do not assume an
ordinary Make webhook performs that verification. Use a verifying receiver for signed workflows.
See template placeholders, API reference,
and connecting Slack for the underlying contracts.
