Skip to content

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).

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 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).

  1. Open the channel’s settings (the gear next to its name).
  2. Go to Integrations → Webhooks → New Webhook.
  3. Click Copy Webhook URL.
  1. Create an app at api.slack.com/apps (From scratch) in your workspace.
  2. Open Incoming Webhooks and switch them on.
  3. Click Add New Webhook to Workspace and pick the channel.
  4. Copy the https://hooks.slack.com/services/… URL.

Workflow Builder trigger URLs (/triggers/…) are not incoming webhooks and are rejected.

  1. In the Teams channel, open ⋯ (More options) → Workflows.
  2. Choose Post to a channel when a webhook request is received.
  3. Name it, confirm the team and channel, and add the workflow.
  4. Copy the URL it shows.

Office 365 connector URLs (….webhook.office.com) are retired by Microsoft and rejected; create a Workflows webhook instead.

  1. Open the space, then its name → Apps & integrations.
  2. Under Webhooks, click Add webhook and name it.
  3. Save, then copy the webhook URL.

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.

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

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: with primary.sale, high (the default) keeps only sales seen between close polls; any keeps 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.

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 Email

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.