Skip to main content

Webhooks

Receive real-time notifications when risk thresholds trip, anomalies surface, or changes are detected.

Event Types

EventDescriptionSchema
risk.threshold_exceededA risk score crossed the configured threshold.Payload →
anomaly.detectedA new anomaly was detected in a subscribed AOI.Payload →
change.detectedA change event was detected within an AOI.Payload →
usage.threshold.80Your quota reached 80% for the current billing period.Payload →
usage.threshold.90Your quota reached 90% for the current billing period.Payload →

Payload Schema

{
  "id": "evt_abc123",
  "type": "risk.threshold_exceeded",
  "created_at": "2026-07-08T12:00:00Z",
  "data": {
    "aoi_id": "aoi_42",
    "peril": "flood",
    "risk_score": 0.81,
    "threshold": 0.75,
    "confidence": 0.94,
    "model_version": "flood-v2.3.1"
  }
}

Retry Logic

Failed deliveries (non-2xx response or timeout after 10 s) are retried up to 3 times with exponential backoff: 30 s, 5 min, 30 min. After the final retry, the event is written to your dead-letter queue and can be replayed from the developer portal.

Signature Verification

Every request carries an X-EOSYN-Signature header — HMAC SHA-256 of the raw request body signed with your webhook secret.

import crypto from "crypto";

export function verifySignature(rawBody, signatureHeader, secret) {
  const expected = crypto
    .createHmac("sha256", secret)
    .update(rawBody)
    .digest("hex");
  const sig = Buffer.from(signatureHeader, "hex");
  const exp = Buffer.from(expected, "hex");
  return sig.length === exp.length && crypto.timingSafeEqual(sig, exp);
}

Managing Webhooks

Create, edit, and delete webhooks from the customer portal or programmatically viaPOST /v1/webhooks. Rotate the signing secret any time — the previous secret remains valid for 24 h.

Webhooks

Receive real-time notifications when risk thresholds trip, anomalies surface, or changes are detected.

Event Types

EventDescriptionSchema
risk.threshold_exceededA risk score crossed the configured threshold.Payload →
anomaly.detectedA new anomaly was detected in a subscribed AOI.Payload →
change.detectedA change event was detected within an AOI.Payload →
usage.threshold.80Your quota reached 80% for the current billing period.Payload →
usage.threshold.90Your quota reached 90% for the current billing period.Payload →

Payload Schema

{
  "id": "evt_abc123",
  "type": "risk.threshold_exceeded",
  "created_at": "2026-07-08T12:00:00Z",
  "data": {
    "aoi_id": "aoi_42",
    "peril": "flood",
    "risk_score": 0.81,
    "threshold": 0.75,
    "confidence": 0.94,
    "model_version": "flood-v2.3.1"
  }
}

Retry Logic

Failed deliveries (non-2xx response or timeout after 10 s) are retried up to 3 times with exponential backoff: 30 s, 5 min, 30 min. After the final retry, the event is written to your dead-letter queue and can be replayed from the developer portal.

Signature Verification

Every request carries an X-EOSYN-Signature header — HMAC SHA-256 of the raw request body signed with your webhook secret.

import crypto from "crypto";

export function verifySignature(rawBody, signatureHeader, secret) {
  const expected = crypto
    .createHmac("sha256", secret)
    .update(rawBody)
    .digest("hex");
  const sig = Buffer.from(signatureHeader, "hex");
  const exp = Buffer.from(expected, "hex");
  return sig.length === exp.length && crypto.timingSafeEqual(sig, exp);
}

Managing Webhooks

Create, edit, and delete webhooks from the customer portal or programmatically viaPOST /v1/webhooks. Rotate the signing secret any time — the previous secret remains valid for 24 h.