Alerts and notifications
An alert rule watches a scope (an event, a saved list, an attraction, a venue or a catalog filter) for one condition and sends
each firing to the channels it picks. Every firing also shows up in the app under Alerts → History, and as a client
webhook alert.fired event if you subscribe to it.
Rules are managed with /v1/alerts/rules (or Alerts → New alert in the app); channels with /v1/channels (Settings → Notifications).
Channels
Section titled “Channels”A channel is one destination of your organization. Admins add, test, rename, pause and delete them; every member can route rules to them. Chat webhook URLs are secrets: they are stored encrypted and only a non-secret label (the host and a short id) is shown afterwards. When a channel is added, Status302 posts a “connected” message to check the URL.
| Platform | kind |
What you paste |
|---|---|---|
| Discord | discord_webhook |
https://discord.com/api/webhooks/… |
| Slack | slack_webhook |
https://hooks.slack.com/services/T…/B…/… |
| Microsoft Teams | teams_webhook |
A Workflows URL (…logic.azure.com/workflows/… or …powerplatform.com/…/workflows/…) |
| Google Chat | google_chat_webhook |
https://chat.googleapis.com/v1/spaces/…/messages?key=…&token=… |
| Telegram | telegram |
Nothing: you get a link that opens the bot in the chat to connect. |
email |
An address; addresses other than your own confirm a 6-digit code. | |
| Web Push | webpush |
Nothing: each browser subscribes from Settings → Notifications. |
The server only accepts webhook URLs on each platform’s official hosts. GET /v1/alerts/options lists which kinds this server has
configured (channelKinds[].enabled).
Discord
Section titled “Discord”- Open the channel’s settings (the gear next to its name).
- Go to Integrations → Webhooks → New Webhook.
- Click Copy Webhook URL.
- Create an app at
api.slack.com/apps(From scratch) in your workspace. - Open Incoming Webhooks and switch them on.
- Click Add New Webhook to Workspace and pick the channel.
- Copy the
https://hooks.slack.com/services/…URL.
Workflow Builder trigger URLs (/triggers/…) are not incoming webhooks and are rejected.
Microsoft Teams
Section titled “Microsoft Teams”- In the Teams channel, open ⋯ (More options) → Workflows.
- Choose Post to a channel when a webhook request is received.
- Name it, confirm the team and channel, and add the workflow.
- Copy the URL it shows.
Office 365 connector URLs (….webhook.office.com) are retired by Microsoft and rejected; create a Workflows webhook instead.
Google Chat
Section titled “Google Chat”- Open the space, then its name → Apps & integrations.
- Under Webhooks, click Add webhook and name it.
- Save, then copy the webhook URL.
Delivery and limits
Section titled “Delivery and limits”Each channel has its own rate limit, below the platform’s: Discord 25 messages a minute, Slack 30, Microsoft Teams and Google Chat 20,
Telegram 18, Web Push 30, and email 20 an hour. Over the limit, or when the platform answers 429, the channel holds its messages for
the platform’s Retry-After and what waits is merged into its next message, so a busy rule never floods a channel.
A webhook the platform answers with 404, 410, 401 or 403 (deleted, or the app removed) disables the channel; its last error is
shown in Settings → Notifications.
Conditions
Section titled “Conditions”type |
Fires when | Scopes |
|---|---|---|
metric |
A market metric (floor, median, sales, inventory, …) crosses a threshold, once per cooldown per event. | every scope |
inventory |
A primary restock of at least minSeats seats in one poll, or a sale burst within windowMinutes. |
event, list, attraction, venue |
activity |
Every change of the chosen market activity kinds that passes the filters. | every scope |
catalog |
A new event, or a new event whose public on-sale is still ahead. | attraction, venue, catalog filter |
Market activity
Section titled “Market activity”An activity condition reports what happened, one line per change (a section, row and price group of seats):
| Activity | What it means | Confidence |
|---|---|---|
primary.restock |
Seats returned or released on the primary market (not cart holds coming back). | Observed |
primary.sale |
Seats still gone from the primary market after the 20-minute hold window. | Inferred: inferred_high when seen between close polls, else inferred_low |
resale.listed |
Seats listed on Ticketmaster resale. | Observed |
resale.sold |
Seats removed from Ticketmaster resale: usually sold, but a seller can also delist. | Always inferred_low |
Status302 infers sales from inventory changes; Ticketmaster doesn’t publish them. Treat sale lines as strong signals, not receipts. Resale price changes of a listing that stays up are not reported.
Filters, all optional:
sections: only these section names.minQuantity: only changes of at least this many seats (1 to 10,000; default 1).minPrice/maxPrice: the all-in price per ticket in minor units of the event’s currency (see money).confidence: withprimary.sale,high(the default) keeps only sales seen between close polls;anykeeps them all.
{ "name": "Arena restocks", "scope": { "kind": "event", "ref": "1234" }, "condition": { "type": "activity", "activities": ["primary.restock", "resale.listed"], "maxPrice": 25000 }, "digestSeconds": 30, "channels": [12]}Activity rules have no cooldown: every matching change is reported. A catalog filter scope needs at least one filter (sections,
minQuantity above 1, minPrice or maxPrice) and a digest window of 30 seconds or more, so a broad filter can’t send a message per seat.
Digest windows
Section titled “Digest windows”digestSeconds (0, 30, 60 or 300) holds a rule’s firings for that long and sends them to each channel as one message.
It defaults to 30 seconds for activity rules and 0 (send at once) otherwise.
When a channel’s delivery runs, it sends every delivery of that channel that is due as one message. Activity firings of the same rule
and event become one message with up to 10 lines and “+K more”; other firings become separate embeds, blocks or cards of the same message.
In the history, a delivery that rode along in another one shows coalescedInto (the delivery that carried it); dueAt is the earliest
time a delivery is sent.
Route different events to different channels
Section titled “Route different events to different channels”Each rule has one condition and its own channels. To send different events to different places, create one rule per destination:
| Rule | Condition | Channels |
|---|---|---|
| Restocks and new listings | activity: primary.restock, resale.listed |
Slack #ticket-alerts |
| Primary sales | activity: primary.sale, confidence: any |
Discord #drops |
| Floor watch | metric: primary floor ≤ $120 |
Settings → Notifications shows, under each channel, the rules routed to it and what each one sends. For signed HTTP endpoints of your own, subscribe a webhook to the event types you need instead.

