Connection health

Some failures are predictable. A provider tells you on every response how much of your allowance is left. A credential has an expiry date. A signing secret that was rotated on one side fails every check from that moment. Connection health reads these and warns before, or at the moment, they turn into errors.

SignalRead fromRaised as
Rate-limit headroomThe provider's rate-limit response headersFinding quota-headroom-low
Rate limit changedThe same headersFinding quota-limit-changed
Signature checks failingThe result your webhook handler reportsFinding signature-failure-shift
Credential nearing expiryA date your team recordsAdvisory, dated

Seamward stores numbers, booleans and dates for all of this. It never stores a header, a signature, a signing secret, a token or a certificate.

Rate-limit headroom

The collector reads the provider's rate-limit headers on your outbound calls and sends three whole numbers: the limit, what remains, and the seconds until it resets. The envelope reference lists the headers and formats.

quota-headroom-low is raised when, for one advertised limit, the lowest remainder was under 15% of the limit in at least three separate hours of the last 24. An hour counts only if it has at least five calls. One low reading is a busy minute; several low hours in a day is an allowance about to run out.

RuleValue
WindowThe last 24 hours, by hour
LowLowest remainder below 15% of the limit
Hours needed3
Calls per hourAt least 5
RaisedOnce a day per limit while it lasts

A provider that advertises different limits for different endpoints is judged per limit.

A changed limit

quota-limit-changed is raised when a limit advertised over the previous day stops being advertised and exactly one new limit takes its place in the last hour, each seen on at least five calls. The summary says whether it was lowered or raised, and from what to what. It is raised once per change.

If several limits move at once there is no honest pairing to report, and nothing is raised.

Signature checks

Seamward does not verify signatures and never sees one. Your webhook handler already does, so it reports the result as a boolean: see reporting a signature result.

signature-failure-shift is raised when the share of failed checks in the last 15 minutes is at least 20 percentage points above the previous day's, over at least ten checked deliveries. It separates a rotated signing secret from a general error spike: without it, both look like a rise in 401 responses.

A connection that reports no signature results raises nothing.

Credential expiry

On a connection's Overview, the Connection health card has a Credential expiry section. Owners and admins record:

FieldRule
KindProvider token, signing secret, certificate, API key, or other
NameUp to 80 characters. A name for the credential, not the credential
Expires onA date
Warn this many days before1 to 365. Default 30

There is no field for the credential itself. An unknown field is refused, and so is a name that looks like a key (a long unbroken run of key characters). A connection holds up to 20 entries.

Inside the warning period an advisory opens with the date. It is marked Within 30 days when seven days or fewer remain, and Date passed after it. Change the date after a renewal and the advisory is withdrawn until the new date comes round. An alert destination subscribed to advisory.opened is told when it opens and again at seven days.

What is not built

Seamward does not read an expiry from a token response, a certificate, or a provider's API. A date exists only if your team records it, and it is not updated when you rotate the credential. There is no per-connection mapping for providers that use non-standard rate-limit header names.

Where it shows

  • The Connection health card on a connection: the lowest headroom of the last day against the limit, how many signature checks failed, and each recorded date with its countdown.
  • Detected changes on the connection lists the three findings.
  • Advisories lists credential expiry beside provider notices.
  • Through MCP, get_integration returns the dates your team recorded and list_advisories returns the advisories.
  • From the CLI, seamward connections health ID returns the dates and both meters as JSON.

Boundaries

  • Findings here do not open incidents. They are warnings on the connection. A 401 spike that follows still raises its own finding.
  • A meter is the provider's claim. Seamward reports the numbers the provider sent.
  • Traces carry none of this. A connection fed only by OpenTelemetry traces has no rate-limit numbers or signature results.

Next steps