Native App Store and Play Store purchases, no billing webhooks #78

Closed
opened 2026-10-19 03:47:04 -07:00 by westfarn · 2 comments
Owner

Why

Mobile entitlements are granted only when RevenueCat POSTs /monetization/webhooks/revenuecat/. That is a webhook, not a store payment. Web checkout stays on Stripe.

What

  • iOS purchases go through StoreKit. Android purchases go through Play Billing.
  • The signed-in app sends the signed App Store transaction or the Play purchase token to an authenticated confirm endpoint.
  • The backend verifies the transaction with Apple (signed transaction chain) or Google Play Developer API, then writes the same subscription, invoice, and payment rows.
  • Bind a purchase to the signed-in user (appAccountToken / obfuscatedAccountId). Reject a transaction already linked to a different account.
  • Drop the RevenueCat webhook as a way to grant access.
  • Renewals and restores are the app re-confirming the current store entitlement. Access ends when the verified period end passes.
  • Stripe Checkout and the Stripe webhook stay for the website.

Companion

chat_web_app Capacitor shell: replace the RevenueCat purchase call with the native store plugin and POST the result to the confirm endpoint.

## Why Mobile entitlements are granted only when RevenueCat POSTs `/monetization/webhooks/revenuecat/`. That is a webhook, not a store payment. Web checkout stays on Stripe. ## What - iOS purchases go through StoreKit. Android purchases go through Play Billing. - The signed-in app sends the signed App Store transaction or the Play purchase token to an authenticated confirm endpoint. - The backend verifies the transaction with Apple (signed transaction chain) or Google Play Developer API, then writes the same subscription, invoice, and payment rows. - Bind a purchase to the signed-in user (`appAccountToken` / `obfuscatedAccountId`). Reject a transaction already linked to a different account. - Drop the RevenueCat webhook as a way to grant access. - Renewals and restores are the app re-confirming the current store entitlement. Access ends when the verified period end passes. - Stripe Checkout and the Stripe webhook stay for the website. ## Companion `chat_web_app` Capacitor shell: replace the RevenueCat purchase call with the native store plugin and POST the result to the confirm endpoint.
Author
Owner
Backend: https://git.aimloperations.com/ai_ml_operations/chat_backend/pulls/79 Client: https://git.aimloperations.com/ai_ml_operations/chat_web_app/pulls/122
Author
Owner

Closed. The work is on master: backend #79 and chat_web_app #122.

Closed. The work is on master: backend #79 and chat_web_app #122.
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ai_ml_operations/chat_backend#78