Push mission, anomaly, and score events from your fleet straight into PagerDuty, Slack, Datadog, or any service that speaks HTTPS — with HMAC-signed payloads, automatic retries, and a per-subscription audit log.
HMAC-SHA256 in X-RoboTrace-Signature, same scheme as Stripe and GitHub. Verify with two lines of code in any language.
5xx and network errors are retried with exponential backoff. 4xx is permanent — no thundering herd when your endpoint is broken.
Every delivery — including failures — is recorded with attempt count, HTTP status, error, and duration. Visible in the dashboard.
The SDK ships verify_webhook for Python; signing is plain HMAC-SHA256 elsewhere — your stdlib already has it.
from robotrace import verify_webhook, WebhookSignatureError
@app.post("/hooks/robotrace")
async def hook(req):
try:
verify_webhook(SECRET, await req.body(),
req.headers["X-RoboTrace-Signature"])
except WebhookSignatureError:
return Response(status=401)
event = req.headers["X-RoboTrace-Event"]
# ... handle event ...{
"event": "mission.completed",
"delivery_id": "8fc2a31...",
"data": {
"trace_id": "a3b1...",
"device_id": "fleet-agv-003",
"name": "patrol-aisle-3",
"status": "completed",
"start_time": "2026-05-10T18:00:00Z",
"end_time": "2026-05-10T18:04:31Z"
}
}| Concern | Polling | Webhooks |
|---|---|---|
| Latency | Bounded by poll interval (often 30–60s) | < 1 second p99 |
| Cost at fleet scale | N robots × poll rate; quadratic if you fan out | One delivery per event; no idle reads |
| Auth + integrity | API token over HTTPS | HMAC-SHA256 + delivery ID + retry envelope |
| Failure visibility | No record of skipped events | Audit log with status, attempts, duration |
| Backpressure | Your code | 32-concurrent semaphore + per-sub retry budget |
No special SDK needed on the receiving side. If your service can accept a POST with JSON, it can consume RoboTrace webhooks.
Open the dashboard, hit Settings → Webhooks → New webhook, paste your endpoint URL, save the signing secret, done.
Open the dashboard →