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

Wave goodbye to all those subscription infrastructure tasks

Whether you’re integrating subscriptions for the first time or updating old code, with Glassfy it’ll be the last time you have to deal with it.
We take care of verifying permissions, receiving S2S notifications, verifying recipes, subscription status, and corner cases all easily from the platforms you’re used to.
Glassfy.initialize(apiKey:"8NOV6FQBHHRJ4F9N2HV0HUXOQ5LL0QA3")
              
              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)
              return;
              GYSku *sku = offering.skus.firstObject;
              
                  [Glassfy purchaseSku:sku completion:^(GYTransaction *t,NSError *error) {
                      if (t == nil)
                          return;
                      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 ->
                      transaction?.permissions
                          ?.all
                          ?.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);
                              break;
                          }
                      }
                  }
                  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)
                  return;
              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
              }
              
Open source SDK
Simple and transparent documentation
Our SDK is lightweight, open source, and top notch quality. Check it yourself.
Quick start-up and step-to-step integration documentation: Have the full picture and be guided through the whole integration.
Stop worrying about subscription infrastructure, once and for all
Whether you need to integrate subscriptions for the first time or update an old code, let it be the last time you have to deal with it
We take care of verifying permissions, receiving S2S notification, verifying recipes, subscription status, and corner cases
Do you know your Users’ History?
Knowing your users will allow you to build a better app.
Have clear visibility on your users’ behavior and past subscription events. No more guessing and incomplete data.
Create and publish new paywalls in minutes
Corporate: Give your product managers a no-code solution to create and test new paywall autonomously, without wasting time in long meetings
Indie: Creating a new paywall should be easy and quick. With Glassfy you will find new layouts, create new paywalls in minutes, and test them without complexity
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 Book a demo