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 ?
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