Outgoing webhooks
An outgoing webhook is an HTTP notification that Unisoft sends to a URL of your choice as soon as a business event occurs in your organization (a successful payment, a submitted form, a new contact created…). It is the ideal mechanism to react in real time without having to poll the API in a loop.
Open the Webhooks tab
- 1
Go to the Developers page
Type the URL
/app/developpeurs/tabsin the address bar. - 2
Click the 'Outgoing webhooks' tab
The tab is to the right of the API Keys tab.
Understanding the table
The central table lists the webhooks configured for your organization. For each, you see:
| Column | Content |
|---|---|
| Name | The label you chose (e.g., Make - Mailchimp sync) |
| URL | The target URL, partially masked so as not to expose the secret path |
| Events | The listened events (tags) |
| Last success | Relative date of the last successful send, or never |
| Status | Active (green), Inactive (gray), Quarantined (orange), or number of failures (yellow) |
| Actions | Test, Edit, Regenerate secret, Delete buttons |
Create a new webhook
- 1
Click 'New webhook'
The button is at the top right of the tab. A modal opens.
- 2
Give a descriptive name
Enter a descriptive name like Make - Mailchimp sync or Slack donation alerts. You will find it later when you have several webhooks.
- 3
Fill in the target URL
The URL provided by your tool (Make catch hook, Zapier webhook, your script endpoint…). HTTPS mandatory — URLs in
http://or pointing to local addresses are not accepted. - 4
Choose the events to receive
Select one or several events from the list (see the table below). You can select several if the same URL must receive different types of notifications.
- 5
Click 'Create the webhook'
A new modal appears immediately with the signing secret.
- 6
Copy the secret right away
Click "Copy the secret". You will never see this secret again once the modal is closed — paste it immediately into your tool or your password manager.
- 7
Confirm
Click "I have copied the secret" to close the modal.
Available events
Each webhook listens to one or several events. Here are the main ones available:
| Event | Triggered when… |
|---|---|
paiement.success | A payment is successfully collected |
paiement.refunded | A payment is refunded |
form.submitted | A form is submitted by a visitor |
contact.created | A new contact is created in the Contacts module |
* | All events (to reserve for debugging or centralized tools like log aggregators) |
The HMAC signature: verify the notification really comes from Unisoft
When Unisoft sends a notification to your URL, it attaches a cryptographic signature computed with the shared secret. Your tool must verify this signature to ensure the notification is legitimate (and not a malicious call imitating Unisoft).
Principle
- Unisoft computes an HMAC SHA-256 of the request body, using your secret as the key.
- The signature is attached to the HTTP request (usually in a
X-Unisoft-Signatureheader or equivalent). - Your tool recomputes the signature on its side from the received body and its secret.
- If the two signatures match, the notification is authentic.
On the Make / Zapier side
Make and Zapier often offer a native signature validation in their Webhook module. Simply fill the secret in the dedicated field: the platform verifies automatically.
On the in-house script side
If you write your own endpoint, your code must:
- Read the raw body of the HTTP request.
- Read the signature in the header.
- Compute the HMAC SHA-256 of the body with your secret.
- Compare the two. Reject (with a 401 code) if the signature does not match.
The exact format of the header and any timestamp for replay protection are described in the interactive Swagger documentation (API Documentation button).
Example payload received
When a new payment is collected, your URL receives an HTTP POST request with a JSON body whose structure looks like:
{
"type": "paiement.success",
"createdAt": "2026-05-18T10:32:14.000Z",
"organisation": "org_abc123",
"data": {
"id": "pmt_xyz789",
"amount": 5000,
"currency": "EUR",
"contact": {
"id": "ctc_def456",
"firstName": "Sarah",
"lastName": "Cohen",
"email": "sarah.cohen@exemple-unisoft.org"
},
"reason": "Donation to the Main cash register"
}
}
The exact format (available fields, naming conventions) is documented event by event in the Swagger.