Connect Whop to Nevian
Send every Whop payment to Nevian with one signed webhook, so each sale, renewal, refund and dispute shows up next to the ad that brought the buyer.
What you need
- A Whop business where you can open the Developer tab of the dashboard.
- A Nevian workspace with an active plan (Beginner, Pro or Enterprise), where you are the owner, an admin or a member. Viewers can't connect integrations.
- The two tabs side by side: Nevian on Integrations and the Whop dashboard.
Steps
-
In Nevian, open Integrations, click Add integration (Connect provider when nothing is connected yet) and pick Whop. In the Connect Whop window, have the platform open in another tab, then click Next to get your private URL.
-
Nevian creates your private Webhook URL. Click the copy button next to it and leave this window open: the Webhook secret field below is where you paste Whop's secret in step 6.
-
In Whop, open the Developer tab of your dashboard, go to Webhooks and click Create webhook.
-
Paste the URL as the endpoint URL, keep the API version on
v1and select the eventspayment.succeeded,payment.pending,payment.failed,payment.canceled,refund.created,refund.updated,dispute.createdanddispute.updated. Create the webhook.
-
In the webhooks table, copy the signing secret from the Secret column (it starts with
ws_).
-
Back in Nevian, paste it in the Webhook secret field and click Next. Keep the test step open until the first event arrives, then click Done. Nevian saves it and checks the signature of every call.
-
In Whop, open the row actions of the webhook and send a test event.
-
In Nevian, the Whop card in Integrations turns Connected a few seconds after the test arrives.
Check that it works
- The Whop card in Integrations says Connected and shows the time of the last event.
- Logs › Webhooks lists the test exactly as Whop sent it. Nevian recognises Whop's sample event and marks it as a test: it never counts in revenue or conversions.
- For real sales, send the click ID in the checkout metadata as
btk, read on your page withbt.clickId(). Embedded checkout:<Checkout metadata={{ btk: bt.clickId() }}>. A checkout configuration your server creates: addmetadata.btkand send the buyer to itspurchase_url. Whop copies the metadata to the payment and to its webhooks. - A plain whop.com checkout or product link doesn't carry the click ID: that sale is tied to its visit by the buyer's email, when your pages identified the buyer with
bt('identify', email).
Problems
"Waiting for the first event…" doesn't change
Whop hasn't sent anything to Nevian yet. In Whop, check that the webhook's URL is the whole Nevian URL and that the payment events are selected, then send the test again from the row actions. If you rotated the key in Nevian, the old URL stops working: copy the new one from the integration's Connection tab.
"Whop reached Nevian, but the call was rejected"
The signature didn't match the Webhook secret saved in Nevian, or the call was older than five minutes. Copy the secret again from the Secret column (the whole ws_ value), open the Whop card in Integrations, go to the Connection tab, click Replace, paste it and click Save.
"Webhook secret missing" on the card
You clicked Close before pasting the secret. Every Whop call is rejected until it is saved: paste it in the Connection tab of the Whop card and click Save.
Refunds don't change the sale
A webhook pinned through Whop's API to version 2026-09-02-1 or later sends refunds without the payment total, so Nevian logs them and keeps the sale as it was. Use a webhook without a version pin, like the one this tutorial creates. A partial refund is logged too: only a full refund changes the sale.
"no matching click" on a real sale
The test never has a click, so this is normal there. On a real sale it means the payment arrived without btk in its metadata: check the checkout code above. Whop explains its webhooks in its own developer guide.
Still stuck? Write to [email protected].
Images are drawings of Whop's and Nevian's screens, not screenshots; the real screen may look a little different.