ForHosting KIT · Notifications & Flows

Send a message to Slack

Slack's own webhook setup is fine until you need retries, formatting blocks or a task you can track like everything else in your stack. This endpoint posts a formatted message to a channel and gives you a task_id to follow, the same way as any other job here.

● StablePer request + per message$0.002
Use it from WebAPIEmailApp soonTelegram soon

Run this on our servers with your account. Free tools run in your browser; this one bills your KIT balance per the price above.

For teams who live in Slack more than in their inbox

Plenty of operational signal — a deploy finishing, a new lead landing, an error threshold crossed — is more useful as a Slack message than an email, because someone's actually looking at the channel in real time. notify.slack exists so backend systems can post there directly, with the same reliability and accounting you'd expect from a paid API rather than a bare incoming-webhook URL glued into a cron script.

What the call actually sends

POST /notify/slack accepts a target channel or webhook reference, a text fallback, and optionally Slack's block-kit structure for rich formatting — headers, fields, buttons where your workspace allows them, and @mentions for the people who need to see it immediately. We handle the delivery and retry logic; you only need to shape the message once and the endpoint takes care of getting it there.

Blocks over plain text, and why it matters

Slack moved from plain-text-only messages to the block-kit format specifically because operational alerts and structured updates read better as sections than as a wall of text — a pattern now common enough that most monitoring and CI tools default to it. Supporting block-kit natively means a deploy notification can show environment, commit and status as distinct fields instead of one run-on sentence someone has to parse.

Where it plugs into automation

Since delivery is async, you fire the call from inside a pipeline step, a monitoring agent or a webhook handler and move on without waiting on Slack's response time. It pairs naturally with alert routing upstream — decide there whether an event deserves Slack, email, Discord, or all three, and let this endpoint handle the Slack leg specifically.

Confirmation without guesswork

You get back whether the post succeeded, including Slack's own message timestamp for cross-referencing, through a signed webhook or a signed link valid for 24 hours. If the channel is wrong, the token is expired, or the workspace rejects the message, that detail comes back clearly instead of a silent drop.

Deploy and CI status posts

A build pipeline posts pass/fail status with commit and environment fields to the team's #deploys channel the moment a run finishes.

Sales lead alerts

A new high-value form submission triggers a formatted Slack message to the sales channel with the lead's details and a direct link to follow up.

Incident escalation

A monitoring check that crosses a threshold posts to an on-call channel with an @mention so the right engineer sees it immediately.

Customer activity feed

Key account events like a plan upgrade or a support escalation post to an internal Slack channel so account managers stay current without a dashboard.

How do I post to a specific Slack channel with this API?

You specify the channel or webhook reference in the request body of POST /notify/slack, and the message is delivered there using the formatting you provide.

Does the Slack notification API support Slack's block-kit formatting?

Yes, you can send block-kit structures for rich layouts with fields and headers, alongside a plain-text fallback for notifications and unsupported clients.

Is notify.slack free?

There's no free tier — free tiers get abused and slow everyone down. Access runs on a prepaid ForHosting KIT balance: top up from $10.00 (it never expires) and each request is charged at its published price, so a call with no balance returns HTTP 402. No subscription, no tokens, no invented credits, and a failed task is never charged.

What's the price per Slack message sent?

It's $0.002 per POST /notify/slack request, and a failed post — after three automatic retries — is never charged.

Can I mention specific people or roles in the message?

Yes, standard Slack mention syntax works inside the message content, so you can @mention a person, a group or use here/channel where your workspace policy allows it.

What happens if Slack rejects the message?

You get a clear error back with Slack's response detail — an invalid channel or expired token, for example — instead of the message silently failing to appear.

Can I send the same alert to Slack and other channels at once?

Yes, call notify.slack alongside notify.discord or notify.webhook for the same event; each is tracked independently by its own task_id.

Is message content stored after delivery?

No, message payloads are deleted after the stated retention window and are never used for training.

Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.

POSThttps://api.kit.forhosting.com/notify/slack

Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, and soon from our app, email and Telegram.

curl -X POST https://api.kit.forhosting.com/notify/slack \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"input":"…"}'
{
  "input": "…"
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "notify.slack",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.

Per request$0.002

Published price — no tokens, no invented credits. A failed task is never charged.

HTTPCodeMeaning
401unauthorizedMissing or invalid API key.
402insufficient_balanceYour balance doesn't cover the task price.
404unknown_typeThat task type doesn't exist.
429rate_limitedToo many requests. Use the webhook instead of polling.

Read the full KIT documentation →