Use the services option in sp_capture() to control which integrations receive a signal. Service targeting runs before each integration’s own routing rules and respects activation, enable, and license state.
Start with Capturing Events with sp_capture() if you are new to the API. Context fields live in Event Context and Options.
Service IDs
Use these exact keys in the services array:
| Service | Targeting key | Availability |
|---|---|---|
| Local | local | Free |
email | Free | |
| RequestBin | requestbin | Free |
| PostHog | posthog | Pro |
| Google Analytics 4 | ga4 | Pro |
| Mixpanel | mixpanel | Pro |
| Better Stack Logs | betterstack | Pro |
| Pushover | pushover | Pro |
| Webhooks | webhooks | Pro (Plus: one endpoint; Pro: unlimited — Free vs SignalPress Pro) |
| Slack | slack | Pro |
| Discord | discord | Pro |
| Microsoft Teams | teams | Pro |
| Zapier | zapier | Pro |
| Sentry | sentry | Pro |
| Datadog | datadog | Pro |
| Honeycomb | honeycomb | Pro |
| Axiom | axiom | Pro |
| New Relic | newrelic | Pro |
| Grafana Loki | loki | Pro |
| Google Sheets | google-sheets | Pro |
| Excel Online | excel-online | Pro |
Premium keys require SignalPress Pro and a valid license. Browse cards on Integrations Overview.
Target one service
PHP
sp_capture( 'order_completed', $order_data, [ 'source' => 'checkout', 'services' => [ 'posthog' ], ] );
Target several services
PHP
sp_capture( 'backup_failed', [ 'message' => 'The nightly backup failed.', 'level' => 'error', ], [ 'source' => 'backup-worker', 'services' => [ 'slack', 'email', 'pushover' ], ] );
Broadcast and intentional no-ops
- Omit
services— offer the signal to every active, enabled, configured integration - List services — only listed destinations are considered; all others are skipped
- Empty array — deliver nowhere (useful for dry runs)
A listed service must still be active, enabled, configured, and licensed (when premium) to receive the signal. Verify setup with Your First Connection Test.
The Test Shortcode always broadcasts — it cannot pass a services list.
Filter-based targeting (Tier 1+)
The signalpress/target_services filter can adjust normalized routing before dispatch. The signalpress/should_deliver_to_service filter can suppress individual destinations. See Hooks and Filters.
Custom integrations registered on Tier 2 use their own service IDs — Extending SignalPress.
What to read next
- Event Context and Options —
sourceand identity fields - Advanced Event Routing — per-service filters after targeting
- JavaScript capture —
servicesfrom the browser through WordPress - Client-side analytics — vendor browser SDKs (separate from PHP
services) - Connection Tests and Delivery Log — confirm which services received a signal
- Loading SignalPress Safely — when to capture from hooks