Webhooks

Receive signed, replayable notifications when catalog facts or lifecycle state change.

Event types

catalog.release.published
A new immutable catalog snapshot is available.
deployment.changed
Price, capability, limit, evidence, region, or lifecycle metadata changed.
deployment.deprecated
A deployment entered the deprecated lifecycle state.
evidence.stale
Evidence crossed the freshness threshold configured for the subscription.

Event payload

JSON
{
  "id": "evt_01JZ8R4Y8QH2M0N7K3V5T1P9CE",
  "type": "deployment.changed",
  "created_at": "2026-07-16T09:42:11Z",
  "catalog_release": "cat_2026_07_16_31dd0ab92e80",
  "data": {
    "deployment_id": "dep_openai_gpt_5_1_responses_global",
    "changed_fields": ["rate_card.output_micro_usd"]
  }
}

Verify signatures

Read the raw request body and the allm-signature header, parse t and v1, compute HMAC-SHA256 using the endpoint secret, compare signatures in constant time, and reject timestamps outside your replay window. Do not parse or transform the body before verification.

Pseudo-code
signed = timestamp + "." + rawBody
expected = hmacSha256(endpointSecret, signed)

if !constantTimeEqual(expected, signature): reject(401)
if abs(now - timestamp) > 5 minutes: reject(401)

Delivery behavior

Return a 2xx quickly and process events asynchronously. Deduplicate on event id. Delivery order is not guaranteed. ALLM makes six total attempts with exponential backoff, disables the endpoint after the final failure, and preserves the dead letter for an audited staff replay.