Note: Webhooks are available on the Growth and Pro plans. Learn how to change your Kajabi subscription plan.
Before you begin
- Create the Offer that customers should get access to
- Confirm your plan includes webhooks
- Get admin access to the outside tool sending or receiving the webhook
- For Stripe workflows, choose a connector such as Zapier, Make, or your own server
Copy an Offer’s Activation and Deactivation URLs
Every Offer has its own pair of inbound webhook URLs. The Activation URL grants access to every Product in that Offer, and the Deactivation URL revokes it.- From the Dashboard, click Sales, then Pricing.
- Select your Offer.
- Click More, then select Webhooks.
- Copy the Activation URL, the Deactivation URL, or both.
Required parameters
Every request to an Activation or Deactivation URL must include three values:
Send them as a POST request, with all three at the top level of the payload:
Note: Kajabi reads these three values only at the top level. If your connector nests them inside another object, the request fails with an
email can't be blank or name can't be blank error.Grant access after a Stripe purchase on a third-party site
If you sell on your own website — WordPress, Shopify, or a custom checkout — and take payment through Stripe, you can have Kajabi create the customer’s account and unlock their Products the moment Stripe confirms the payment. Stripe cannot call the Activation URL on its own. Stripe wraps the buyer’s name and email inside its own event object, and Kajabi reads those values only at the top level of the payload. Put a connector between the two to reshape the data: Zapier, Make, or a small script on your own server.Connect Stripe to Kajabi with Zapier
Zapier has a built-in Kajabi action, so this route needs no code.- Create a Zap with Stripe as the trigger app, and choose the Stripe event that fires when a payment completes.
- Add Kajabi as the action app, then select Grant Access to an Offer.
- Connect your Kajabi account and select the Site and Offer to grant.
- Map the buyer’s details from Stripe into the Customer Name, Email, and External User ID fields.
- Run a test payment through Stripe to confirm the grant lands, then turn the Zap on.
Call the Activation URL from your own server
Use this route if you already run a server that listens to Stripe events.- Subscribe your server to the Stripe event that fires when a payment completes.
- Read the buyer’s name and email address out of the Stripe event.
- Send a POST request to the Offer’s Activation URL with
name,email, andexternal_user_idat the top level of the payload. - Treat a
{"status":"OK"}response as a successful grant, and log every other response for review.
Control the emails Kajabi sends when a webhook grants an Offer
What the customer receives depends on whether they already have an account on your site.- New customers get a welcome email with their sign-in details, because Kajabi creates the account and generates a password for them
- Existing customers get nothing by default, because the Offer Grant email is off for webhook grants
?send_offer_grant_email=true to the end of the Activation URL:
Revoke access when a customer cancels or refunds
Access granted by webhook does not end on its own. If a subscription lapses in Stripe, or you refund an order, send a second request to remove the customer’s access.- Subscribe your connector to the Stripe event that fires on a cancellation, failed payment, or refund.
- Send a POST request to the Offer’s Deactivation URL with the same
name,email, andexternal_user_idyou sent when granting the Offer. - Confirm the customer lost access to every Product in that Offer.
Note: Deactivation finds the customer by
external_user_id alone. If you send a different value than you sent on activation, or leave it blank, the request returns a Not found error and the customer keeps access.Send purchase data to another tool when an Offer sells
Use an outbound webhook on a single Offer when only that Offer needs to notify an outside tool — a fulfillment service for a physical bonus, for example, or a spreadsheet tracking one launch.- Click Sales in your Kajabi Dashboard, then select your Offer.
- Click More, then select Webhooks.
- Paste the receiving URL into the Purchase Webhook URL field under Outbound Webhooks.
- Click Save.
- Click Send Test, which appears beside the field once a URL is saved, to send sample data to your endpoint.
Send site-wide payment events to another tool
Use a site-wide webhook when an outside system needs every payment, not the sales of one Offer — an accounting tool or an internal dashboard, for example.- Go to Settings > Integrations & Webhooks.
- Click Create webhook.
- Select Payment Succeeded or Cart Purchase from the Event list.
- Enter your endpoint in the Endpoint URL field.
- Click Add webhook.
Note: The endpoint must use HTTPS and support TLS 1.2. Kajabi rejects any other URL when you save the webhook.
Send Form submissions to another tool
Send opt-ins straight into a CRM or email platform as they come in, without exporting a list.- Open the Form you want to send submissions from.
- Click the more options (…) menu, then select Webhooks.

- Enter the URL that should receive the submission data.
- Click Save.
Confirm a webhook worked
Every request to an Activation or Deactivation URL is recorded, whether it succeeded or failed. Check the log first whenever a customer says they did not get access.- Click Sales in your Kajabi Dashboard, then select your Offer.
- Click More, then select Webhooks.
- Click View your webhook log entries beneath the Deactivation URL.
- Filter by status, or search the parameters for a customer’s email address.
pending, processing, complete, or error. An error entry shows the values that arrived and the reason the request was rejected, which is usually enough to spot a missing or misspelled parameter.
Troubleshooting
invalid webhook token— the token in the URL is wrong or was cut off in a copy and paste. Copy the URL again from the Offer’s Webhooks window.Not found— the Offer is archived, the Offer ID in the URL is wrong, or the request was sent to a deactivation without a matchingexternal_user_id.- A 404 page in your browser — Activation and Deactivation URLs accept POST requests only, so opening one in a browser always returns a 404. Test with your connector or a tool that can send a POST request.
can't be blank— one of the three required parameters is missing, or the payload nests them inside another object instead of sending them at the top level.- The grant fails for a repeat purchase — a customer who already has active access to an Offer cannot be granted it a second time.
FAQs
Can I use webhooks with a payment processor other than Stripe?
Yes. Kajabi’s Activation and Deactivation URLs do not know or care which processor took the payment. Any tool that can send a POST request withname, email, and external_user_id at the top level can grant or revoke access, including PayPal, a membership plugin, or your own checkout.
Will my customer get an email when a webhook grants them an Offer?
A customer who is new to your site gets a welcome email with sign-in details. A customer who already has an account gets nothing unless you add?send_offer_grant_email=true to the end of the Activation URL.