Skip to content

Core · every plan

If it can post JSON, it can post here

Enclessa incoming webhooks give a channel an endpoint that any system able to send JSON can post into: monitoring, CI, a deployment script, a form on your own site. Creating one provisions a bot account and adds it to the room, so the post has a real author and the channel’s own permission model decides whether it is allowed. The payload is Slack-shaped, so most tools that already speak to Slack need a URL change and nothing else.

Open betaThe platform is being built in the open, so parts of it are not there yet, behaviour changes between releases, and no availability figure is committed while it is in beta. What is still being built.

At a glance

Created by
Anyone who may manage the channel
Credential
A bearer secret, shown once, sent in a header
Payload
Slack-shaped: text, username, icon, attachments
Author
A bot account provisioned with the hook
Room type
Managed rooms only
Size cap
8 KiB, truncated rather than rejected

How do I create an incoming webhook?

From the channel, if you may manage that channel. Creating one returns a URL and a secret, and the secret is shown exactly once. The credential travels in an Authorization header rather than in the URL, because a URL with a credential in it lands in every proxy access log between the caller and here.

  • Requires the manage-channel permission on that channel, and nothing wider
  • The secret is displayed once and stored only as a hash
  • Sent as a bearer token in a header, never as a query string
  • An unknown hook, a revoked hook and a wrong secret all answer the same 404
  • Revoking a hook deactivates the bot behind it

What can the payload contain?

Message text, a display name that overrides the bot’s own, an icon, and attachments with a title, a link, body text, fields and a footer. Attachments are flattened to plain text on the way in — a title on one line, its URL on the next for the linkifier to pick up, fields as name and value — because the message renderer shows what it is given rather than interpreting markup it did not write.

  • text, username, icon and attachments, in the shape Slack established
  • One hook can speak for several systems by setting a different username per post
  • The room shows a webhook badge beside the name, so nobody mistakes it for a person
  • Attachments flatten to readable plain text rather than arriving as raw markup
  • A post over 8 KiB is truncated, because an alert at three in the morning must not be lost to a 422

Why does a webhook need a bot account?

Because the alternative is a second, weaker idea of who wrote a message. A hook’s posts are authored by a real account that is a real member of the room, which means the ordinary permission model decides whether the post is allowed, the ordinary audit trail records it, and removing the bot from the room does exactly what removing anybody from a room does.

  • The author is an account, not a special case in the message table
  • The channel’s permissions govern the hook, with nothing bolted on beside them
  • Bot accounts are not counted as billable seats
  • Deactivating the bot stops the hook at the next call

What are the rate limits?

Rate limits are applied per organisation across classes of request rather than per endpoint, and they scale with the number of seats. Every rejection carries the headers a well-behaved client needs to back off correctly, so a system that respects them will not need supervision.

  • Per-organisation budgets, scaled by seats, with a per-member ceiling
  • A 429 carries RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset and Retry-After
  • An empty payload is refused with 422 rather than posting an empty message

What this does not do

  • Managed rooms only. An end-to-end encrypted room has no server-side key, so the server cannot compose a message in it — that is the point of the room, not a gap.
  • Incoming only. There are no outgoing webhooks: nothing pushes Enclessa events to an endpoint of yours.
  • A webhook posts. It cannot read history, list members, react or open a thread — use a bot account with a scoped token for that.
  • Attachments render as plain text. There are no interactive buttons, menus or forms in a message.
  • The secret is a bearer token, not an HMAC signature over the body. Treat the URL and the secret together as a credential.

Related

Questions

Incoming webhooks: common questions

Does Enclessa support incoming webhooks?

Yes. Anyone who may manage a channel can create an incoming webhook for it, which returns a URL and a bearer secret that any system able to post JSON can use. The payload format follows Slack’s shape, so most existing integrations need only a URL change.

Can I point a Slack webhook at Enclessa?

In most cases yes. Enclessa accepts the Slack-shaped payload — text, username, icon and attachments — so a tool that already posts to Slack usually needs a new URL and a header carrying the secret. Interactive components are not supported, because Enclessa messages have no buttons or menus.

Can a webhook post into an encrypted channel?

No. End-to-end encrypted rooms hold no server-side key, so the server cannot compose a message in one. Webhooks work in managed rooms, where the server can read and write message content.

What happens if a webhook payload is too large?

It is truncated to 8 KiB and posted rather than rejected. A monitoring system that receives a 422 in the middle of the night has lost the alert, which is a worse outcome than a shortened message.

Are there outgoing webhooks in Enclessa?

No. Webhooks are incoming only — systems post into Enclessa. Nothing pushes Enclessa events out to an endpoint you run, and custom slash commands are the only outbound HTTP call the platform makes.

Encrypted collaboration, hosted in Europe.

Create a workspace in a couple of minutes. It is yours at your-team.enclessa.app, hosted in the European Union, with encrypted direct messages from the first one you send.

Open beta. Free plan, no payment card to start.