Where events are sent
Each event is sent to one URL and signed with one secret. Urtentic picks them per workflow:
The URL and the secret are chosen independently. A workflow with its own URL but no secret of its own is signed with the organization default secret.
If neither the workflow nor the organization has a URL, no events are sent.
Set the webhook URL
1
Open the workflow's webhook settings
In the dashboard, go to Integrations, choose the workflow under All Integrations, and click Webhooks.
2
Choose where to set it
- This Workflow: events for this workflow only.
- Organization Default: events for every workflow that doesn’t have its own URL.
3
Save the URL
Enter your endpoint, for example
https://api.yourapp.com/webhooks/urtentic, and click Save Url. The URL must start with https://.Get the signing secret
Secrets are random 32-byte keys, shown Base64-encoded. Workflow secret. On the This Workflow tab, click the refresh icon next to Secret to create a secret for this workflow. Click the eye icon to show it, then copy it to your server. Until you do this, the field reads Using organisation default and the workflow’s events are signed with the organization default secret. Organization default secret. This is created together with your API keys. The Organization Default tab shows it masked, and the dashboard currently has no way to reveal or copy it.To verify signatures today, create a workflow secret for each workflow you receive events from. That’s the secret you can copy.
Rotate secrets
- Workflow secret: click the refresh icon again. The new secret takes effect immediately for that workflow’s events, so update your server straight away.
- Organization default secret: rotating your API keys on the Integrations page also replaces the organization default secret. Any workflow without its own secret is signed with the new one from then on.
Verify the signature
Compute the HMAC-SHA256 of the raw request body, using the Base64-decoded secret as the key. Compare it, as lowercase hex, with thex-urtentic-signature header using a constant-time comparison. x-urtentic-timestamp isn’t part of the signature.