Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Actions Reference

There is no separate HTTP/REST API — see Reactive Loop for why. Every server-side operation is one of these named actions, each reachable at POST /_action/{action-id} (the id is randomized per browser tab; the Twig templates always resolve it via {{ action_name.url() }}, never a hardcoded path).

ActionFileDoes
save-alertAlertActions.phpCreate/update an alert rule
delete-alertAlertActions.phpRemove an alert rule (?id=)
toggle-alertAlertActions.phpEnable/disable a rule (?id=)
test-alertAlertActions.phpEvaluate a rule once, on demand, without waiting for the next cycle
flow-actionsFlowActions.phpRun the Flows tab’s nfdump query and re-render the table
stats-actionsStatsActions.phpRun the Statistics tab’s -s query
dismiss-notificationStatsActions.phpDismiss a flow/stats-panel notification
count-filesStatsActions.phpRecount matching nfcapd files (feeds the Statistics/Sankey “may take a moment” query-time warning, not the import progress bar)
sankey-actionsSankeyActions.phpRun the Sankey tab’s aggregation query
dismiss-sankey-notificationSankeyActions.phpDismiss a Sankey-panel notification
change-profileGraphActions.phpSwitch the active nfdump profile
refresh-graphsGraphActions.phpRe-render the Graphs tab for the current filter set
save-settingsSettingsActions.phpPersist Preferences (merges with existing alert rules)
trigger-importImportActions.phpManual catch-up import for a profile
force-rescanImportActions.phpReset + re-import a profile (destructive, confirmation-gated)
cancel-importImportActions.phpCancel an in-progress manual import
ip-infoUtilityActions.phpReverse-DNS lookup modal, plus geo-IP (public IPs) or Netbox (private IPs)
kill-nfdumpUtilityActions.phpSend SIGTERM to the currently-running nfdump subprocess

Reading an action’s exact contract

The fastest way to see what signals an action actually reads/writes is the action closure itself — they’re short, and every one starts by pulling its inputs via $c->getSignal('name') before doing anything. There’s intentionally no separate schema/OpenAPI layer to keep in sync with it.