Signals — Inbound Data from the World
A Signal is any inbound event: a webhook payload from your CRM, an RSS article, a ClearCue intent event, a GitHub issue, a Linear task update, a Jira ticket, or a manual entry. Signals are the raw material that triggers automation — connect them to experiments and projects via Trigger Rules.
Scenario: An engineering team receives signals from three GitHub repositories, their Linear board, and a Jira project. New high-priority issues automatically trigger the "Incident Response" experiment. A B2B sales team also receives ClearCue intent data and automatically triggers "Enterprise Outreach" when buyer score exceeds 80.
Signal sources
| Connector | How it works |
|---|---|
| Webhook |
POST to /api/signals/webhook with an HMAC-SHA256 signature.
Any system that can send an HTTP request can send a signal.
|
| GitHub (OAuth) | Connect via OAuth and create per-repository subscriptions. Each subscription auto-registers a GitHub webhook and receives signals for issues, pull requests, pushes, workflow runs, and releases. Filter by event type, label, or branch. Multiple repos supported simultaneously. |
| Linear (OAuth) | Connect via OAuth and subscribe to one or more Linear teams. Signals are generated for issue created/updated, comment added, and project events. Filter by resource type and action. |
| Jira (OAuth) | Connect via Atlassian OAuth (3LO). Subscriptions register dynamic Jira webhooks scoped to a project key. Signals are generated for issue created, updated, deleted, and comment events. Webhooks are automatically refreshed before the 30-day Atlassian expiry. |
| RSS | Provide a feed URL. FleetQ polls it every 15 minutes and creates one signal per new item. Duplicate detection prevents the same item from being ingested twice. |
| Manual |
Create signals directly via the API (POST /api/v1/signals)
or from the Entity Browser in the app.
|
| ClearCue | Native integration with ClearCue's intent data platform. HMAC-verified webhook maps company/person data into a signal with a FIRE model composite score. |
| Alert connectors | Dedicated webhook endpoints for Sentry, Datadog, and PagerDuty. Each connector validates the provider's signing scheme and maps alert payloads (title, severity, runbook URL) into structured signals. Feed production alerts directly into your incident response experiment. |
| IMAP mailbox |
Poll an IMAP inbox on a schedule. New messages become signals with parsed headers,
sender, subject, and body. Useful for support-ticket ingestion and contact-form
replies. Configure via imap_mailbox MCP tool.
|
| HTTP monitor | Periodically probes an HTTP endpoint and emits a signal whenever the response changes (status code, latency, body diff). Acts as a lightweight uptime + change detector. |
| Slack (inbound) | Slash command or @-mention in Slack creates a signal. Useful for "/triage" style commands that launch an experiment from chat. |
| Generic integration webhook |
Fallback endpoint at /api/integrations/webhook/{slug}
for any service not listed above. HMAC-verified, per-slug binding.
|
Alert connector routes
Production incident tooling ships pre-configured endpoints. Point your provider at these URLs and add the binding secret in Signal Sources → Bindings.
| Provider | Endpoint |
|---|---|
| Sentry | POST /api/signals/sentry |
| Datadog | POST /api/signals/datadog ( X-Datadog-Webhook-Secret header) |
| PagerDuty | POST /api/signals/pagerduty |
OAuth connector subscriptions
GitHub, Linear, and Jira support OAuth-based connections. After connecting an account via Integrations, create one or more subscriptions at Signal Sources → Subscriptions. Each subscription auto-registers a webhook at the provider and receives a unique callback URL.
| Driver | Required env vars | Filter options |
|---|---|---|
| GitHub | GITHUB_CLIENT_ID GITHUB_CLIENT_SECRET |
Repository, event types, labels, branches |
| Linear | LINEAR_CLIENT_ID LINEAR_CLIENT_SECRET |
Team ID, resource types, filter actions |
| Jira | JIRA_CLIENT_ID JIRA_CLIENT_SECRET |
Project key, webhook event types |
/api/signals/subscription/{uuid}.
The opaque UUIDv7 provides security for providers (like Jira) that don't sign webhook payloads.
HMAC secrets are encrypted at rest with the team's per-team key.
Sending a webhook signal
Configure a webhook secret in FleetQ (Signal Sources → Bindings), then sign your requests:
# Generate signature: HMAC-SHA256 of raw request body, using your webhook secret
SIGNATURE=$(echo -n '{"title":"New Enterprise Lead","source":"salesforce","content":{"company":"Acme Corp","score":92}}' | openssl dgst -sha256 -hmac "YOUR_SECRET" -binary | base64)
curl -X POST https://mimir.nikix.ru/api/signals/webhook \
-H "X-Signature: sha256=${SIGNATURE}" \
-H "Content-Type: application/json" \
-d '{"title":"New Enterprise Lead","source":"salesforce","content":{"company":"Acme Corp","score":92}}'
Signal stacking — FIRE model score
When ClearCue signals arrive, FleetQ calculates a composite intent score using the FIRE model. Repeated signals from the same company stack — each additional signal increases the score with a stacking bonus.
| Factor | Weight | What it measures |
|---|---|---|
| Fit | 25% | How well the company matches your ICP |
| Intent | 40% | Buying signals — content consumed, searches, demo requests |
| Engagement | 25% | Interaction with your brand (emails opened, site visits) |
| Relationship | 10% | Existing connections (warm intro, past customer) |
Score tags: Hot (≥80), Warm (60–79), Lukewarm (40–59), Cold (<40). Exponential decay (λ=0.05) reduces scores for inactive companies over time.