Hello,
Those Events related to different API objects that are involved when using Checkout. The first one, `checkout.session.completed` is sent when the Checkout Session is driven to completion with your customer paying on Checkout. That's the Event we recommend using for handling fulfillment via Checkout as documented here:
https://stripe.com/docs/payments/checkout/fulfill-orders
The second one, `payment_intent.succeeded`, relates to the PaymentIntent API resource [1]. This represents a "state machine" associated with a payment in our API. It allows tracking payment attempts, modeled as a Charge [2], which can happen after a successful or declined/failed payment for example.
Our Checkout product is built on top of our other APIs so when you accept a one-time payment, it will create and use a PaymentIntent under the hood to represent this. Similarly, for recurring payments, it will create a Subscription which in turn will create Invoices and PaymentIntents automatically for you. This is covered in details in our documentation here:
https://stripe.com/docs/payments/tour
As a developer using Checkout though you really would only care about the Events associated with your Checkout Session overall as mentioned in the first doc.
I hope this helps but if you have a follow up question please make sure to work with our support team who will be better equipped to help you with this:
https://support.stripe.com/contact
Best,
Remi