Set up a Stripe webhook so customer events arrive in real time

Updated Oct 20, 20264 min read
English
On this page

Without a webhook, the Details tab of a conversation still reads payments and subscriptions live from Stripe whenever the conversation opens, and Stripe customers are imported as contacts once a day. Nothing is saved in Deskwoot between those reads, and a brand new Stripe customer only becomes a contact with the next daily import.

Adding a webhook closes that gap. Stripe pushes events to Deskwoot the moment they happen on your account, and Deskwoot saves each charge, refund and subscription change right away. This guide walks you through every click with screenshots from the actual Stripe Dashboard.

Step 1: Copy your Webhook URL from Deskwoot

Open Settings → Integrations → Stripe in Deskwoot. The box Customer events in real time shows your personal Webhook URL under Step 1. Webhook URL. It looks like https://deskwoot.com/api/webhooks/stripe-customer/<your-integration-id>. Click Copy next to it.

Step 2: Open the Stripe Webhooks page

Log in to dashboard.stripe.com. In the bottom-left corner click Developers, then click Webhooks in the popup.

Stripe Dashboard with the Developers link in the bottom-left and the Webhooks item highlighted in the popup menu

Step 3: Add a destination and select the 8 events

On the Webhooks page click Add destination. In the wizard:

  1. Leave Event destination scope on Your account.
  2. Switch to the All events tab.
  3. In the search field find and check each of these 8 events:
    • charge.succeeded
    • charge.refunded
    • customer.created
    • customer.updated
    • customer.subscription.created
    • customer.subscription.updated
    • customer.subscription.deleted
    • invoice.paid
  4. Leave the API version on the Stripe default. Click Continue.
Stripe wizard 'Configure your event destination' with arrows pointing at the 'Your account' scope, the 'All events' tab, the event search field, and the Continue button

Step 4: Choose the destination type

Pick Webhook endpoint (it is usually pre-selected for you) and click Continue.

Stripe wizard 'Choose where you want to send events' with the Webhook endpoint option selected and the Continue button highlighted

Step 5: Configure the destination

Type Deskwoot as the Destination name, paste the Webhook URL you copied in Step 1 into the Endpoint URL field, and click Create destination. The description is optional.

Stripe 'Configure destination' form with arrows at the Destination name field set to Deskwoot, the Endpoint URL field filled in, and the Create destination button

Step 6: Reveal and copy the signing secret

Stripe now shows the newly created webhook endpoint with an Active badge. In the right column find the Signing secret box, click the eye icon to reveal it, and copy the whsec_ value.

New Stripe webhook endpoint page with an Active badge and the Signing secret box (whsec_...) highlighted on the right side

Step 7: Paste the secret back into Deskwoot

Back in Deskwoot under Settings → Integrations → Stripe, paste the whsec_ value into the field under Step 2. Webhook signing secret and click Save. The status of the Customer events in real time box switches from "Not set up" to "Set up".

Step 8: Send a test webhook

Back on the Stripe webhook endpoint page, click Send test webhook. Pick charge.succeeded from the dropdown and click Send test webhook. Within a few seconds Stripe shows a 200 response next to the test event. You're done.

From now on Stripe sends new charges, refunds, subscription changes and new customers to Deskwoot the moment they happen, and Deskwoot saves them right away instead of waiting for the daily contact import.

Troubleshooting

The test webhook returns a 4xx error. Open Deskwoot under Settings → Integrations → Stripe and confirm the signing secret matches exactly what Stripe showed you, no leading or trailing spaces. The secret must match for signature verification to succeed.

The endpoint shows a 412 Precondition Failed. Deskwoot has the integration but no signing secret saved yet. Paste the whsec_ value into the Webhook signing secret field and save.

Events arrive but customers still do not appear in Deskwoot. Most likely the events you selected do not include charge.succeeded or customer.created. Open the webhook endpoint in Stripe, click Update details, and confirm the full event list above is selected.

Frequently asked questions

Do I need the webhook?
No, it is optional. Without it, the Details tab of a conversation still reads payments and subscriptions live from Stripe whenever the conversation opens, and Stripe customers are imported as contacts once a day. The webhook makes Deskwoot save each charge, refund and subscription change, and new customers, the moment they happen.
Which events do I select in Stripe?
These 8: charge.succeeded, charge.refunded, customer.created, customer.updated, customer.subscription.created, customer.subscription.updated, customer.subscription.deleted and invoice.paid.
Where do I find the signing secret?
On the page of your new webhook endpoint in Stripe, in the Signing secret box. Click the eye icon to reveal it, copy the value that starts with whsec_ and paste it in Deskwoot under Step 2. Webhook signing secret, then click Save.
What does a 412 Precondition Failed mean?
Deskwoot has your Stripe integration but no signing secret saved yet. Paste the whsec_ value under Step 2. Webhook signing secret and save.

Was this guide helpful?

Keep reading

Ask Fynn about this guide

Get a short answer from this guide and the rest of the help center.

Still need help?

Fynn answers from these guides in the chat, and you can reach the team there too.

Email us