The first ever step-by-step playbook to building & scaling subscription-based apps 👉 Get your copy

Wave goodbye to all those subscription management tasks

Whether you’re integrating subscriptions for the first time or updating old code, with Glassfy Foundation it’ll be the last time you have to deal with it.
              Glassfy.offerings { (offers, error) in
                guard let offer = offers?["my_offering"],
                  let sku = offer.skus.first else { return }
              Glassfy.purchase(sku: sku) {(t, error) in
                if let permission = t?.permissions["premium"],
                    permission.isValid {
                      // unlock premium
[Glassfy initializeWithAPIKey:@"8NOV6FQBHHRJ4F9N2HV0HUXOQ5LL0QA3" watcherMode:NO];
              [Glassfy offeringsWithCompletion:^(GYOfferings *offers, NSError *err) {
              GYOffering *offering = offers[@"my_offering"];
              if (offering == nil)
              GYSku *sku = offering.skus.firstObject;
                  [Glassfy purchaseSku:sku completion:^(GYTransaction *t,NSError *error) {
                      if (t == nil)
                      GYPermission *p = t.permissions[@"premium"];
                      if (p != nil && p.isValid) {
                          // unlock premium
Glassfy.initialize(this, "8NOV6FQBHHRJ4F9N2HV0HUXOQ5LL0QA3", false, null)
              Glassfy.offerings { offers, error ->
                  val offer = offers?.all?.find {  o -> o.offeringId == "my_offering" }
                  val sku = offer?.skus?.firstOrNull() ?: return@offerings
                  Glassfy.purchase(this, sku) { transaction, err ->
                          ?.find { p -> p.permissionId == "premium" && p.isValid }
                          ?.let {
                              // unlock premium
Glassfy.initialize(this, "8NOV6FQBHHRJ4F9N2HV0HUXOQ5LL0QA3", false, null);
              Glassfy.offerings((offers, error) -> {
                  Sku sku = null;
                  if (offers != null) {
                      for (Offering o : offers.getAll()) {
                          if (o.getOfferingId().equals("my_offering") && o.getSkus().size() > 0) {
                              sku = o.getSkus().get(0);
                  if (sku == null) { return; }
                  Glassfy.purchase(this, sku, (transaction, err) -> {
                      if (transaction != null) {
                          for (Permission p : transaction.getPermissions().getAll()) {
                              if (p.getPermissionId().equals("premium") && p.isValid()) {
                                  // unlock premium
await Glassfy.initialize("8NOV6FQBHHRJ4F9N2HV0HUXOQ5LL0QA3");
              var offerings = await Glassfy.offerings();
              var offering = offerings.all
                ?.singleWhere((offering) => offering.offeringId == "my_offering");
              var sku = offering?.skus?.first;
              if (sku != null) {
              var transaction = await Glassfy.purchaseSku(sku);
              var permission = transaction.permissions?.all
                  ?.singleWhere((permission) => permission.permissionId== "premium");
              if (permission?.isValid==true) {
                // unlock premium
await Glassfy.initialize("8NOV6FQBHHRJ4F9N2HV0HUXOQ5LL0QA3", false);
              const offerings = await Glassfy.offerings();
              const offering = offerings.all.find(
                (off) => off.identifier === "my_offering"
              if (!offering) return;
              const sku = offering.skus[0];
              const transaction = await Glassfy.purchaseSku(sku);
              const permission = transaction.permissions.all.find(
                (p) => p.permissionIdentifier === "premium"
              if (permission?.isValid) {
                // unlock premium
await Glassfy.initialize({
                  apiKey: "8NOV6FQBHHRJ4F9N2HV0HUXOQ5LL0QA3",
                  watcherMode: false
              const offerings = await Glassfy.offerings();
              const offering = offerings.all.
              find((offering) => offering.offeringId == "my_offering");
              if (!offering)
              const sku = offering.skus[0];
              const transaction = await Glassfy.purchaseSku({ sku });
              const permission = transaction.permissions.all.
              find((permission) => permission.permissionId == "premium");
              if (permission?.isValid) {
                  // unlock premium
Stop worrying about subscription infrastructure, once and for all
We take care of verifying permissions, receiving S2S notification, verifying receipts, subscription status, and corner cases.
Sync Your Data Cross-Platform, Automatically
Cross-platform subscription sync on iOS, Android, Stripe and Paddle. Buying a subscription on the web will automatically unlock access on mobile.
Easy Upgrades to Higher Versions
Future-proof your app with Glassfy's automatic upgrades to the latest versions like Google Billing 5.
Glassfy vs In-house and other SDKs
In-houseThird-Party SDKGlassfy Foundation
General CostsMaintenance of server and client1% MTR ($2.5K or more)Free
Cross-platform Subscription Management (iOS, Android, Paddle, Stripe)Complex corner cases1% MTR ($2.5K or more)Free
Support for 3rd Party Frameworks (Flutter, ReactNative, Ionic)Complex maintenance1% MTR ($2.5K or more)Free
Upgrades to Higher Versions (ie. Google Billing 5)Distracting your team from developing your product1% MTR ($2.5K or more)Free
Advanced Analytics & 3rd Party Integrations Distracting your team from developing your product1% MTR ($2.5K or more)Free
Monetization Tools (A/B testing, Remote paywall configuration, Promotional codes)Distracting your team from developing your product1% MTR ($2.5K or more)Free
SupportConstant tech supportEmail onlyLive-chat & Email
Your Data, Your Control
Whether you're looking to switch to our platform or considering moving back to a previous solution, we facilitate a risk-free transition.
Import or export your historical data effortlessly and maintain full ownership and control with our comprehensive REST API.
Gain Real-Time Data Insights
Connect with third-party services like Segment and Mixpanel, utilize webhooks to keep your database fresh and dive into advanced analytics for a comprehensive understanding of your app’s performance in real-time.
Grow Faster with Monetization Tools
Remotely a/b test prices & paywalls and run monetization campaigns with promotional codes, all from the Glassfy dashboard.
Open source SDK
Simple and transparent documentation
Glassfy’s lightweight SDK is completely transparent and free – no hidden costs, no monthly revenue limits, no commissions. Just pure performance without complex in-house backend or maintenance.
Ready to
get started ?
Start in Watcher Mode - partial integration of Glassfy’s SDK - to monitor metrics, see advanced charts, receive subscription events and webhooks, activate triggers, receive reports, and more… Without changing your purchase code and infrastructure!
Build for free