Register
Register allowlisted HTTPS; the backend resolves and checks destinations under SSRF policy.
Verify signatures over original bytes, prevent replay and deduplicate against the target delivery contract.
This proposed profile uses HMAC-SHA256 with an out-of-band shared key. It is a design choice to agree with the receiver, not a claim about a deployed service.
Target webhook profile v1 — not a deployed endpoint guarantee
Content-Type: application/json; charset=utf-8
X-LTANS-Key-ID: key-test-001
X-LTANS-Timestamp: 1792040400
X-LTANS-Event-ID: evt-test-001
X-LTANS-Signature: v1=<lowercase hex HMAC-SHA256>
signedBytes = UTF8(timestamp + "." + eventId + ".") || rawBody
secret = BASE64_DECODE(secretFromSecureProvisioning)
Rules: exact raw bytes; reject unknown key; constant-time MAC comparison;
abs(receivedUnixSeconds - signedTimestamp) <= 300 (target test profile);
require header eventId == parsed body.eventId; deduplicate per tenant + eventId;
persist inbox before acknowledging; retain event IDs through the agreed replay window.
Rotation: provision new key securely, overlap by keyId for an agreed interval, retire old key.
Never place the shared secret in a browser bundle or logs.
eventId.eventId and does not duplicate metering.19 events: emission guards, proposed consumers, state semantics, reconciliation and current envelope limits.
Read integration guide →Versioned event contracts with producers, ordering scope and delivery rules.
Read integration guide →Success, duplicate, data-loss, TSA, webhook and handover tests with expected outcomes.
Read integration guide →Register allowlisted HTTPS; the backend resolves and checks destinations under SSRF policy.
Check receiver authority and message verification; use a challenge only if the profile defines one.
Retain attempts, HTTP outcomes and retry schedule; the receiver commits its inbox before success.
Persistent failures trigger policy-based review/pause; authorized replay retains IDs and reconciles state.
Signing keys rotate by keyId over secure provisioning. Removal uses the existing DELETE operation; other administrative actions without dedicated endpoints remain explicitly scoped.