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

# Set up monitoring alerts

> Get a Slack, Discord, Microsoft Teams, or email message when a payment, order injection, menu sync, webhook, or API integration fails.

Monitoring alerts tell your team when something **outside** Fire spark fails: a payment provider declines, your POS rejects an order, a menu import breaks, or your webhook endpoint stops answering. Fire spark's own errors never trigger your alerts — our team handles those.

Each alert has a channel (Slack, Discord, Microsoft Teams, or email), the failures that trigger it, and optionally who to notify.

## What can trigger an alert

| Trigger | Fires when |
| - | - |
| **Integration API rejections (4xx)** | Your servers call the Admin or Integrations API with a request Fire spark rejects |
| **Payment failures** | A payment provider declines or errors out |
| **Payment terminal failures** | A kiosk payment terminal or local bridge fails a test, batch close, or other terminal operation |
| **Order injection failures** | An order can't reach your POS or kitchen after every retry |
| **Webhook delivery failures** | Your endpoint rejects or times out on a Fire spark webhook |
| **Menu sync failures** | A menu import from your POS fails |
| **Log errors** | Your apps report an `error` log through Fire spark logs |

## Before you start

* A dashboard role that can manage monitoring alerts.
* For **Slack**: permission to add apps to your workspace, and access to the channel that will receive alerts.
* For **Discord**: the **Manage Webhooks** permission on the server.
* For **Microsoft Teams**: permission to add connectors or incoming webhooks to the team channel.

## Get a webhook URL

Slack, Discord, and Microsoft Teams deliver alerts through an **incoming webhook**: a private URL that posts messages to one channel. Their screens change from time to time, so follow their official guides for the exact clicks.

> [tab] Slack
>
> 1. Create a Slack app (or reuse one) and turn on **Incoming Webhooks**.
>
> 2. Click **Add New Webhook to Workspace** and pick the channel for alerts.
>
> 3. Copy the URL. It starts with `https://hooks.slack.com/services/`.
>
> > [card] [Slack: Sending messages using incoming webhooks](https://docs.slack.dev/messaging/sending-messages-using-incoming-webhooks)
> >
> > Official step-by-step guide from Slack.
>
> > [!NOTE]
> >
> > To post in a private channel, you must be a member of that channel when you create the webhook.

> [tab] Discord
>
> 1. Open **Server Settings → Integrations → Webhooks**.
>
> 2. Click **New Webhook**, choose the channel, and optionally rename it (for example, "Fire spark alerts").
>
> 3. Click **Copy Webhook URL**. It starts with `https://discord.com/api/webhooks/`.
>
> > [card] [Discord: Intro to Webhooks](https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks)
> >
> > Official guide from Discord support.

> [tab] Microsoft Teams
>
> 1. In Teams, open the channel that should receive alerts.
>
> 2. Open **Connectors** (or **Workflows → Create from blank → When a Teams webhook request is received** for newer tenants) and add an **Incoming Webhook**.
>
> 3. Name the connector (for example, "Fire spark alerts") and copy the URL. It usually starts with `https://` and contains `webhook.office.com/webhookb2/` or `outlook.office.com/webhook/`.
>
> > [card] [Microsoft Teams: Create incoming webhooks](https://learn.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook)
> >
> > Official guide from Microsoft.

> [tab] Email
>
> Email doesn't need a URL. Fire spark sends the alert to the roles and members you pick in **Recipients**, using the email on their Fire spark account.

> [!WARNING]
>
> Anyone with the webhook URL can post to your channel. Don't share it or commit it to a repository. Fire spark stores it encrypted and only shows a masked version after you save.

## Create the alert

**1. Open alerts**

In the dashboard, go to **Monitoring → Notifications** and click **New alert**.

**2. Fill in the General tab**

* **Name**: something your team recognizes, like "POS injection failures".
* **Destination**: pick Slack, Discord, Microsoft Teams, or Email and paste the webhook URL when needed.
* **Triggers**: choose which failures fire this alert.
* **Recipients** (optional for Slack, Discord, and Teams): roles or members to name in the message. Required for email.

**3. Save and send a test**

Click **Save**. On the alert card, use **Send test** to confirm the message arrives in your channel.

The preview on the right side of the form shows what the message will look like with sample data.

## Mention people

Use the **Mention** field to notify people in Slack or Discord, or to add a short note at the top of Teams messages.

> [tab] Slack
>
> * `@here` or `@channel` notify the channel. Fire spark converts them to Slack's format for you.
> * To mention one person, use their member ID: `<@U0123ABCDE>`.
>
> [How Slack formats mentions](https://docs.slack.dev/messaging/formatting-message-text#mentioning-users)

> [tab] Discord
>
> * `@here` or `@everyone` notify the channel.
> * To mention a person use `<@USER_ID>`, and for a role use `<@&ROLE_ID>`.
> * To copy IDs, turn on **Developer Mode** in Discord and right-click the user or role.
>
> [Discord: Where can I find my User/Server/Message ID?](https://support.discord.com/hc/en-us/articles/206346498-Where-can-I-find-my-User-Server-Message-ID-)

> [tab] Microsoft Teams
>
> Teams incoming webhooks do not support `@here` the same way Slack and Discord do. Use **Mention** for optional text (for example, a team name) that appears above the alert body.

## Log errors alerts

The **Log errors** trigger watches the `error` logs your apps send with the SDK. Fire spark groups them by alias, error name, and message. Numbers, IDs, and quoted values are ignored, so `Order 123 failed` and `Order 456 failed` land in the same group.

| Field | What it does |
| - | - |
| **Alias filter** | Optional. An exact alias like `checkout.pay`, or a prefix like `checkout.*`. Leave it empty to watch every alias. |
| **Log cooldown (minutes)** | Each group notifies at most once per cooldown. Minimum and default: 15 minutes. |

Errors that arrive during the cooldown are counted, and the next notification says how many happened since when. With **Conditions**, **Accumulated events** counts the errors in the group since its last notification. For example, `greater than 10` waits until more than 10 errors have piled up and the cooldown has elapsed. The link in the message opens the **Logs** tab filtered to that group.

Log errors messages can also use `{{alias}}`, `{{count}}`, `{{since}}`, and `{{context}}` (store, channel, and device).

## Advanced options

The **Advanced** tab covers special cases. The defaults work for most teams.

| Option | What it does |
| - | - |
| **Production only** | Ignores failures from test environments. On by default. |
| **Cooldown** | Minimum minutes before the same alert fires again. Stops a burst of failures from flooding the channel. |
| **Conditions** | Fires only when rules match: repeated failures in a time window, HTTP status, API path, failure message, schedule, or order, customer, menu, and payment details. Order, customer, menu, and payment conditions only work when every trigger is a payment, order injection, or webhook failure. |
| **Messages** | Customizes the text for each trigger. Click a placeholder to insert it. |

Placeholders you can use in messages:

| Placeholder | Example |
| - | - |
| `{{merchant}}` | Your merchant name |
| `{{env}}` | `production` |
| `{{event}}` | `payment.failed` |
| `{{message}}` | The error reported by the provider |
| `{{status}}` | HTTP status, like `422` |
| `{{path}}` | API path, like `/v1/orders` |
| `{{entity_id}}` | Order, menu, or webhook ID |
| `{{timestamp}}` | When it happened |
| `{{url}}` | Link to the event in the dashboard |

## Troubleshooting

> [accordion] The test message never arrives
>
> Check that the URL is the full incoming webhook URL and that the webhook still exists in Slack, Discord, or Teams. If someone deleted the webhook or archived the channel, create a new one and paste the new URL in the alert.

> [accordion] The alert card shows an error
>
> The card shows the last delivery error. **Hourly alert limit reached for this merchant** means Fire spark paused alerts for the rest of the hour to avoid flooding your channels. Raise the cooldown or narrow the alert with conditions.

> [accordion] Mentions show as plain text
>
> In Slack, individual people need their member ID (`<@U0123ABCDE>`), not their display name. In Discord, use `<@USER_ID>` or `<@&ROLE_ID>`.


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