- 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.
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.fillandoracle.jumpover at most 7 days,market.oi_deltaover 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 asmarket.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.exactmeans every occurrence in the window was counted.replayedmeans the detector’s own rules were re-run over history, which is how windowed events such as bursts are counted.sampledmeans a condition could not be expressed as a query, so a recent sample was scaled, andbasis.notesays so.
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 withendpoint_id added and lookback_days removed:
status active and enabled true, and its deliveries appear in the endpoint’s delivery log.