Create in the app and the URL
A webhook posts to one text channel in a community. Someone who manages the community creates it in the app, and the outside tool uses the link it gets.
Create it in the app
Section titled “Create it in the app”- Open the community settings and go to Integrations. Only people who manage the community see it.
- Click Create webhook.
- Pick a name (the default is “Webhook”), an icon and the text channel it posts to. The channel can be read-only: an “#alerts” channel where only the webhook writes is the most common setup.
- Under Who to call when an alert fires, pick a role or leave it on “No one”. See Calling a role.
- Save, then copy the link with Copy link.
Each community can have up to 10 webhooks (deleted ones don’t count). The webhook’s detail view also has Send a test, Pause and Resume, Delete webhook, and Latest deliveries with the body that arrived. Messages from a deleted webhook stay in the channel.
The URL
Section titled “The URL”The link looks like this:
https://ggspeak.app/hooks/{id}/{token}The {token} is the secret: anyone with the link can post to the channel. Treat it like a password. Keep it in your CI secrets or the tool’s vault, never in a public repository. The same path also answers on https://api.ggspeak.app.
The routes live outside /v1 and need no session or version header. There is no Authorization header: the token in the URL is the authentication.
| Method and route | What it does |
|---|---|
POST /hooks/{id}/{token} |
Posts. The format is detected from the body. |
POST /hooks/{id}/{token}/discord |
Posts, reading the body as Discord. |
POST /hooks/{id}/{token}/slack |
Posts, reading the body as Slack. |
POST /hooks/{id}/{token}/betterstack |
Posts, reading the body as a Better Stack incident. |
GET /hooks/{id}/{token} |
Returns the name, icon, community and channel. Some tools check a link this way. |
PATCH /hooks/{id}/{token}/messages/{message_id} |
Edits a message sent by this webhook. |
DELETE /hooks/{id}/{token}/messages/{message_id} |
Deletes a message sent by this webhook. |
The last three are covered in Messages. The body is always JSON, up to 16 KB.
Your first POST
Section titled “Your first POST”curl -X POST "$GGSPEAK_WEBHOOK" \ -H "Content-Type: application/json" \ -d '{"text": "Hello, GGspeak."}'Without ?wait=true the response is 204 No Content, like Discord, and the message shows up in the channel. To get the message back, with its id, see Get the message back with wait.
A body with only text is read as Slack: *x* becomes bold and <url|label> becomes a link. The other formats are in Formats.