Skip to main content
A threshold cannot tell you how often it will fire. Two previews answer that before you create a rule, using the same detection and the same matching as delivery. Neither creates a rule, a delivery or anything else.
  • The estimate replays a rule’s configuration over the last 1 to 30 days and returns how many times a day it would have fired, its typical and busiest day, and a ladder of thresholds with the rate at each.
  • The dry-run returns the individual occurrences a configuration would have delivered over the last 24 hours at most, so you can look at the matches themselves.
Both answer on every plan, Free included, for the event types they support. In the dashboard, the rule composer shows the estimate as Estimated frequency while you build the rule, with Compare thresholds for the ladder and Preview matching events for the dry-run. Over MCP they are estimate_webhook_subscription and dry_run_webhook_subscription.

Which event types can be previewed

Needs a watched address: account.fill, account.transfer and account.liquidated. Their previews scan your watched addresses, so they need at least one on your list, and Free cannot hold one. Every event type not in the table has neither preview, and a request for one returns a 400 that lists the supported types.

Estimate

POST /v1/webhooks/subscriptions/estimate. The body is the create body minus endpoint_id: event_type, config (also accepted as filters), and lookback_days (1 to 30, default 7).
  • window, days: the window the answer covers. Some types are estimated over a shorter window than asked for: account.fill and oracle.jump over at most 7 days, market.oi_delta over at most 14.
  • per_day: one entry per 24-hour period ending now, oldest first, labelled by the UTC date it ends on, with quiet days present as zero rather than missing.
  • per_day_p50, per_day_max: the typical day and the busiest one. The busiest day matters more than the average when you are deciding whether to be paged.
  • primary_metric, ladder: up to ten thresholds on the configuration’s own threshold metric, each with the daily rate it would have produced, everything else unchanged. Empty for an event with no threshold metric, such as market.funding_flip.
  • distribution: the metric itself over the window, which answers what counts as large on this market.
  • sample: the newest matches, in the dry-run’s shape.
  • basis.mode: how the answer was reached. exact means every occurrence in the window was counted. replayed means the detector’s own rules were re-run over history, which is how windowed events such as bursts are counted. sampled means a condition could not be expressed as a query, so a recent sample was scaled, and basis.note says so.
Percent thresholds are estimated against each market’s reference values as they are now, not as they were at the time of each occurrence, which basis.note says when it applies.

Dry-run

POST /v1/webhooks/subscriptions/dry-run. The body is the create body minus endpoint_id, plus the window and page size: event_type, config (also accepted as filters), lookback_s (60 to 86400, default 3600) and limit (1 to 200, default 100). Validation errors are identical to create.
occurrences are newest first, each with the data a delivery would carry and observed_at_estimate, the occurrence’s own timestamp; a real delivery’s observed_at is that plus the path’s latency. matched counts every hit in window, before limit. truncated is true when occurrences is shorter than matched, or when a scan hit its row cap and window.from was moved forward so the window and the list agree. Two deliberate differences from delivery: max_age_s is not applied, because you pick the window, and for account.* events the scan also covers occurrences from before the address was added, so you can see what a threshold would have caught. Spot fills are not included in an account.fill dry-run.

Budgets and errors

The estimate and the dry-run share a budget of 6 calls a minute per account. They return market data, so they use API credits like other data requests; the routes that create and manage rules do not.

Create the rule

When the rate is the one you want, create the rule with the same configuration and your endpoint. The create body is the estimate body with endpoint_id added and lookback_days removed:
In the dashboard, choose Add subscription in the composer where you read the estimate. Over MCP, ask the agent to create the rule it just estimated. The new rule starts with status active and enabled true, and its deliveries appear in the endpoint’s delivery log.
Last modified on October 6, 2026