whsec_…), shown once when the endpoint is created
and again when you rotate it. Every delivery carries a Tendr-Signature header:
t in this header; there is no separate timestamp header. For 24 hours after a
secret rotation the header carries a second v1= signed with the old secret, so accept a match on any
v1.
Verifying with the SDK
Verifying by hand
- Split the header on
,and readtand everyv1value. - Compute HMAC-SHA256 of
<t>.<raw body>with your signing secret, hex-encoded. - Compare it with each
v1using a constant-time comparison. Accept if any matches. - Reject the delivery if
tis more than 5 minutes from your clock.
id (also sent as
Tendr-Event-Id), which stays the same on retries and resends.
