Skip to main content
SimpleFunctions delivers signed webhook events to endpoints registered via Webhooks. All bodies are JSON. All deliveries include the headers documented in Webhook receiver.

Common envelope

{
  "id": "evt_...",
  "type": "alert.fired",
  "createdAt": "2026-05-01T00:00:00.000Z",
  "deliveryId": "del_...",
  "endpointId": "we_...",
  "data": { /* event-specific */ }
}

alert.fired

{
  "type": "alert.fired",
  "data": {
    "ruleId": "ar_...",
    "watchedObjectId": "wo_...",
    "ticker": "KXRATECUT-26DEC31",
    "condition": "price_above",
    "threshold": 65,
    "snapshot": {
      "priceCents": 67,
      "volume24h": 125000,
      "regimeLabel": "observable_macro_long_skewed"
    },
    "firedAt": "..."
  }
}

alert.paused

Emitted when a rule auto-pauses after repeated delivery failures.
{
  "type": "alert.paused",
  "data": {
    "ruleId": "ar_...",
    "reason": "endpoint_consecutive_failures",
    "failureCount": 5
  }
}

thesis.confidence_changed

{
  "type": "thesis.confidence_changed",
  "data": {
    "thesisId": "th_...",
    "previousConfidence": 0.62,
    "currentConfidence": 0.74,
    "delta": 0.12,
    "trigger": "monitor_cycle | signal | evaluation"
  }
}

thesis.killed

{
  "type": "thesis.killed",
  "data": {
    "thesisId": "th_...",
    "reason": "kill_flag_raised",
    "evaluation": { /* full evaluation that triggered the kill */ }
  }
}

portfolio.tick_completed

{
  "type": "portfolio.tick_completed",
  "data": {
    "tickId": "pt_...",
    "tickAt": "...",
    "executionMode": "dry-run",
    "actionsCount": 3,
    "balanceCents": 100000,
    "exposureCents": 25000,
    "tickDurationMs": 145000
  }
}

portfolio.halt_triggered

{
  "type": "portfolio.halt_triggered",
  "data": {
    "drawdownCents": 51000,
    "haltCapCents": 50000,
    "newExecutionMode": "halted"
  }
}

Dedupe

Each event carries a stable deliveryId. Receivers should idempotency-key on this id. See Webhook receiver for sample code.

Retries

5 attempts, exponential backoff (1s, 4s, 16s, 64s, 256s). After 5 failures, endpoint enters degraded state; after sustained failures over 24h, endpoint auto-pauses.

Test deliveries

sf webhooks test <endpoint-id>
Sends a synthetic alert.fired event with data.snapshot.priceCents = 50.