> ## Documentation Index
> Fetch the complete documentation index at: https://runcrate.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Discord

> Post Runcrate events to a Discord channel through a channel webhook.

A Discord endpoint posts each event to one Discord channel as an embed: what happened, one sentence of detail and a link to the right page in Runcrate. You need no server. You need the **Manage Webhooks** permission on the Discord server.

## Get a webhook URL from Discord

**1. Open the server's integrations**

In Discord, open your server's menu and go to **Server Settings > Integrations > Webhooks**.

**2. Create the webhook**

Select **New Webhook** (**Create Webhook** if the server has none yet). Open the new webhook, give it a name such as `Runcrate`, and pick the **Channel** the messages should go to. Select **Save Changes**.

**3. Copy the URL**

Select **Copy Webhook URL**. It looks like `https://discord.com/api/webhooks/1234567890/...`.

## Add it to Runcrate

**1. Add an endpoint**

In [Settings > Webhooks](https://runcrate.ai/dashboard/settings/webhooks), select **Add endpoint** and choose **Discord**.

**2. Paste the URL**

Paste all of it into **Discord webhook URL**. Runcrate accepts `discord.com/api/webhooks/...` URLs (and the `ptb.` and `canary.` hosts).

**3. Choose events and test**

Pick **All events** or **Choose events**, then select **Send a test event**. An embed titled "Test from Runcrate" appears in the channel.

## What the message looks like

Each event is one embed:

* **Title**, linked to the page in Runcrate where you act on it, for example "production used 80% of its monthly budget".
* **Description**: one sentence with the detail and what happens next.
* **Colour** on the left edge: green when something worked (an instance is ready, money was added), blue for information, amber for a warning (a budget at 80%, a runtime ending) and red when something stopped or failed.
* **Fields** side by side, such as Environment, Month to date and Budget.
* The event's time, and **Runcrate** in the footer.

This is the exact body Runcrate posts for a [`budget.threshold_reached`](/docs/webhooks/events) event:

```json theme={"theme":{"light":"github-light","dark":"catppuccin-mocha"}}
{
  "embeds": [
    {
      "title": "production used 80% of its monthly budget",
      "url": "https://runcrate.ai/dashboard/settings/environments",
      "description": "$402.17 of $500.00 spent in October 2026. At the full budget its instances stop, launches are refused and its API keys are declined.",
      "color": 16098851,
      "timestamp": "2026-10-20T14:02:11.000Z",
      "fields": [
        {
          "name": "Environment",
          "value": "production",
          "inline": true
        },
        {
          "name": "Month to date",
          "value": "$402.17",
          "inline": true
        },
        {
          "name": "Budget",
          "value": "$500.00",
          "inline": true
        }
      ],
      "footer": {
        "text": "Runcrate"
      }
    }
  ]
}
```

**What arrives** in the endpoint drawer shows this for any event before you save.

## The URL is the secret

Discord signs nothing. Anyone who has the webhook URL can post to your channel, so treat it like a password:

* Do not paste it into tickets, chat or a repository.
* Runcrate stores it encrypted and only ever shows its host and last four characters.
* If it leaks, delete the webhook under **Server Settings > Integrations > Webhooks**, make a new one and paste the new URL into the endpoint with **Edit**.

## When a message does not arrive

The [delivery log](/docs/webhooks/retries#the-delivery-log) shows each attempt with a sentence about what went wrong. For Discord it reads Discord's answer:

| Discord says | What you see in the log |
| - | - |
| Unknown Webhook (code `10015`), or HTTP 404 | Discord says this webhook no longer exists. Make a new one and paste it here. |
| Invalid Webhook Token (code `50027`), or HTTP 401 | Discord does not accept this webhook token. Copy the URL again from Discord. |
| HTTP 429 | The endpoint is getting too many messages right now. Runcrate will try again. |

Failed messages are retried on the same schedule as any webhook. See [retries](/docs/webhooks/retries).

## Related

> **[Slack](/docs/webhooks/slack)**
>
> The same events in a Slack channel.

> **[Events](/docs/webhooks/events)**
>
> What each event means and when it is sent.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.