Get webhook URL
Return the webhook URL(s) currently configured for this channel, plus delivery status for each URL.
webhookUrl is a string when a single URL is set, an array of strings when
multiple URLs are configured, or null if none is set.
Prefer webhookStatuses. The circuit breaker is per URL, not per channel.
If 1 of 4 URLs is sticky-disabled, that URL is skipped; the other three still
receive events. Send/receive are not affected.
Channel-level haveDisabledWebhooks, circuitState, reason, fails,
trips, and timestamps are a compatibility summary of one URL (the first
sticky-disabled URL, else the first configured URL). They are not "the channel
is dead".
haveDisabledWebhooks—truewhen at least one URL inwebhookUrlis sticky auto-disabled. Live URLs still get events.circuitState— compressed scalar for that same primary URL:ok|degraded|open|half_open|disabled.disabledWebhooks— currently configured URLs that are sticky-disabled (subset ofwebhookUrl).webhookStatuses— one row per currently configured URL. Use this array to see which endpoints are live vs skipped.fails/trips/firstFailAt— diagnostics for support, not product UI.fails= failures in a rolling ~10 minute window (not lifetime).trips= failed recovery probes on the 15 min → 1 h → 6 h schedule (sticky disable after 3). Clients can ignore these and usewebhookStatuses+disabledWebhooksonly.
Sticky disable skips delivery; it does not unconfigure the URL (it stays in
webhookUrl). Re-enable with POST /webhook or POST /settings. Those
endpoints replace the whole list — with multiple URLs, send the full array.
JWT tokentoken<token>Current webhook URL and per-URL circuit status
application/json- response
Configured webhook URL(s) plus per-URL circuit / auto-disable status.
webhookUrl?|array<>|Configured webhook URL, array of URLs, or null when none is set
haveDisabledWebhooks?booleantrue when at least one URL in webhookUrl is sticky auto-disabled.
Not "the channel is dead": other configured URLs still receive events.
Send/receive are unaffected.
circuitState?stringCompatibility scalar for one URL (first sticky-disabled, else first
configured). Not the channel as a whole. Prefer webhookStatuses[].circuitState.
"ok""degraded""open""half_open""disabled"reason?stringLast qualifying fail reason of the summary URL (same URL as circuitState)
fails?integerDiagnostic only (summary URL). Qualifying failures in the rolling
~10 minute breaker window — not lifetime and not customer retries.
Prefer webhookStatuses / disabledWebhooks.
trips?integerDiagnostic only (summary URL). Failed recovery probes (≈15 min → 1 h → 6 h). Sticky disable after 3. Not a blind unblock timer.
disabledAt?integerEpoch milliseconds when the summary URL became sticky-disabled
firstFailAt?integerDiagnostic only (summary URL). Epoch ms of the first fail in the
current ~10 minute window (pairs with fails).
lastStatus?integerLast HTTP status from the summary URL, when known
nextProbeAt?integerEpoch milliseconds of the next half-open probe for the summary URL, if any
disabledWebhooks?array<>Currently configured URLs that are sticky auto-disabled (subset of webhookUrl).
Does not include leftover URLs that are no longer configured.
webhookStatuses?array<>One entry per currently configured URL. Prefer this over top-level
haveDisabledWebhooks / circuitState when more than one webhook is set.
[key: string]?anycurl -X GET 'https://api.1msg.io/123/webhook'{ "webhookUrl": "https://example.com/webhook", "haveDisabledWebhooks": false, "circuitState": "ok", "disabledWebhooks": [], "webhookStatuses": [ { "url": "https://example.com/webhook", "circuitState": "ok" } ]}