Lemon Squeezy production webhook troubleshooting checklist
A live checkout page is only half of the revenue path. Before exposing a public buy link, prove that the paid event reaches the
production endpoint, the x-signature gate trusts the exact raw body, fulfillment runs once, and refund rollback is tested.
Work the production path in order
Do not debug fulfillment first. Most launch failures come from environment mismatch, stale endpoints, missing event subscriptions, signature verification on a parsed body, or no idempotency guard before side effects.
order_created event
For a one-time digital product, treat paid order evidence as the fulfillment trigger. Do not grant from checkout page visits or client callbacks.
x-signature before parsing JSON
Read the raw request body, verify HMAC, then parse. Public logs should show event IDs and object IDs, not secrets or customer data.
Keep the public buy link disabled until this passes
If the live checkout is visible before webhook delivery, idempotency, private delivery, and refund rollback are proven, the buyer can pay while the product still needs manual recovery. Keep production checkout private until the launch report has no missing gates.
Evidence to capture before launch
Record the live checkout URL privately, the final paid event name, the production endpoint response, the idempotency key, the delivery artifact checksum, duplicate replay behavior, refund rollback behavior, and support policy link. This is enough to prove the path without publishing API keys, webhook secrets, customer emails, or private download URLs.
Use the browser-only reports to close the gaps
These tools generate copy-ready release evidence without calling Lemon Squeezy, Stripe, or any paid API.
FAQ
What should I check first when a Lemon Squeezy live checkout succeeds but fulfillment fails?
First verify that the production checkout, store, product, variant, webhook endpoint, and subscribed events are all in the same live
environment. Then confirm the paid order_created webhook arrived, x-signature verification passed against the exact raw body,
and the fulfillment handler wrote the idempotency key before sending delivery.
Can I publish a Lemon Squeezy buy link before duplicate replay is tested?
No. Keep the public buy link disabled until a paid production event can be replayed multiple times while fulfillment, download delivery, email delivery, and license writes run only once.