Skip to content
Fluxer API

Webhooks

A webhook posts messages into one guild channel under its own name and avatar. You manage webhooks with a user or bot token. To execute one, put the webhook ID and token in the path and send no Authorization header.

Management routes need MANAGE_WEBHOOKS at guild level, and VIEW_CHANNEL and MANAGE_WEBHOOKS in the webhook's channel. In a guild with an elevated MFA level, a caller without multi-factor authentication gets 400 TWO_FACTOR_REQUIRED, because MANAGE_WEBHOOKS is an elevated permission.

A user session that doesn't declare the channel_threads client capability can't see webhooks of forum or media channels and gets 404 for them.

Execute webhook, the GitHub, Slack, Instatus and Libredesk callbacks, Get webhook message, Edit webhook message and Delete webhook message return 403 INVALID_API_ORIGIN when the Origin header is one of the instance's own web app origins. See cross-origin requests.

A webhook belongs to one guild channel. Its token never changes, and anyone with the ID and token can execute, edit or delete the webhook.

FieldTypeDescription
idsnowflakeThe ID of the webhook
guild_idsnowflakeThe ID of the guild the webhook is in
channel_idsnowflakeThe ID of the channel the webhook posts to
namestringThe name the webhook posts under (1-80 characters)
avatar?stringThe avatar hash the webhook posts under
typeintegerThe webhook type
token?1stringThe secret token that executes the webhook (64 characters)
userpartial user objectThe account that created the webhook
source_guild?2webhook source guild objectThe guild of the followed announcement channel
source_channel?2webhook source channel objectThe followed announcement channel

1 Absent on a channel follower webhook

2 Only on a channel follower webhook, while its creator can view the announcement channel

{
"id": "1501314428688998182",
"guild_id": "1501314428688990000",
"channel_id": "1501314428688991111",
"name": "Build bot",
"avatar": "a1b2c3d4e5f60718293a4b5c6d7e8f90",
"type": 1,
"token": "Xk3Qw9ZpL2vB7nR4tY6uI8oP0aS1dF5gH2jK4lZ9xC7vB1nM3qW5eR8tY0uI2oP4",
"user": {
"id": "1501314428688990001",
"username": "ada",
"discriminator": "0001",
"global_name": null,
"avatar": null,
"avatar_color": null,
"flags": 0
}
}
ValueNameDescription
1INCOMINGPosts the messages its token holder sends
2CHANNEL_FOLLOWERPosts copies of messages published in a followed announcement channel

Follow announcement channel creates a channel follower webhook. You can get, update and delete it like an incoming webhook, but every token route returns 404 UNKNOWN_WEBHOOK for it. Copies stop arriving while its creator can't view the announcement channel.

The guild that owns the announcement channel a channel follower webhook follows.

FieldTypeDescription
idsnowflakeThe ID of the guild
namestringThe name of the guild
icon??stringThe icon hash of the guild

The announcement channel a channel follower webhook follows.

FieldTypeDescription
idsnowflakeThe ID of the announcement channel
namestringThe name of the announcement channel

Token routes return this shorter form of the webhook object.

FieldTypeDescription
idsnowflakeThe ID of the webhook
guild_idsnowflakeThe ID of the guild the webhook is in
channel_idsnowflakeThe ID of the channel the webhook posts to
namestringThe name the webhook posts under (1-80 characters)
avatar?stringThe avatar hash the webhook posts under
typeintegerThe webhook type, always 1
tokenstringThe secret token that executes the webhook

Execute webhook takes this body. A body with nothing to post returns 400 CANNOT_SEND_EMPTY_MESSAGE. A webhook name, message content or embed text that matches the instance blocklists returns 403 CONTENT_BLOCKED.

FieldTypeDescription
content?1?stringThe message content
embeds?array[rich embed object]Up to max_embeds_per_message embeds (default 10)
attachments?array[pre-uploaded attachment object]Attachment metadata
message_reference?2?message reference input objectA reply or forward reference
allowed_mentions?3?allowed mentions objectWhich mentions notify
flags?integerMessage flags
favorite_meme_id??snowflakeAccepted, but webhook messages never attach a favorite meme
sticker_ids??array[snowflake]Up to 3 sticker IDs
tts?booleanAccepted, but webhook messages are never text-to-speech
nonce?4string | integerA client-generated message identifier (1-32 characters)
username??stringA name for this message only (1-80 characters)
avatar_url??stringAn http or https avatar URL for this message only, skipped when it can't be fetched
thread_name?5stringThe name of a new forum post (1-100 characters)
applied_tags?5array[snowflake]The IDs of the tags for a new forum post (max 5)

1 Up to the guild's max_message_length or 4,000 characters, whichever is larger

2 The referenced message must be in the webhook's channel, or in the thread from thread_id

3 When omitted, no mention notifies anyone

4 Repeating a nonce within five minutes returns the first message and creates no new one

5 Only for a webhook in a forum or media channel. See Webhooks in forums

Edit webhook message takes this body. Each field you send replaces the stored value, and a body with no content, embeds or flags returns 400 CANNOT_SEND_EMPTY_MESSAGE.

FieldTypeDescription
content??stringThe new message content
embeds?array[rich embed object]The new embeds, where an empty array removes them all
flags?integerThe new message flags
allowed_mentions??allowed mentions objectIgnored, and the original mentions stay
GET/v1/guilds/{guild_id}/webhooksBot

Returns the webhooks in a guild, limited to channels where you have VIEW_CHANNEL and MANAGE_WEBHOOKS.

StatusBodyCondition
200array[webhook object]The webhooks were returned

The rate limit is 40 requests per 10 seconds, on the webhook:list::guild_id bucket.

GET/v1/channels/{channel_id}/webhooksBot

Returns the webhooks in a channel.

StatusBodyCondition
200array[webhook object]The webhooks were returned

The rate limit is 40 requests per 10 seconds, on the webhook:list::channel_id bucket.

POST/v1/channels/{channel_id}/webhooksBotAudit reason

Creates an incoming webhook in a guild text, voice, announcement, forum or media channel and returns it with its token. A guild can have max_webhooks_per_guild webhooks (default 1,000) and a channel max_webhooks_per_channel (default 15).

FieldTypeDescription
namestringThe webhook name (1-80 characters)
avatar??base64 stringA base64 or data URI avatar image, up to avatar_max_size (default 10 MiB)
StatusBodyCondition
200webhook objectThe webhook was created
400error responseMAX_WEBHOOKS_PER_GUILD or MAX_WEBHOOKS_PER_CHANNEL when the limit is hit

Fluxer sends Webhooks Update and records a WEBHOOK_CREATE audit log entry.

The rate limit is 10 requests per minute, on the webhook:create::channel_id bucket.

GET/v1/webhooks/{webhook_id}Bot

Returns a webhook object.

StatusBodyCondition
200webhook objectThe webhook was returned

The rate limit is 100 requests per 10 seconds, on the webhook:read::webhook_id bucket.

PATCH/v1/webhooks/{webhook_id}BotAudit reason

Updates a webhook and returns the webhook object. To move it, you need MANAGE_WEBHOOKS in the new channel too, and the new channel must be in the same guild.

FieldTypeDescription
name?stringThe new name (1-80 characters)
avatar?1?base64 stringThe new avatar image, or null to remove it
channel_id?2snowflakeThe channel to move the webhook to

1 Uses the same rules as Create webhook. A channel follower webhook returns 400 INVALID_FORM_BODY for any avatar

2 A channel follower webhook can only move to a guild text channel that doesn't already follow the same announcement channel

StatusBodyCondition
200webhook objectThe webhook was updated
400error responseMAX_WEBHOOKS_PER_CHANNEL when the new channel is full
400error responseINVALID_FOLLOW_TARGET_CHANNEL or CHANNEL_ALREADY_FOLLOWED for a channel follower webhook
400error responseFOLLOW_TARGET_NOT_AGE_RESTRICTED or FOLLOW_TARGET_CONTENT_WARNING_REQUIRED for a channel follower webhook
404error responseUNKNOWN_CHANNEL when the new channel is missing or in another guild

Fluxer sends Webhooks Update for the old channel and, after a move, the new one. It records a WEBHOOK_UPDATE audit log entry.

The rate limit is 20 requests per 10 seconds, on the webhook:update::webhook_id bucket.

DELETE/v1/webhooks/{webhook_id}BotAudit reason

Deletes a webhook for good. Messages it already posted stay in the channel, and deleting a channel follower webhook unfollows the announcement channel.

StatusBodyCondition
204emptyThe webhook was deleted

Fluxer sends Webhooks Update and records a WEBHOOK_DELETE audit log entry.

The rate limit is 20 requests per 10 seconds, on the webhook:delete::webhook_id bucket.

GET/v1/webhooks/{webhook_id}/{token}

Returns a token webhook object.

StatusBodyCondition
200token webhook objectThe webhook was returned
404error responseUNKNOWN_WEBHOOK when the ID and token don't match

The rate limit is 100 requests per 10 seconds, on the webhook:read::webhook_id bucket.

PATCH/v1/webhooks/{webhook_id}/{token}

Updates a webhook and returns the token webhook object. It can't move the webhook, and sending channel_id returns 400 INVALID_FORM_BODY.

FieldTypeDescription
name?stringThe new name (1-80 characters)
avatar??base64 stringThe new avatar image, or null to remove it
StatusBodyCondition
200token webhook objectThe webhook was updated

Fluxer sends Webhooks Update and records no audit log entry.

The rate limit is 20 requests per 10 seconds, on the webhook:update::webhook_id bucket.

DELETE/v1/webhooks/{webhook_id}/{token}

Deletes a webhook for good, without an audit log entry.

StatusBodyCondition
204emptyThe webhook was deleted

Fluxer sends Webhooks Update.

The rate limit is 20 requests per 10 seconds, on the webhook:delete::webhook_id bucket.

POST/v1/webhooks/{webhook_id}/{token}

Posts a message as the webhook. Send JSON, or multipart/form-data to upload files.

FieldTypeDescription
wait?booleanWhether to return the created message (default false)
thread_id?snowflakeThe ID of a thread in the webhook's channel to post in

The body is a webhook message body.

FieldTypeDescription
payload_json?stringA JSON webhook message body
files[n]?1binaryA file, where n is its index
content?2stringThe message content
nonce?2stringA client-generated message identifier
tts?2stringThe text-to-speech flag
flags?2stringThe message flags

1 n runs from 0 to the max_attachments_per_message limit minus one

2 Overrides the same field in payload_json

StatusBodyCondition
200message objectThe message was created and wait is true
204emptyThe message was created and wait is false
400error responseCANNOT_SEND_EMPTY_MESSAGE when there is nothing to post
400error responseWEBHOOK_FORUM_TARGET_REQUIRED when a forum or media webhook sends no thread_id or thread_name
400error responseWEBHOOK_FORUM_TARGET_CONFLICT when a forum or media webhook sends both
400error responseWEBHOOK_THREAD_NAME_REQUIRES_FORUM when thread_name or applied_tags targets another channel type
400error responseFORUM_TAG_REQUIRED or NO_TAGS_AVAILABLE_TO_NON_MODERATORS when the forum needs a tag
400error responseTHREAD_LOCKED or MAX_ACTIVE_THREADS for the target thread
404error responseUNKNOWN_CHANNEL when thread_id is not a thread in the webhook's channel
404error responseUNKNOWN_FORUM_TAG when applied_tags has a tag the forum doesn't have

Fluxer sends Message Create.

The rate limit is 60 requests per minute, on the webhook:execute::webhook_id bucket.

GET/v1/webhooks/{webhook_id}/{token}/messages/{message_id}

Returns a message the webhook posted in its current channel.

FieldTypeDescription
thread_id?snowflakeThe ID of the thread the message is in
StatusBodyCondition
200message objectThe message was returned
403error responseMISSING_PERMISSIONS when another author posted the message
404error responseUNKNOWN_MESSAGE when the message isn't in the webhook's channel or the thread_id thread

The rate limit is 60 requests per minute, on the webhook:message_get::webhook_id bucket.

PATCH/v1/webhooks/{webhook_id}/{token}/messages/{message_id}

Edits a message the webhook posted and returns the message. You can edit default messages and replies, but not forwards.

FieldTypeDescription
thread_id?snowflakeThe ID of the thread the message is in

The body is a webhook message edit body.

StatusBodyCondition
200message objectThe message was edited
400error responseCANNOT_MODIFY_SYSTEM_WEBHOOK when the message type can't be edited
400error responseTHREAD_ARCHIVED or THREAD_LOCKED for the thread
403error responseMISSING_PERMISSIONS when another author posted the message
404error responseUNKNOWN_MESSAGE when the message isn't in the webhook's channel or the thread_id thread

Fluxer sends Message Update.

The rate limit is 30 requests per minute, on the webhook:message_edit::webhook_id bucket.

DELETE/v1/webhooks/{webhook_id}/{token}/messages/{message_id}

Deletes a message the webhook posted.

FieldTypeDescription
thread_id?snowflakeThe ID of the thread the message is in
StatusBodyCondition
204emptyThe message was deleted
403error responseMISSING_PERMISSIONS when another author posted the message
404error responseUNKNOWN_MESSAGE when the message isn't in the webhook's channel or the thread_id thread

Fluxer sends Message Delete.

The rate limit is 30 requests per minute, on the webhook:message_delete::webhook_id bucket.

Execute Slack webhook takes a Slack incoming webhook body and turns each attachment into an embed.

FieldTypeDescription
text?stringThe message content
username?stringA name for this message only (1-80 characters)
icon_url?stringAn avatar URL for this message only
attachments?array[Slack attachment object]Attachments to turn into embeds
FieldTypeDescription
fallback?stringThe embed description when pretext and text are absent
pretext?stringThe first line of the embed description
text?stringThe rest of the embed description
color?stringThe embed color as six hex digits, with or without #
title?stringThe embed title
title_link?stringThe embed URL
fields?array[Slack attachment field object]The embed fields
footer?stringThe embed footer
ts?integerThe embed timestamp in Unix seconds
author_name?stringThe embed author name
author_link?stringThe embed author URL, used with author_name
author_icon?stringThe embed author icon URL, used with author_name
image_url?stringThe embed image URL
thumb_url?stringThe embed thumbnail URL

Fluxer drops a URL that isn't an absolute http or https URL of at most 2,048 characters.

FieldTypeDescription
title?stringThe embed field name
value?stringThe embed field value
short?booleanWhether the embed field is inline (default false)

A field without both a title and a value is dropped.

Execute GitHub webhook takes the body GitHub sends. Fields outside these tables are ignored.

FieldTypeDescription
action??stringThe event action
answer??GitHub comment objectThe accepted discussion answer
check_run??GitHub check run objectThe check run
check_suite??GitHub check suite objectThe check suite
comment??GitHub comment objectThe issue, review, commit or discussion comment
commits??array[GitHub commit object]The pushed commits
compare??stringThe comparison URL of a push
discussion??GitHub discussion objectThe discussion
forced??booleanWhether the push was forced
forkee??GitHub service objectThe new fork
head_commit??GitHub commit objectThe head commit of a push
issue??GitHub issue objectThe issue
member??GitHub user objectThe added collaborator
pull_request??GitHub issue objectThe pull request
ref_type??stringbranch or tag
ref??stringThe Git reference
release??GitHub release objectThe release
repository??GitHub service objectThe repository, needed for every event
review??GitHub review objectThe pull request review
senderGitHub user objectThe user who triggered the event

A field with the wrong type returns 400 INVALID_FORM_BODY.

FieldTypeDescription
idintegerThe GitHub user ID
loginstringThe GitHub login, shown as the embed author
html_urlstringThe profile URL
avatar_urlstringThe avatar URL
FieldTypeDescription
idintegerThe GitHub repository ID
html_urlstringThe repository URL
namestringThe repository name
full_namestringThe repository name with its owner
FieldTypeDescription
username??stringThe GitHub username
namestringThe author name shown beside each commit
FieldTypeDescription
idstringThe commit SHA
urlstringThe commit URL
messagestringThe commit message
authorGitHub author objectThe commit author
FieldTypeDescription
idstring | integerThe comment ID
html_urlstringThe comment URL
userGitHub user objectThe comment author
commit_id??stringThe commit SHA, needed for commit_comment
bodystringThe comment body
FieldTypeDescription
titlestringThe discussion title
numberintegerThe discussion number
html_urlstringThe discussion URL
answer_html_url??stringThe accepted answer URL
body??stringThe discussion body
userGitHub user objectThe discussion author
FieldTypeDescription
idstring | integerThe issue or pull request ID
numberintegerThe issue or pull request number
html_urlstringThe issue or pull request URL
userGitHub user objectThe issue or pull request author
titlestringThe issue or pull request title
body??stringThe body, shown only for the opened action
FieldTypeDescription
idintegerThe release ID
tag_namestringThe Git tag name
html_urlstringThe release URL
body??stringThe release notes
FieldTypeDescription
userGitHub user objectThe review author
body??stringThe review body
html_urlstringThe review URL
statestringThe review state
FieldTypeDescription
numberintegerThe pull request number
FieldTypeDescription
namestringThe check application name
FieldTypeDescription
conclusion??stringThe conclusion, where skipped posts nothing and success shows green
head_branch??stringThe head branch
head_shastringThe head commit SHA
pull_requests??array[GitHub check pull request object]The pull requests
appGitHub check application objectThe check application
FieldTypeDescription
title??stringThe output title
summary??stringThe output summary
FieldTypeDescription
conclusion??stringThe conclusion, where success shows green
namestringThe check run name
html_urlstringThe check run URL
check_suiteGitHub check suite objectThe parent check suite
details_url??stringThe details URL
output??GitHub check run output objectThe check output
pull_requests??array[GitHub check pull request object]The pull requests

The X-GitHub-Event header picks the event. Fluxer posts a message only for these events and actions, and accepts any other callback without posting.

ValueDescription
check_runA finished check run, action completed
check_suiteA finished check suite, action completed
commit_commentA comment on a commit, action created
createA new branch or tag
deleteA deleted branch or tag
discussionA new discussion, action created
discussion_commentA comment on a discussion, action created
forkA new fork
issue_commentA comment on an issue or pull request, action created
issuesAn issue, action opened, closed or reopened
memberA new collaborator, action added
publicThe repository made public
pull_requestA pull request, action opened, closed or reopened
pull_request_reviewA pull request review, action submitted
pull_request_review_commentA pull request review comment, action created
pushA push, with one line per commit
releaseA release, action published
repositoryA new repository, action created
watchA star, action started

Execute Instatus webhook takes the body Instatus sends. A value that is too long returns 400 INVALID_FORM_BODY. Fluxer posts the incident if it has a name, then the maintenance if it has a name, and otherwise the component update.

FieldTypeDescription
meta??Instatus metadata objectCallback metadata
page??Instatus page objectThe status page, used for the embed footer and link
incident??Instatus incident objectThe incident
maintenance??Instatus maintenance objectThe maintenance
component_update??Instatus component update objectThe component status change
component??Instatus component objectThe component
FieldTypeDescription
unsubscribe??stringThe unsubscribe URL
documentation??stringThe documentation URL
FieldTypeDescription
id??stringThe page ID
status_indicator??stringThe status indicator
status_description??stringThe status description, used as the footer
url??stringThe page URL
FieldTypeDescription
id??stringThe component ID
name??stringThe component name
status??stringThe component status
FieldTypeDescription
id??stringThe component ID
name??stringThe component name
status??stringThe component status
created_at??stringThe creation time
FieldTypeDescription
id??stringThe update ID
incident_id??stringThe incident ID
markdown??stringThe update text
status??stringThe update status
created_at??stringThe creation time
updated_at??stringThe update time

Fluxer posts the latest update as the embed description.

FieldTypeDescription
id??stringThe incident ID
name??stringThe incident name, used as the embed title
url??stringThe incident URL
status??stringAn Instatus status value
backfilled??booleanWhether the incident was backfilled
created_at??stringThe creation time
updated_at??stringThe update time
resolved_at??stringThe resolution time
incident_updates??array[Instatus incident update object]The incident updates
affected_components??array[Instatus affected component object]The affected components
FieldTypeDescription
id??stringThe update ID
maintenance_id??stringThe maintenance ID
markdown??stringThe update text
created_at??stringThe creation time
updated_at??stringThe update time
FieldTypeDescription
id??stringThe maintenance ID
name??stringThe maintenance name, used as the embed title
url??stringThe maintenance URL
status??stringAn Instatus status value
maintenance_start_date??stringThe start of the window
maintenance_end_date??stringThe end of the window
backfilled??booleanWhether the maintenance was backfilled
created_at??stringThe creation time
updated_at??stringThe update time
resolved_at??stringThe resolution time
maintenance_updates??array[Instatus maintenance update object]The maintenance updates
affected_components??array[Instatus affected component object]The affected components
FieldTypeDescription
created_at??stringThe time of the change
new_status??stringThe new component status
component_id??stringThe component ID

Fluxer uppercases a status and drops everything except letters, which turns degraded_performance into DEGRADEDPERFORMANCE. Each value sets the label, and every value except UP and HASISSUES also sets the embed color. Any other status is shown as sent.

ValueDescription
UPShown as "All systems operational"
HASISSUESShown as "Has issues"
OPERATIONALShown as "Operational"
UNDERMAINTENANCEShown as "Under maintenance"
DEGRADEDPERFORMANCEShown as "Degraded performance"
PARTIALOUTAGEShown as "Partial outage"
MAJOROUTAGEShown as "Major outage"
INVESTIGATINGShown as "Investigating"
IDENTIFIEDShown as "Identified"
MONITORINGShown as "Monitoring"
RESOLVEDShown as "Resolved"
NOTSTARTEDYETShown as "Scheduled"
PLANNEDShown as "Planned"
INPROGRESSShown as "In progress"
COMPLETEDShown as "Completed"

Execute Libredesk webhook takes the body Libredesk sends. Fields outside these tables are ignored, and Fluxer never posts contact email addresses, phone numbers or attachment URLs.

FieldTypeDescription
eventstringThe Libredesk event type
payloadLibredesk payload objectThe event data

Each event uses only the fields that apply to it.

FieldTypeDescription
uuid?1?stringThe conversation UUID
reference_number?1?stringThe conversation reference number
subject?1?stringThe conversation subject
inbox_name?1?stringThe inbox name
contact?1?Libredesk person objectThe contact
conversation_uuid??stringThe conversation UUID on other events
conversation??Libredesk conversation objectThe conversation after the change
previous_status??stringThe status before a status change
new_status??stringThe status after a status change
snooze_until??stringThe end of a snooze
previous_tags??array[string]The tags before a tag change
new_tags??array[string]The tags after a tag change
assigned_to??integerThe Libredesk user ID of the new assignee
type??stringThe message type, where activity posts nothing
status??stringThe message delivery status, or the conversation status on conversation.created
text_content??stringThe plain text of the message, shortened to 1,000 characters
private??booleanWhether the message is a private note
sender_type??stringcontact or agent
meta??Libredesk message metadata objectThe message metadata
attachments??array[Libredesk attachment object]The message attachments
author??Libredesk person objectThe message author
name??stringThe Libredesk webhook name on webhook.test

1 Only on conversation.created

FieldTypeDescription
uuid??stringThe conversation UUID
reference_number??stringThe reference number
subject??stringThe subject
inbox_name??stringThe inbox name
status_category??stringopen, waiting or resolved
FieldTypeDescription
first_name??stringThe first name
last_name??stringThe last name
FieldTypeDescription
is_automated??booleanWhether an automation rule sent the message
is_csat??booleanWhether the message is a satisfaction survey, which posts nothing
continuity_email??booleanWhether the message is a continuity email digest, which posts nothing
FieldTypeDescription
name??stringThe file name
ValueDescription
conversation.createdA new conversation
conversation.status_changedA status change
conversation.tags_changedTags added or removed
conversation.assignedAn agent assigned
conversation.unassignedAn agent removed
message.createdA new contact message, agent reply, private note or automated reply
message.updatedAn outgoing message that failed to send
webhook.testA test delivery from the Libredesk webhook settings
POST/v1/webhooks/{webhook_id}/{token}/github

Posts one embed for a GitHub event, under the name "GitHub". Use this route's URL as the payload URL in GitHub, with the content type application/json. Mentions in GitHub text never notify anyone.

FieldTypeDescription
thread_id?snowflakeThe ID of a thread to post in, needed for a forum or media channel
FieldTypeDescription
X-GitHub-Event?stringThe GitHub event type
X-GitHub-Delivery?stringThe delivery ID, where a repeat within 24 hours posts nothing

The body is a GitHub callback object.

StatusBodyCondition
204emptyThe callback was accepted, whether or not it posted a message
400error responseWEBHOOK_SERVICE_FORUM_UNSUPPORTED when a forum or media webhook sends no thread_id

The rate limit is 200 requests per minute, on the webhook:github::webhook_id bucket.

POST/v1/webhooks/{webhook_id}/{token}/slack

Posts a message from a Slack incoming webhook body. Mentions never notify anyone, and a repeated callback posts again.

FieldTypeDescription
thread_id?snowflakeThe ID of a thread to post in, needed for a forum or media channel

The body is a Slack callback object.

StatusBodyCondition
200the text okThe message was created
400error responseCANNOT_SEND_EMPTY_MESSAGE when there is no text and no attachment becomes an embed
400error responseWEBHOOK_SERVICE_FORUM_UNSUPPORTED when a forum or media webhook sends no thread_id

The rate limit is 60 requests per minute, on the webhook:execute::webhook_id bucket.

POST/v1/webhooks/{webhook_id}/{token}/instatus

Posts one embed for an Instatus incident, maintenance or component update, under the name "Instatus". A repeat of the same update within 24 hours posts nothing.

The body is an Instatus callback object.

StatusBodyCondition
204emptyThe callback was accepted, whether or not it posted a message
400error responseWEBHOOK_SERVICE_FORUM_UNSUPPORTED for a webhook in a forum or media channel

The rate limit is 200 requests per minute, on the webhook:instatus::webhook_id bucket.

POST/v1/webhooks/{webhook_id}/{token}/libredesk

Posts one embed for a Libredesk help desk event, under the name "Libredesk". In the Libredesk admin settings, add a webhook with this route's URL and pick the events to send. The Libredesk secret is optional because the token in the URL is the credential.

FieldTypeDescription
thread_id?snowflakeThe ID of a thread to post in, needed for a forum or media channel

The body is a Libredesk callback object.

StatusBodyCondition
204emptyThe callback was accepted, whether or not it posted a message
400error responseWEBHOOK_SERVICE_FORUM_UNSUPPORTED when a forum or media webhook sends no thread_id

The rate limit is 200 requests per minute, on the webhook:libredesk::webhook_id bucket.