Store

Stripe subscriptions with the RevenueCat SDK, on your own Stripe account

To use Stripe subscriptions with the RevenueCat SDK, create a Stripe app in RevenueDot, save a restricted API key and a webhook signing secret from your own Stripe account, and post each new subscription to the receipts endpoint with the customer's app user ID. The customer then has the same entitlements in every app that uses that ID.

Free up to $10,000 a month in tracked revenue. Works with the RevenueCat SDK you already ship.

The Stripe app page in the RevenueDot dashboard showing the webhook URL, its live status and the events to select in Stripe

Your Stripe account

Customers pay you. RevenueDot reads from Stripe and never charges or refunds for tracking.

Webhooks keep it current

Renewals, failed payments, pauses, price changes and refunds come from Stripe-signed events.

One entitlement across stores

Web and app purchases land on the same customer, so pro is active everywhere.

Hosted checkout optional

No checkout of your own? RevenueDot can host one on the same Stripe app.

Setup

How to track Stripe subscriptions with RevenueDot and the RevenueCat SDK

  1. 01

    Create the Stripe app

    Add a Stripe app in RevenueDot. Its public key starts with strp_. Create products with store_identifier set to the Stripe product ID (prod_…), or a price ID (price_…) to sell several prices of one product separately. Start free on Cloud first if you have no account.

  2. 02

    Save a restricted API key

    In the Stripe Dashboard create a restricted key with Read access to Subscriptions, Invoices, Checkout Sessions, Charges, Customers, Products and Prices, and None for everything else. Paste it on the app and click Check credentials. A key without a permission names the one it lacks.

  3. 03

    Add the webhook endpoint

    In Stripe add an endpoint with your notification URL (https://api.revenuedot.app/v1/notifications/stripe/{app_id}) and the subscription, invoice, charge and Checkout events listed in the guide. Paste the endpoint's signing secret (whsec_…) on the app.

  4. 04

    Post each purchase from your backend

    After Stripe confirms a purchase, post its subscription ID or Checkout Session ID with the customer's app user ID to POST /v1/receipts with X-Platform: stripe. Posting the same ID again changes nothing.

  5. 05

    Read the entitlement in your app

    Log in to the RevenueCat SDK with the same app user ID. customerInfo.entitlements now includes the entitlements the Stripe purchase grants.

Backend call

Post a Stripe subscription to RevenueDot

A subscription ID (sub_…) records the subscription. A Checkout Session ID (cs_…) records its subscription or, for a payment-mode session, each line item as a one-time purchase. A 400 means the ID can never succeed. A 5xx means try again later, for example because the first invoice is not paid yet.

Record a subscriptionterminal
curl -X POST "$REVENUEDOT_URL/v1/receipts" \
  -H "Authorization: Bearer strp_…" -H "X-Platform: stripe" -H "Content-Type: application/json" \
  -d '{"app_user_id":"user_123","fetch_token":"sub_1Abc…"}'

How Stripe states map to RevenueDot events

What Stripe reportsEvent
An active subscription with a paid invoiceINITIAL_PURCHASE (TRIAL while trialing)
A new paid invoice for the next periodRENEWAL
cancel_at_period_end, or a future cancel_atCANCELLATION (UNSUBSCRIBE)
past_due: the renewal invoice failedBILLING_ISSUE, with access to the end of the paid period
unpaid, or retries run outEXPIRATION
Another price or product on the subscriptionPRODUCT_CHANGE, with no revenue for a proration invoice
charge.refunded in full for the latest periodCANCELLATION (CUSTOMER_SUPPORT) with a negative transaction

Revenue is what each invoice charged, so coupons show in revenue. Webhooks report store: STRIPE.

Rules

When a Stripe subscription counts, and what is not supported

  • By default a subscription counts once its latest invoice is paid. Set register_on to invoice_created to grant access while the first invoice is still open.
  • Turn on Track new purchases from server-to-server notifications to record purchases RevenueDot first hears about from a webhook. The customer comes from metadata (app_user_id by default), the Stripe customer ID, or an anonymous ID.
  • A test-mode key records sandbox data. Use one Stripe app per Stripe account and mode.
  • Not supported yet: Connect with Stripe (OAuth), subscription schedules, metered and tiered prices, and subscriptions with several items. The purchases-js Web Billing checkout for rcb_ keys is not served either.
  • Test in Stripe test mode before you go live.

Web checkout

No checkout yet? Let RevenueDot host it

With write permissions on the same restricted key, RevenueDot creates the Stripe products and prices, hosts purchase links and funnels, and gives buyers a redemption link that grants access in the app. See web to app and the web billing guide.

FAQ

Stripe: questions people ask

Can I use Stripe subscriptions with the RevenueCat SDK?

Yes, through RevenueDot. Create a Stripe app, save a restricted key and a webhook secret, and post each purchase to the receipts endpoint with an app user ID. The RevenueCat SDK in your app then shows the entitlement for that user, because entitlements belong to the customer and not to one store.

Does RevenueDot charge my Stripe customers?

No. For tracking it only reads from your Stripe account. If you use RevenueDot's hosted checkout, it creates Checkout Sessions in your account with your key, and the money goes to you.

Which Stripe events do I need to send?

customer.subscription.created, updated, deleted, paused and resumed, invoice.paid, invoice.payment_failed and invoice.updated, charge.refunded and checkout.session.completed. Other events are accepted and ignored.

How does RevenueDot know which app user bought on Stripe?

You post the subscription ID with the app user ID. For purchases you did not post, RevenueDot reads the user from Stripe metadata (the key app_user_id by default), from the Stripe customer ID, or uses an anonymous ID.

Does RevenueDot support Stripe test mode?

Yes. A test-mode key or a Stripe sandbox records sandbox data, which stays out of production numbers. Use a separate Stripe app for each mode.

Get started

Run subscriptions without the revenue share.

Start free on RevenueDot Cloud, free up to $10,000 a month in tracked revenue, or move an existing RevenueCat app with one line of code.

Already have an account? Sign in · Prefer your own servers? Self-host free