Expected status 201, received 503Engineering / BLOCK KIT JSON
Surface failed checks with the branch, commit, failing job, and a direct link to the build.
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.
Build failed · checks need attention Integration tests failed in the checkout suite. Expected status 201, received 503 Repository: northstar/commerce Branch: feat/express-checkout Commit: a4e91c2 · Maya Chen Checks: 182 passed · 1 failed Run #842 · 4m 08s · Node 22 Inspect build: https://example.com/builds/842
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": "Build failed · checks need attention\nIntegration tests failed in the checkout suite.\nExpected status 201, received 503\nRepository: northstar/commerce\nBranch: feat/express-checkout\nCommit: a4e91c2 · Maya Chen\nChecks: 182 passed · 1 failed\nRun #842 · 4m 08s · Node 22\nInspect build: https://example.com/builds/842",
"blocks": [
{
"type": "header",
"text": {
"type": "plain_text",
"text": "Build failed · checks need attention"
}
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "*Integration tests* failed in the checkout suite.\n`Expected status 201, received 503`"
}
},
{
"type": "section",
"fields": [
{
"type": "mrkdwn",
"text": "*Repository*\nnorthstar/commerce"
},
{
"type": "mrkdwn",
"text": "*Branch*\nfeat/express-checkout"
},
{
"type": "mrkdwn",
"text": "*Commit*\na4e91c2 · Maya Chen"
},
{
"type": "mrkdwn",
"text": "*Checks*\n182 passed · 1 failed"
}
]
},
{
"type": "context",
"elements": [
{
"type": "mrkdwn",
"text": "Run #842 · 4m 08s · Node 22"
}
]
},
{
"type": "divider"
},
{
"type": "actions",
"elements": [
{
"type": "button",
"text": {
"type": "plain_text",
"text": "Inspect build"
},
"action_id": "build",
"url": "https://example.com/builds/842",
"style": "primary"
}
]
}
]
}
SLACK_MESSAGE_JSONSend this Block Kit message when a CI pipeline completes. A short failure summary and a specific job name help the author identify the next step, while a passing variant keeps successful builds compact.
Map repository, branch, and commit from your CI event. Put the first actionable failure in the summary, not the full build log. Point the button at the exact run so teammates do not have to search for it.
Included variants: failed, passed. Switch variants in the editor; all versions stay on this page.
Trigger the webhook from your CI completion step, including failed jobs. Opening the build does not rerun it; retries remain in your CI provider.
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 ↗