Register HTTP endpoints to receive memory lifecycle events.

Webhooks

Register an HTTPS endpoint to receive memory lifecycle events. Each delivery is signed with the webhook's secret using HMAC-SHA256 in the X-CortexDB-Signature header. Failed deliveries are retried with exponential backoff.

Supported event types:

| Event | Fired when | |---|---| | remember | A memory is stored (via /v1/remember or /v1/bulk-remember) | | forget | A /v1/forget operation completes | | episode | An episode is ingested (via /v1/episodes or a connector) |


POST /v1/webhooks

Register a webhook.

{
  "url": "https://hooks.example.com/cortexdb",
  "events": ["remember", "forget"],
  "secret": "whk_at_least_32_chars_of_random"
}

| Field | Type | Required | Description | |---|---|---|---| | url | string | Yes | HTTPS endpoint to POST events to | | events | string[] | Yes | Subset of supported events | | tenant_id | string | No | Sub-tenant scope | | secret | string | No | HMAC signing secret. If omitted, the server generates one and returns it once. |

Response (201 Created)

{
  "webhook_id": "01912a3b-4c5d-7e6f-8a9b-0c1d2e3f4a5b",
  "url": "https://hooks.example.com/cortexdb",
  "events": ["remember", "forget"]
}

GET /v1/webhooks

List registered webhooks for the authenticated tenant.

{
  "webhooks": [
    {
      "id": "01912a3b-4c5d-7e6f-8a9b-0c1d2e3f4a5b",
      "url": "https://hooks.example.com/cortexdb",
      "events": ["remember", "forget"],
      "tenant_id": "engineering"
    }
  ],
  "count": 1
}

The secret is not returned. It is only shown at creation time.


DELETE /v1/webhooks/:id

Deregister a webhook.

curl -X DELETE https://api.cortexdb.ai/v1/webhooks/01912a3b-… \
  -H "Authorization: Bearer your-api-key"

Returns { "deleted": true }.


Delivery format

Each event POST has these headers:

Content-Type: application/json
X-CortexDB-Event: remember
X-CortexDB-Delivery: 01912a3b-…-delivery
X-CortexDB-Signature: sha256=<hmac-sha256(body, secret)>

Body shape (example for remember):

{
  "event": "remember",
  "delivery_id": "01912a3b-…-delivery",
  "tenant_id": "engineering",
  "event_id": "01912a3b-…-evt",
  "content_preview": "Chose CockroachDB for the payments service.",
  "occurred_at": "2026-05-14T10:00:00Z"
}

Verify by HMAC-SHA256 of the raw request body with the secret, then compare to the X-CortexDB-Signature header (constant-time equality).