Engineering / BLOCK KIT JSON
Keep deployments readable with service, version, environment, and links to the evidence. Includes success, failure, and rollback variants.
Blank optional fields are omitted. Fallback text updates with your fields.
Approximate Slack rendering. Buttons are visual previews; no actions are sent.
Local validation checks the supported schema. It does not guarantee Slack API acceptance.
Manual editing and validation run in your browser. Opening Slack’s Builder shares the message with Slack.
✓ Deployment successful The new checkout is live. Health checks passed across all production instances. Service: checkout-api Version: v2.8.1 · a4e91c2 Environment: Production Deployed by: Maya Chen Completed in 2m 14s · 20 Oct 2026, 14:32 UTC View deployment: https://example.com/deployments/1842 Rollback runbook: https://example.com/runbooks/checkout-rollback
Download the payload or use this command in your own terminal. Replace the placeholder URL with your Slack incoming webhook. Keep the real URL secret. This tool never sends a Slack message.
curl --request POST \
--header 'Content-Type: application/json' \
--data-binary @- \
'https://hooks.slack.com/services/YOUR/WEBHOOK/URL' <<'SLACK_MESSAGE_JSON'
{
"text": "✓ Deployment successful\nThe new checkout is live. Health checks passed across all production instances.\nService: checkout-api\nVersion: v2.8.1 · a4e91c2\nEnvironment: Production\nDeployed by: Maya Chen\nCompleted in 2m 14s · 20 Oct 2026, 14:32 UTC\nView deployment: https://example.com/deployments/1842\nRollback runbook: https://example.com/runbooks/checkout-rollback",
"blocks": [
{
"type": "header",
"text": {
"type": "plain_text",
"text": "✓ Deployment successful"
}
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "The new checkout is live. Health checks passed across all production instances."
}
},
{
"type": "section",
"fields": [
{
"type": "mrkdwn",
"text": "*Service*\ncheckout-api"
},
{
"type": "mrkdwn",
"text": "*Version*\nv2.8.1 · a4e91c2"
},
{
"type": "mrkdwn",
"text": "*Environment*\nProduction"
},
{
"type": "mrkdwn",
"text": "*Deployed by*\nMaya Chen"
}
]
},
{
"type": "context",
"elements": [
{
"type": "mrkdwn",
"text": "Completed in 2m 14s · 20 Oct 2026, 14:32 UTC"
}
]
},
{
"type": "divider"
},
{
"type": "actions",
"elements": [
{
"type": "button",
"text": {
"type": "plain_text",
"text": "View deployment"
},
"action_id": "logs",
"url": "https://example.com/deployments/1842",
"style": "primary"
},
{
"type": "button",
"text": {
"type": "plain_text",
"text": "Rollback runbook"
},
"action_id": "runbook",
"url": "https://example.com/runbooks/checkout-rollback"
}
]
}
]
}
SLACK_MESSAGE_JSONPost when a deployment finishes so the team can see exactly what reached production. The outcome leads the message; release details and a direct logs link give engineers enough context to act without opening the CI system first.
Replace the service and version with values from your deploy job. Use the failed variant when health checks fail, and the rolled-back variant only after the previous version has been restored. Keep the commit short and link to the full deployment record.
Included variants: successful, failed, rolled back. Switch variants in the editor; all versions stay on this page.
Send from your deployment job after its final health check. These buttons open links; they do not deploy or roll back software. Keep rollback execution behind your own authenticated tooling.
To post this JSON, create a Slack app with an incoming webhook for your channel, or use chat.postMessage with the appropriate bot token and permissions. Keep credentials on your server.
For buttons, enable Interactivity and handle Slack’s interaction requests, including URL buttons. Acknowledge requests promptly. This preview does not execute actions, authorize users, or save decisions.
Use the top-level fallback text for notifications and accessibility. Test your final payload in Slack; local validation covers the declared subset, and visual details vary by client.
Slack interaction setup ↗