Documentation Index
Fetch the complete documentation index at: https://docs.signa.so/llms.txt
Use this file to discover all available pages before exploring further.
Pick a delivery mode
You have three options for getting alerts out of Signa, in increasing order of operational complexity:- Pull on a schedule. Cron job calls
GET /v1/alerts and walks
pages until it sees an
idyour store already has. - Webhook. Sign up an endpoint via POST /v1/webhooks and let the dispatcher push to you.
- Webhook + reconciliation. Push for low-latency, but periodically poll POST /v1/alerts/lookup with the IDs you’ve persisted — confirms nothing was lost during a receiver outage.
Deduplication
Alerts are immutable. The samealert.created event can arrive at your
endpoint multiple times across retries and redeliveries. Use the
webhook-id header (which equals the alert’s prefixed ID, alt_*) as
your idempotency key.
markProcessed and handle) — is handled by recording state inside the
same transaction as the side effect.
Polling pattern
Reconciliation pattern
If you want defense-in-depth on top of webhooks, run a daily reconciler that asks the API “did you ever fire these IDs?” — useful when you suspect a webhook outage:alerts.lookup() is org-scoped: alert IDs from other orgs (or malformed
ones) are silently dropped. So the gap is real if it shows up.
Replay handling
If you intentionally call POST /v1/watches//replay to re-run a watch, you may receive duplicatealert.created deliveries
for marks that previously fired. Your dedup-by-webhook-id logic keeps
the data layer correct; if you also page customers, suppress notifications
for IDs whose created_at is older than 1 hour.
Severity-based routing
| Cadence | Filter | What it does |
|---|---|---|
| 1/min | severity=critical | Alert pages on-call. |
| 1/hour | (no filter) | Catches normal/high for the daily review queue. |
Sync run “fence” events
sync_run.searchable fires when an ingestion run is fully indexed and
query-visible. If you maintain a downstream cache of trademark records,
treat this as the “you can pull again” signal — it’s quieter than
per-mark events and ideal for batch reconciliation.