Mnemos AI
Integrations

Webhooks

Push Mnemos events to your services with signed payloads and reliable delivery.

Event catalog

EventNote
session.createdA new interview session was created.
session.completedA session ended; transcript and extractions are ready.
session.failedCapture failed; the session is in error state.
sop.draft.createdExtraction produced a new draft SOP.
sop.approvedAn SOP moved to approved.
sop.archivedAn SOP was archived.
sop.staleAn approved SOP dropped below freshness threshold.
entity.createdA new graph entity was added.
entity.updatedA graph entity was edited.
entity.mergedTwo entities were merged into one.
member.invitedA member invite was sent.
member.joinedA member completed sign-in for the first time.
member.role_changedA member's role was updated.
risk.elevatedContinuity risk for an entity crossed a threshold.
audit.export.completedA requested audit export finished.
integration.connectedAn integration completed OAuth.
integration.disconnectedAn integration was removed.

Payload format

All webhook payloads share an envelope. Resource-specific fields live under data.

envelope
{
  "id": "evt_01HZX5...",
  "type": "sop.approved",
  "created_at": "2026-05-18T14:22:01.482Z",
  "api_version": "2026-04-01",
  "tenant_id": "org_01H...",
  "data": {
    "sop_id": "sop_01H...",
    "version": 4,
    "approver_id": "usr_01H..."
  }
}

Signature verification

Every request includes X-Mnemos-Signature (HMAC-SHA256 over timestamp.body) and X-Mnemos-Timestamp. Compute the HMAC with your endpoint's signing secret and reject deliveries older than 5 minutes to prevent replay.

node verification
import { createHmac, timingSafeEqual } from "node:crypto";

export function verify(body, signature, timestamp, secret) {
  const expected = createHmac("sha256", secret)
    .update(`${timestamp}.${body}`)
    .digest("hex");
  const a = Buffer.from(expected);
  const b = Buffer.from(signature);
  return a.length === b.length && timingSafeEqual(a, b);
}

Delivery and retries

Mnemos retries failed deliveries with exponential backoff at 30s, 2m, 10m, 30m, 1h, 6h, 12h, and 24h. After 24 hours the delivery is marked failed. Endpoints that return 410 Gone or are repeatedly failing for 7 days are disabled with an Owner notification.

Idempotency

Each delivery includes a stable event.id. Persist it on receive and de-duplicate; retries may arrive after a successful first delivery if Mnemos didn't see a 2xx response in time.