templates:read and messages:create. Use a test channel in your account; see availability for environment separation.
1
Configure your environment
2
Discover the input shape
user.name and user.role.3
Send to a test channel
Replace
C_TEST_CHANNEL with a channel ID. Generate one operation ID per intended send and preserve it for retries of that send.4
Verify the result
A successful response contains
success, channel, and message_ts. Save the message coordinates and response request ID. Check Slack for the resolved name and role, then test the handbook link.Destination choices
Supply exactly one destination per send:
For
POST /v1/templates/send-bulk, provide destinations with 1–100 such objects. Inspect every result, including when HTTP status is 200. Do not resend successful destinations as part of retrying a partial failure.
Compile without sending
CallPOST /v1/templates/compile with template_id and data, omitting the destination. Compilation spends credits and returns compiled_message; it does not post to Slack. To check newly authored blocks without spending message credits, use POST /v1/templates/validate instead.
Handle errors and retries
A missing scope returns 403, withcode: "insufficient_scope" and required_scopes. Invalid destination combinations return a validation error. Use the endpoint reference for exact response schemas.
For retries, keep the same idempotency key and identical body. A timeout or 5xx can leave an uncertain outcome; inspect logs before attempting a new operation. Never change keys simply to bypass an in-progress or uncertain result. Completed responses below 500 can expire after 24 hours, so replay protection is not permanent.
API conventions · Logs · Complete template example
