An alert was resolved

One or more thresholds that had triggered the alert are no longer in alarm.

Only thresholds with resolved in their notify_on are announced, and only when Lago recorded an alarm for their code. A threshold that was already in alarm when it was created or opted in is recorded silently, so its first recovery is announced without an earlier alert.triggered. Pairing is by threshold code: a threshold replaced by another one with the same code resolves the alarm the first one raised.

postWebhookalert_resolved

Headers

X-Lago-Signaturestring required
Example:AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8=

Signature of the webhook payload. The format depends on X-Lago-Signature-Algorithm: hmac is the Base64 encoding of an HMAC-SHA256 digest of the payload, jwt is an RS256 JSON Web Token (a string starting with eyJ).

X-Lago-Signature-Algorithm'jwt' | 'hmac' required
Example:hmac

Algorithm used to generate the signature

X-Lago-Unique-Keystring uuid required
Example:1a901a90-1a90-1a90-1a90-1a901a901a90

Unique id of the webhook. It can be used for idempotency

Payload

webhook_type'alert.resolved' required
object_type'resolved_alert' required
organization_idstring uuid required

Unique identifier of the organization, created by Lago.

Example payload

{
  "organization_id": "1a901a90-1a90-1a90-1a90-1a901a901a90",
  "resolved_alert": {
    "lago_id": "1a901a90-1a90-1a90-1a90-1a901a901a90",
    "lago_organization_id": "1a901a90-1a90-1a90-1a90-1a901a901a90",
    "lago_alert_id": "1a901a90-1a90-1a90-1a90-1a901a901a90",
    "lago_subscription_id": "1a901a90-1a90-1a90-1a90-1a901a901a90",
    "external_subscription_id": "sub_1234567890",
    "external_customer_id": "cust_1234567890",
    "billable_metric_code": "storage_usage",
    "alert_type": "billable_metric_current_usage_amount",
    "alert_code": "storage_threshold_alert",
    "alert_name": "Storage Usage Alert",
    "current_value": "700.0",
    "previous_value": "1200.0",
    "recovered_thresholds": [
      {
        "code": "warn",
        "value": "99.0"
      }
    ],
    "in_alarm_thresholds": [
      "warning"
    ],
    "reason": "recovered",
    "resolved_at": "2025-05-19T10:04:21Z"
  }
}

Response

Return a 200 status to indicate that the data was received successfully

Changes

Webhooks have no change history: a webhook is keyed by its event name rather than a path and method, so no recorded change can name it.