9555044485
/api/checkout now resolves the requested plan (pro|business × monthly|annual) to a plan GUID via gateway /v1/plans (codes follow pro_monthly / business_annual) and POSTs /v1/users/me/plan/purchase. The payments service owns the gateway (ZarinPal/Stripe) and returns redirect_url, which we hand back unchanged. Removes the orphaned Stripe→Supabase webhook + lib/stripe.ts client: profile plan reads come from Identity now, so the Supabase profiles upsert loop is dead. V2 payments has its own gateway callback (skip-auth, payment-callback route). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>