# Connect Stripe Connect Stripe in one click — no keys to copy — then add the one line of code that ties each checkout to the right customer, so the purchase grants their entitlement on its own. Source: https://cross-deck.com/university/connect-stripe/ Verified Crossdeck University lesson — prose plus real, runnable code. ## One click connects it; one line makes it match the right person Connecting Stripe has two halves. The first is one click in the dashboard — a Stripe Connect authorization, no API keys to copy or rotate. That click pulls your customers, products, and past subscriptions into Crossdeck automatically; you don't import anything by hand. The second half is one line in your checkout code, and it's the half people skip. Without it, a Stripe purchase still arrives — but Crossdeck has no way to tell which of your users bought it, so it lands as a brand-new, anonymous "rail-only" customer that never matches the human who paid. That's an orphaned purchase, and it fails quietly in production. The line below is what prevents it. ## Click once, then tell Crossdeck who's buying In the dashboard, open Payment rails → Stripe → Connect with Stripe, approve in Stripe, and you're connected — Crossdeck discovers your history in the background. Watch the film for the click-through. Then the one code step. When your server creates a Checkout Session, stamp the buyer's Crossdeck reference into the subscription's metadata: Copy // the reference is the user you already identify()'d — not a new ID const crossdeckRef = Crossdeck.getCheckoutReference(); await stripe.checkout.sessions.create({ // …your usual mode, line_items, success_url… subscription_data: { metadata: { crossdeck_ref: crossdeckRef } }, }); That's the whole integration: a click and a key in metadata. The webhooks, signature checks, and idempotency are handled for you — Stripe Connect fans every event into Crossdeck automatically. ```web // the reference is the user you already identify()'d — not a new ID const crossdeckRef = Crossdeck.getCheckoutReference(); await stripe.checkout.sessions.create({ // …your usual mode, line_items, success_url… subscription_data: { metadata: { crossdeck_ref: crossdeckRef } }, }); ``` ## The reference is the identity you already set getCheckoutReference() doesn't invent anything — it hands back the exact user you passed to identify(). You stamp it onto the subscription as crossdeck_ref. When the purchase webhook arrives, Crossdeck reads that key and attaches the subscription to that exact customer — the same person who's been generating events all along. Leave the key off and the webhook still lands, but with no one to attach to: Crossdeck mints a fresh rail-only customer instead. The purchase is real, the money is real, but it's stranded on a record that will never line up with the human in your app — and untangling it later is manual work you don't want. So the correctness of this entire rail comes down to one thing: the value you passed to identify(). Get that right (you did, in Identify your users) and every purchase settles onto the right person automatically. ## The purchase lands on the right customer Run a test checkout. The subscription appears on the customer you identified — not a stranger — and the entitlement it grants is active on their record, ready for your gate to read. stripe sub · attached user_847's Stripe subscription, matched by crossdeck_ref — and the entitlement it grants is live. No orphan, no manual stitch.