Payment failed. Emitted when a payment transitions to the payment.failed
state in its lifecycle. Payload is the full WebhookTransactionData for the
payment. Retries preserve data.id; deduplicate on
CrowdSplit-Notification-Id.
Unix timestamp (seconds since epoch) at dispatch. Merchants should
reject the delivery if the skew against their own clock exceeds
5 minutes, to limit replay windows.
Unique delivery ID. Stable across retries of the same logical event
— use it to deduplicate idempotently on receipt.
Example:
"a1b2c3d4-e5f6-7890-abcd-ef1234567890"
Body
application/json
Base envelope delivered to merchant webhook endpoints. Every webhook
request body has the shape { id, api_version, event, category, data };
concrete event schemas compose this base via allOf and refine event /
category to their const values and data to a specific schema.
Each delivery carries three headers:
CrowdSplit-Signature t={unix-ts},v1={hex-hmac-sha256}
CrowdSplit-Timestamp seconds since epoch
CrowdSplit-Notification-Id unique per delivery (idempotency)
Merchants MUST verify the HMAC of the raw body using the webhook
secret returned at registration, and SHOULD reject the delivery if
CrowdSplit-Timestamp differs from the current time by more than
5 minutes. Duplicate CrowdSplit-Notification-Id values indicate a
retry of a previously dispatched delivery and should be deduplicated.
API version of the payload builder that produced this event
(currently always v1). Reports the version of the code that built
data — not a globally-bumped number — so when one event type later
moves to v2, only that event reports v2. Branch on this field if
you need to handle multiple payload shapes for the same event.