Webhook event catalog

Per-event payload shapes for the six Northstake webhook event types, plus the subscription API and delivery semantics.

For event semantics and subscription setup, see Subscribe to webhooks.

Common envelope

Every event delivered to a webhook URL has the following top-level shape:

{
  "id": "<event_type>_<azure_id>_<event-scoped suffix>",
  "azure_id": "<account ID>",
  "staking_vault_id": "<vault ID>",
  "event_type": "<one of the six event types>",
  "severity": "info" | "warning" | "error",
  "title": "<short human title>",
  "message": "<one-line human message>",
  "payload": { /* event-specific fields, documented per event below */ },
  "created_at": <unix epoch milliseconds>
}
FieldTypeNotes
idstringStable per logical event; use this as your dedupe key
azure_idstringThe Northstake account that owns the vault
staking_vault_idstringThe vault the event pertains to
event_typestringOne of the six values below
severitystringCurrently always info for all six event types
titlestringHuman-readable label, suitable for notification headers
messagestringOne-line human description
payloadobjectEvent-specific; documented per type
created_atnumberUnix epoch in milliseconds

Event catalogue

funding_received

Fires when the vault's Staking Vault contract emits an EtherFunded event (any ETH lands in the vault).

FieldNotes
SourceStaking Vault contract event (on-chain)
FrequencyPer funding transaction
Vault typesAll
id formatfunding_received_<azure_id>_<TX_HASH_UPPERCASE>

Payload:

{
  "tx_hash": "0x…",
  "amount_wei": "1000000000000000000",
  "staking_vault_address": "0x…"
}

validator_activated

Fires when a validator transitions to active on the beacon chain (Ethereum-level activation, not Lido PDG promotion).

FieldNotes
SourceBeacon-chain monitor; keyed by activation_epoch
FrequencyOnce per validator
Vault typesAll
id formatvalidator_activated_<azure_id>_<validator_index>

Payload:

{
  "validator_index": 1234567,
  "validator_pubkey": "0x…",
  "epoch": 245678
}

validator_exited

Fires when a validator exits the beacon chain.

FieldNotes
SourceBeacon-chain monitor; keyed by exit_epoch
FrequencyOnce per validator
Vault typesAll
id formatvalidator_exited_<azure_id>_<validator_index>

Payload:

{
  "validator_index": 1234567,
  "validator_pubkey": "0x…",
  "epoch": 256789
}

validator_withdrawal_completed

Fires when a validator's beacon-chain withdrawal sweep completes. Funds have moved from the validator into the vault's withdrawal queue.

FieldNotes
SourceBeacon-chain withdrawals data
FrequencyOnce per withdrawal (a validator may have multiple sweeps)
Vault typesAll
id formatvalidator_withdrawal_completed_<azure_id>_<validator_index>_<epoch>

Payload:

{
  "validator_index": 1234567,
  "validator_pubkey": "0x…",
  "epoch": 256800,
  "amount_eth": "32.045"
}

withdrawal_claimed

Fires when a queued withdrawal is claimed by the recipient (Withdrawal Queue WithdrawalClaimed event).

FieldNotes
SourceWithdrawal Queue contract event (on-chain)
FrequencyPer claim
Vault typesAll (where withdrawal queue exists, i.e. all Lido v3 vaults)
id formatwithdrawal_claimed_<azure_id>_<withdrawal_queue_address>_<request_id>

Payload:

{
  "tx_hash": "0x…",
  "request_id": "42",
  "recipient": "0x…",
  "owner": "0x…",
  "amount_eth": "32.0",
  "withdrawal_queue_address": "0x…"
}

report_update_available

Fires when the Lido vault hub (LazyOracle) publishes a new report timestamp for one of your vaults. Reports update obligations.feesToSettle and validate reserve ratios: see Fee model.

FieldNotes
SourceLido LazyOracle (on-chain)
FrequencyPer report (typically once per vault per reporting window)
Vault typesAll
id formatreport_update_available_<azure_id>_<vault_id>_<report_timestamp>

Payload:

{
  "calldata": "0x…",
  "report_timestamp": "1716115200"
}

The calldata is the constructed lazy-oracle calldata for this vault's update, ready to be submitted on-chain.

Subscription API

Webhook configuration uses standard CRUD endpoints under /v1/account/webhooks. See Subscribe to webhooks for end-to-end usage.

GET    /v1/account/webhooks            # list
POST   /v1/account/webhooks            # create (step-up MFA required)
PATCH  /v1/account/webhooks/{id}       # update (step-up MFA required)
DELETE /v1/account/webhooks/{id}       # delete (step-up MFA required)

WebhookEntry

FieldTypeNotes
idstringServer-assigned
urlstringHTTPS-only
eventTypesstring[] | nullOne or more of the six event types; null = all
stakingVaultIdsstring[] | nullOne or more vault IDs; null = all your vaults
activebooleanWhether deliveries are currently active
createdAtstringISO 8601 timestamp
secretTokenstringReturned only on POST create; persist for signature verification

Delivery semantics

  • At-least-once delivery: your handler must be idempotent (dedupe by id)
  • Retries with backoff: failed deliveries are retried automatically
  • Auto-disable: webhooks that fail consistently for an extended period may flip to active: false
  • Ordering not guaranteed: events may arrive out of chronological order; use created_at for sequencing in your handler

Related



Did this page help you?