Crossdeck University
Watch — one click to connect, one line to attribute Film in production
0:00 / 0:00
Lesson 1 of 4 · Connect your revenue

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.

4 min Dashboard · Web

When you're done: a Stripe purchase lands on the right Crossdeck customer and grants their entitlement.

1 What this is & why it matters

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.

2 How to connect 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:

// 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.

3 How the code works, piece by piece

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.

4 The green result in your dashboard

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.

app.cross-deck.com · customer timeline
stripe sub · attached

user_847's Stripe subscription, matched by crossdeck_ref — and the entitlement it grants is live. No orphan, no manual stitch.

You connected Stripe with one click and stamped crossdeck_ref = getCheckoutReference() onto each Checkout Session — the one line that ties a purchase to the right customer. Skip it and purchases orphan; include it and they match automatically.