Skip to content
Proofline

Guides

Stripe web checkout

If you sell subscriptions on the web with Stripe, the creator’s click ID can travel in the URL to your checkout and be written into Stripe metadata. That makes the purchase a deterministic match (DDeterministic D1). Web revenue carries no app-store fee.

1. Put the Proofline keys in the right metadata

Set the same proofline_* keys the SDKs write to RevenueCat (proofline_end_user_id, proofline_creator_id, proofline_program_id, and the click or code you have):

  • Subscriptions: in subscription metadata, via subscription_data.metadata on the Checkout Session. Stripe copies it to every invoice of the subscription, so renewals carry it too.
  • One-off payments: in the Checkout Session metadata, plus proofline_product_id if you want it on the receipt.
const session = await stripe.checkout.sessions.create({
  mode: 'subscription',
  line_items: [{ price: 'price_…', quantity: 1 }],
  client_reference_id: endUserId, // a UUID here is read as the Proofline end-user id
  subscription_data: {
    metadata: {
      proofline_end_user_id: endUserId,
      proofline_creator_id: creatorId,
      proofline_program_id: programId,
    },
  },
  success_url: 'https://example.com/welcome',
});

2. Send these events to Proofline

invoice.paid, checkout.session.completed, checkout.session.async_payment_succeeded, charge.refunded, customer.subscription.updated and customer.subscription.deleted.

3. Processor fee

Commission is paid on net revenue. Stripe’s fee is taken as 2.9% of the tax-inclusive total by default. A per-app setting for your actual rate is on the way.