Webhooks
Webhooks are available on our Paid plans.
What does Nami provide via Webhook?
Nami provides a variety of data generated by use of our platform that can be sent via webhook to your servers or a third-party platform.
See our list of webhooks event types for everything Nami supports.
The Webhook Payload
The webhook payload will always have the following fields:
created_date
ISO 8601 format time field for when the event was createdevent_type
the hierarchial event typeid
unique id for the eventuser_id
Nami's unique user ID associated with the event
Additional data will be available based on the event_type
. Take a look at the event types guide for more details.
A full JSON schema for all event payloads is also available here.
Sending of the Webhook
Nami sends events as a UTF-8 encoded JSON body with a header nami-signature
that allows for validation.
Nami expects your application will return a 2xx status code upon a successful webhook receipt. If we receive any other status code, we will continue to retry sending the message. The retry logic has exponential backoff and some randomness. On average it will continue to retry once an hour for up to 24-hours before it stops trying to send a particular payload.
Nami Best Practice
Because of the retry logic and the asynchronous nature of the sending of the webhooks there is no guarantee that you will receive each event in time order.
We recommend that you check the time stamp on the data you are receiving. In particular for user.subscription
events, if you've received a more recent event, you can ignore the old one if all you need to know is your user's current subscription status.
Setting up the Webhook
Navigate to Integrations and click on Webhook.
Give your webhook a name.
Select an option for the User Login Event Filter.
Select 'Wait for user to login before delivering' if your app has accounts with external identifiers and you are using webhooks to update CRM state for logged in users. With this option, Nami will wait until an external id is set before delivering the webhook, ensuring that the webhook data always matches your CRM. Nami will continue retrying the webhook at minimum once a day until the user signs in.
Select 'Deliver all events immediately' if your app doesn't have accounts or if you want a record of all users regardless of signed in state.
Fill out the URL to use for your webhook endpoint.
Webhook URLs must be HTTPS
Select events you would like your webhook to subscribe to. See our list of webhooks event types for details.
Select the switch to Enable Integration and Add New Integration. This creates and turns the integration on so that Nami starts sending data to your webhook.
Click the Webhook card under 'My Integrations' to view your newly created integration.
Reveal and Copy the "Signing Secret". Use this value to validate the data. See below for information on validation and security. You can also use the "Rotate" button to periodically create a new signing secret.
Use Caution When Rotating the Signing Secret
If you are validating the nami signature
on the receiving end of a webhook, be aware that rotating the Signing Secret may break your webhook integration.
Be sure to update the Signing Secret on the receiving end of your webhook immediately after rotating.
Validation and Security
We provide a couple of options that you may use to both secure your webhook endpoint and validate that the data you are receiving is coming from Nami.
Nami hashes the payload of all data sent with HMAC-SHA-256 and a shared secret that is available in the webhook setup page. The result of this hash is added as
nami-signature
to the header of the request. You can validate that the signature is correct on your end after receiving the data.
The following code sample can be used to receive a webhook, validate the signature, and respond to the webhook as either successful or failed.
Nami webhooks come from a fixed IP address so you may explicitly allow traffic from our servers. You can retrieve the current list of IPs to add to your allow list from this endpoint and then look at the array for the key
"webhook_outbound_ips"
.
Nami Best Practice
We recommend that you poll this endpoint on a regular basis and update your system with the latest list of outbound IPs for our webhooks. Once a day should be sufficient.
Last updated