Sam Patel
USD 1,440.00 · quarterly
23 Oct 2026
Product · Software
Team workflows / BLOCK KIT JSON
Present a decision with the requester, cost, deadline, and explicit approve or decline actions.
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.
Approval needed · Design tool renewal Renew 8 design seats for the next quarter. The team uses these seats for product design and customer research. Requested by: Sam Patel Total cost: USD 1,440.00 · quarterly Decision needed: 23 Oct 2026 Budget: Product · Software Request REQ-284 · Finance approval required View request: https://example.com/requests/REQ-284
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": "Approval needed · Design tool renewal\nRenew 8 design seats for the next quarter. The team uses these seats for product design and customer research.\nRequested by: Sam Patel\nTotal cost: USD 1,440.00 · quarterly\nDecision needed: 23 Oct 2026\nBudget: Product · Software\nRequest REQ-284 · Finance approval required\nView request: https://example.com/requests/REQ-284",
"blocks": [
{
"type": "header",
"text": {
"type": "plain_text",
"text": "Approval needed · Design tool renewal"
}
},
{
"type": "section",
"fields": [
{
"type": "mrkdwn",
"text": "*Requested by*\nSam Patel"
},
{
"type": "mrkdwn",
"text": "*Total cost*\nUSD 1,440.00 · quarterly"
},
{
"type": "mrkdwn",
"text": "*Decision needed*\n23 Oct 2026"
},
{
"type": "mrkdwn",
"text": "*Budget*\nProduct · Software"
}
]
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "Renew 8 design seats for the next quarter. The team uses these seats for product design and customer research."
}
},
{
"type": "context",
"elements": [
{
"type": "mrkdwn",
"text": "Request REQ-284 · Finance approval required"
}
]
},
{
"type": "divider"
},
{
"type": "actions",
"elements": [
{
"type": "button",
"text": {
"type": "plain_text",
"text": "Approve"
},
"action_id": "approve_request",
"value": "REQ-284",
"style": "primary"
},
{
"type": "button",
"text": {
"type": "plain_text",
"text": "Decline"
},
"action_id": "decline_request",
"value": "REQ-284",
"style": "danger"
},
{
"type": "button",
"text": {
"type": "plain_text",
"text": "View request"
},
"action_id": "request",
"url": "https://example.com/requests/REQ-284"
}
]
}
]
}
SLACK_MESSAGE_JSONBring a bounded decision to an authorized approver with enough context to decide. The request details stay separate from the decision controls so the team can scan the business reason before acting.
Replace the sample request ID in each button value and map the action IDs to your application handlers. Include the scope of the approval and a link to supporting evidence. An approval should not grant broader access than the request describes.
Enable Interactivity in your Slack app and configure an HTTPS Request URL. Verify Slack request signatures, acknowledge block_actions within 3 seconds, authorize the approver, and process the request idempotently. Persist the decision in your own system and update the message after completion. JSON alone does not implement an approval workflow.
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 ↗