# State-change deduplication

Why you never receive 500 webhook events for one breakout.

## The rule

For webhooks, the API tracks the last-known match state per (webhook, ticker) and only delivers an event when a ticker transitions from not-matching to matching. If a flag flickers true → false → true inside a minute, you get one event. If a ticker stays in the match set for three days, you get one event when it first matched and nothing for those three days. To re-fire for that ticker, it has to leave the match set first.

## Polling is different

Polling endpoints (`/scan`, `/tickers`, `/signals`) always return current state with no deduplication. If you're polling and want edge-triggered behavior, diff the result set yourself between calls.

## See also

- Webhooks overview: https://tickerbot.io/api/endpoints/webhooks
- Create a subscription: https://tickerbot.io/api/endpoints/webhooks/create
