Webhooks
Integrate your application with Signa lifecycle events. Webhooks notify your system when forms are viewed, submissions are completed, templates change, or delivery workflows need attention.
Registering webhooks
Create a webhook URL from Settings > Webhooks. Pick the events your integration needs, save the URL, and copy the HMAC secret for request verification.
Consuming webhooks
Inspect the event type, verify the HMAC signature, then process the payload. Signa stores response status, response body, errors, retries, and manual resend attempts for production debugging.
{
"id": "evt_01h9w8d7e6",
"type": "submission.completed",
"payload": {
"id": "36",
"template_id": "12",
"submitters": [
{
"email": "client@example.com",
"status": "completed"
}
]
}
}Delivery and retries
Webhooks are delivered from the queue so the signer experience is not blocked by your endpoint. Treat every webhook as at-least-once delivery: persist the event id, make processing idempotent, and return a 2xx response only after your application has safely accepted the payload.
Use event.id as your idempotency key.
Store raw request bodies until HMAC verification completes.
Inspect delivery attempts, response codes, response bodies, and stored errors from Signa activity logs.
Event types
form.viewedFired when the form viewed lifecycle transition occurs.
form.startedFired when the form started lifecycle transition occurs.
form.completedFired when the form completed lifecycle transition occurs.
form.declinedFired when the form declined lifecycle transition occurs.
submission.createdFired when the submission created lifecycle transition occurs.
submission.completedFired when the submission completed lifecycle transition occurs.
submission.expiredFired when the submission expired lifecycle transition occurs.
submission.archivedFired when the submission archived lifecycle transition occurs.
template.createdFired when the template created lifecycle transition occurs.
template.updatedFired when the template updated lifecycle transition occurs.
template.archivedFired when the template archived lifecycle transition occurs.
Security
Every webhook includes a signature header generated from the raw request payload and the webhook secret. Compare signatures before trusting the payload, and rotate secrets from the webhook settings page when needed.
curl https://your-app.example.com/webhooks/signa \
-H "Content-Type: application/json" \
-H "x-signa-signature: {computed_hmac}" \
-d '{"id":"evt_test","type":"submission.completed","payload":{"id":"36"}}'Production checklist
Use HTTPS with a publicly reachable endpoint.
Verify x-signa-signature against the raw request body.
Reject unverified payloads before parsing business data.
Persist event ids and make handlers idempotent.
Return quickly and move expensive work to your own queue.
Use submission metadata/external_id to map events back to your records.