Skip to content

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.

  1. Open the community settings and go to Integrations. Only people who manage the community see it.
  2. Click Create webhook.
  3. 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.
  4. Under Who to call when an alert fires, pick a role or leave it on “No one”. See Calling a role.
  5. 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 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.

Janela do terminal
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.