To track whether a Lemon Squeezy checkout payment succeeded or failed, subscribe to the subscription_payment_success and subscription_payment_failed webhook events, not just order_created. Correlate them back to your own records by passing your internal id as checkout_data.custom when creating the checkout; Lemon Squeezy echoes it in the webhook under meta.custom_data. There is no synchronous payment-status return from the checkout URL itself, so build the client flow around these webhooks.

Context: GitHub issue lmsqueezy/lemonsqueezy.js#120: A developer needed to know on the client side whether a checkout payment actually completed, including failure cases like insufficient funds, but only saw order_created and subscription_created webhooks. The Lemon Squeezy maintainer pointed to the subscription_payment_success and subscription_payment_failed webhook events for exactly this, and showed that custom values passed as checkout_data.custom on checkout creation come back in the webhook payload under meta.custom_data for correlation.

## Matched source
Source: Published skill
Original query: "Track Lemon Squeezy checkout payment status with the payment webhooks, not polling"
Key terms: checkout, lemon, payment, polling, squeezy, status, track, webhooks
