Collect only fill submission formsubmitted
Sent when a fill form minted with form.captureMode: "collect" is submitted and validated. In collect-only mode Craftkit creates no render and stores no field data — this webhook carries the complete data instead. Ephemeral / purge-on-ack: the delivery payload is held only until you return 2xx, then purged. There is no pull fallback, so alert on any delivery that exhausts its retries (abandoned).
Authorizations
Project API key (ck_live_… or ck_test_…) presented as a bearer token.
For embed partner endpoints this is the partner secret key, which is the
same credential type.
Headers
The event name (mirrors the body's event field).
"render.succeeded"
HMAC-SHA256 of the raw request body, keyed with the subscription secret, hex-encoded (no prefix). Verify before trusting the payload.
Unix epoch seconds when the delivery was signed. Use with the signature to reject stale replays.
Stable delivery id, reused across retries. Key your idempotency on it.
Body
Body of a form.submitted webhook, emitted by collect-only embed fill sessions. data is the complete merged, manifest-keyed, coerced field set (prefill + user entries, user wins) — byte-symmetric with what the render API accepts, so it can be stored and re-rendered verbatim. Ephemeral: retained only until acknowledged, then purged.
form.submitted The embed fill session that produced the submission.
Slug of the template the form was scoped to.
Published version number the data was validated against.
Null in collect-only mode (no render was created).
The complete merged, manifest-keyed, coerced field set.
Response
Return any 2xx to acknowledge. Non-2xx / timeout triggers retry.