---
title: "Chokepoint disruption alert (outbound, signed)"
method: POST
path: "chokepoint.disruption"
tags: ["ShippingV2Service"]
---

# Chokepoint disruption alert (outbound, signed)

`POST chokepoint.disruption` (webhook)

WorldMonitor POSTs this event to the `callbackUrl` you register via
RegisterWebhook when a subscribed chokepoint's disruption score is at or
above your `alertThreshold` (and its live signals above `minLiveSignal`
when set), once per crossing, including one already in progress at
first evaluation. It re-arms below the threshold unless a score input
missing since the last delivery could explain the drop. Failures retry
every 5 minutes with the same `X-WM-Delivery-Id` while the score holds;
5 failed ticks deactivate the webhook. Full rules at
https://www.worldmonitor.app/docs/api-shipping-v2#delivery-worker.

Verify `X-WM-Signature-V2` in constant time against
`sha256=` + hex(HMAC-SHA256(key=secret,
message=timestamp.deliveryId.event.rawRequestBody)). Use the exact
header strings and raw body bytes. Use `secret` verbatim;
do not hex-decode it or re-serialize JSON. Reject missing or malformed
headers and timestamps more than 300 seconds in the past or future.
Require V2; never fall back to the legacy body-only signature.
Atomically dedupe verified delivery ids for the subscription lifetime.
Retries keep the id but refresh the timestamp and signature.
Respond with any 2xx to acknowledge receipt.

## Headers

- `X-WM-Signature` string, required
- `X-WM-Signature-V2` string, required
- `X-WM-Timestamp` string, required
- `X-WM-Event` 'chokepoint.disruption', required
- `X-WM-Delivery-Id` string, required

## Payload

- object
  - `subscriberId` string, required: The `wh_`-prefixed subscription receiving this alert.
  - `chokepointId` string, required: Chokepoint that breached the threshold (e.g. `suez`).
  - `score` number, required: Current disruption score of the chokepoint, 0-100.
  - `alertThreshold` number, required: The subscription's configured alert threshold, 0-100.
  - `triggeredAt` string, date-time, required: ISO-8601 timestamp when the alert fired.
  - `reason` 'ais_congestion_spike' | 'navigational_warning' | 'transit_drop' | 'score_threshold', required: First matching rule in this order; `score_threshold` when none matches.
  - `details` object: Name, status, warning and AIS counts, congestion, war-risk tier, transit change, previous score, feed time.

## Acknowledgement `2XX`

Any 2xx acknowledges receipt. A non-2xx response or a delivery
timeout marks the delivery failed.

---

[API](https://skmtc.dev/worldmonitor/apis/worldmonitor-api.md) · [All operations](https://skmtc.dev/worldmonitor/apis/worldmonitor-api/llms.txt) · [OpenAPI document](https://skmtc.dev/worldmonitor/apis/worldmonitor-api/revisions/e3dc8463a5c9?raw)
