application/jsonrazorpay_order_id for a one-time purchase, or razorpay_subscription_id for a recurring plan mandate - not both. These map 1:1 to what Checkout.js's own success handler gives you back for each checkout_type - see POST /subscriptions/checkout's description for the full field contract per flow. Passing razorpay_order_id for what was actually a checkout_type: "subscription" purchase (or vice versa) fails lookup with 404.active this is a no-op that just returns the current state. This matters because the webhook (payment.captured/subscription.charged) performs the exact same activation as a server-side backstop in case this call never fires (app killed, network drop) - both can run for the same purchase without side effects.GET /subscriptions/{purchase_key} afterward to confirm the purchase went through.razorpay_payment_id, razorpay_signature, razorpay_order_id or razorpay_subscription_id200 - purchase flipped to active422 - signature verification failed | 404 - purchase not found