If you're building your own Discord integration instead of using our bot, you only need to handle one payload shape.
The payload
TypeScript
type IncidentWebhook = {
service: string;
severity: "low" | "medium" | "high" | "critical";
message: string;
url: string;
};
export async function sendIncident(payload: IncidentWebhook) {
await fetch(process.env.DISCORD_WEBHOOK_URL!, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ content: formatEmbed(payload) }),
});
}Why this shape
severity drives which color strip and emoji show up on the Discord
embed, and url is what the acknowledge/escalate/resolve buttons link
back to. Everything else is passed through as-is.