Skip to main content
When an expected alert doesn’t arrive, the diagnostics endpoint tells you exactly why, so you can separate query, delivery, and platform issues quickly.

Step 1: Run the diagnostics

For each (watch, trademark) pair you expected an alert for, call GET /v1/watches/{id}/diagnostics:
The reason field gives you the answer in plain English. The endpoint walks the evaluation steps in order and surfaces the first failure.

Step 2: Interpret reason

Step 3: Cross-reference webhook delivery

When alert_fired=true but you never saw it on your receiver, follow the trace to the delivery log:
Likely outcomes:
  • delivered: receiver returned 2xx but may not have stored it. Inspect response_body and your own logs.
  • failed: non-2xx response. error_reason (e.g. non_2xx_500) and http_status tell you which side broke. Up to 7 attempts total.
  • exhausted: all attempts failed. Replay manually with POST /v1/webhooks/{id}/deliveries/{did}/redeliver.
  • pending: still queued. Wait, or check /health/ready to confirm Signa is up.
If the endpoint was auto-disabled mid-flight, check GET /v1/webhooks/{id}. status='disabled' plus disabled_reason (auto_consecutive_100, auto_failure_rate_50_over_50, or manual) explains why. Re-enable with PATCH /v1/webhooks/{id} once the receiver is healthy again.

Step 4: Confirm Signa is healthy

Before assuming a Signa-side bug, check readiness (see Monitor Signa uptime below). Retry the diagnostic flow once the platform reports ok.

Monitor Signa uptime

Two unauthenticated health endpoints let you monitor Signa from your own observability stack, useful for SLA reporting, status-page integration, and incident triage. Use /health/ready for real uptime and incident-detection monitoring; use /v1/health only as a lightweight liveness ping. Both endpoints are unauthenticated, no API key is required for your monitoring agent.
Example synthetic check, adjust to your monitoring tool of choice. Assert only on the HTTP status code (200 vs 503), that already separates “up” (ok or degraded) from “down” (unhealthy); asserting the body’s status equals exactly "ok" would page you on every non-critical dependency blip:
If you want visibility into degraded without paging on it, log the response body’s status field separately as a warning-level signal. A cron or uptime-checker version of the same check:

What /health/ready doesn’t cover

/health/ready is API-side health only. It does not surface:
  • Data freshness for a specific office. An office falling behind on updates doesn’t flip the API to degraded. If you watch a specific office and alerts stop firing, check the diagnostics endpoint, last_relevant_sync_run.completed_at will be stale.
  • Webhook delivery. That’s between Signa and your receiver. Cross-check GET /v1/webhooks/{id}/deliveries for the delivery audit log.
If /health/ready is green but you suspect a Signa-side issue with a specific watch, use the diagnostics endpoint above. Signa does not currently publish a public status page. If you maintain your own, surface /health/ready and the diagnostics-derived freshness signal separately, they cover different incident classes. For incident questions, email support@signa.so, or report a reproducible platform bug programmatically via POST /v1/feedback (attach the request_id from a failed call so we see exactly what you hit).

Retention

Past the diagnostic horizon, evaluated=false and reason explains the freshness limit. A watch always continues to evaluate new data going forward, the horizon only limits the backward-looking diagnostic trace.