SafeWebhook/ Lemon Squeezy
Launch Workbench
Payments Integration Guide

Test Lemon Squeezy Webhooks Online

Test Lemon Squeezy order created, subscription expired, and license key activated webhooks with instant signature check.

Direct Answer / Quick Summary

To test Lemon Squeezy webhooks, open Lemon Squeezy Dashboard > Settings > Webhooks, create a new webhook endpoint using your SafeWebhook URL, choose your events, and click Send Test Event.

Key Capabilities & Testing Highlights

  • Extract order.created, subscription.created, and license_key.created payloads.
  • Instant HMAC-SHA256 verification of X-Signature headers.
  • Zero-setup testing without configuring DNS or ngrok tunnels.
  • Export payloads to Next.js or Laravel billing handlers with 1 click.
Signature Header
X-Signature
Cryptographic Scheme
HMAC-SHA256
Payload Retention
100% Client-Side

Step-by-Step Lemon Squeezy Webhook Setup

Follow these 4 simple steps to capture real-time Lemon Squeezy events in your browser:

1
Navigate to Lemon Squeezy Dashboard > Settings > Webhooks.
2
Click the "+" button to add a new webhook.
3
Paste your SafeWebhook URL and supply a Signing Secret.
4
Select events and click "Send test event".

Sample Lemon Squeezy Webhook Payload

application/json
{
  "meta": {
    "event_name": "order_created",
    "custom_data": {
      "user_id": "12345"
    }
  },
  "data": {
    "id": "1",
    "type": "orders",
    "attributes": {
      "store_id": 11,
      "customer_id": 1,
      "identifier": "ec892e39-1029-4928-8921-102938491029",
      "order_number": 1,
      "user_name": "Jane Doe",
      "user_email": "jane@example.com",
      "currency": "USD",
      "total": 2900,
      "status": "paid"
    }
  }
}

Lemon Squeezy Signature Verification Recipes

Copy-paste production-ready HMAC verification code for your backend:

Node.js / Express Recipecrypto.timingSafeEqual
const crypto = require('crypto');

function verifyLemonSqueezy(rawBody, signature, secret) {
  const hmac = crypto.createHmac('sha256', secret);
  const digest = Buffer.from(hmac.update(rawBody).digest('hex'), 'utf8');
  const signatureBuffer = Buffer.from(signature, 'utf8');
  return crypto.timingSafeEqual(digest, signatureBuffer);
}
Python / Flask / FastAPI Recipehmac.compare_digest
import hmac
import hashlib

def verify_lemon_squeezy(raw_body, signature, secret):
    digest = hmac.new(secret.encode(), raw_body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(digest, signature)

Frequently Asked Questions: Lemon Squeezy Webhooks

Does Lemon Squeezy include custom data in webhooks?

Yes, Lemon Squeezy attaches any custom metadata passed during checkout initialization inside `meta.custom_data`.

Ready to test Lemon Squeezy webhooks in real-time?

Get your free, private edge endpoint instantly. Zero signup, zero credit card, 100% free forever.

Launch Webhook Workbench →

Related Payments Webhook Guides