2026-10-12
Changes to usage-limit checksThree changes to how a check compares usage with its limit. They affect only metered and credit entitlements with a finite limit. Boolean, numeric and enum checks, and unlimited entitlements, answer as before.
- ⚠️ Breaking: a metered check without
requestedUsagenow asks for one unit of the limit, so a customer who has reached the limit is denied. Previously it was granted. Credit checks already asked for 1 credit by default and are unchanged.- Note: passing
requestedUsage: 0returns the previous answer.
- Note: passing
- ⚠️ Breaking:
requestedUsageon a metered feature with a unit transformation is now converted into the limit’s units before it’s compared. Previously it was compared as sent. - Changed: usage is compared with the limit at 5-decimal precision, for metered and credit entitlements alike, so
0.1 + 0.2against a limit of0.3is granted.
2026-10-11
- Added:
brandandwalletTypeon the customer’spaymentMethodDetails.brandis the card brand reported by the billing provider, for examplevisa,mastercardoramex.walletTypeis the digital wallet the card was added through, for exampleapple_payorgoogle_pay. Both arenullwhen the billing provider doesn’t report them, so anullwalletTypedoesn’t prove the card is a regular one: cards saved before this field existed have no value.
2026-10-11
- No functional change to the JavaScript SDK. This release only bumped the package version to track releases of other packages in the monorepo.
2026-09-28
- Fixed: a credit-backed feature whose credit entitlement has a soft limit no longer reports
InsufficientCreditswhen the credit balance reaches zero. Access is now granted, matching the credit entitlement itself.
2026-09-23
Check a specific credit amount
- Added: optional
requestedUsageingetCreditEntitlementoptions.hasAccessistrueonly when the remaining balance covers the requested amount. When omitted, the check defaults to 1 credit, as before.
2026-09-17
- Internal improvements to how cached entitlements and usage track when they were last updated. No API change.
2026-09-02
Consistent entitlement fallbacks across the Node and JavaScript SDKsEntitlement fallbacks, misses and offline reads now behave the same way in both SDKs. Reads served from cache are unchanged, field for field — every change below affects a degraded read only: a configured fallback, a miss, a kind mismatch, offline mode, or a failed read.Credit
A spent balance is deliberately not in that list: it comes back as a real entitlement carrying
Unchanged: the typed reads (
getMeteredEntitlement and friends) still treat “not in the subscription” as a real answer and ignore the configured fallback, while getEntitlement / getEntitlementV2 still answer from it.Credit isFallback: telling “no data” from “not entitled”
isFallback on a credit read used to be true on every miss, so the flag never meant what it says. It now means only what the fallback strategy page already documents: the read never reached cached state.Consequence: a customer who simply has no entitlement to a currency now comes back with isFallback: false and a zeroed balance. Code that used isFallback alone to mean “we have no real data” renders that zero as though it were real.The check to migrate to:RequestedUsageExceedingLimit, and its numbers are the ones worth rendering — “0 / 100” and an offer to top up, not “no data”.If you use @stigg/react-sdk’s credit widgets, this is handled for you as of react-sdk 11.0.0 — see the React SDK changelog.2026-07-14
- Added:
AirwallexCheckoutCredentialsto the checkout state’sbillingCredentialsunion, andRECEIVEDto the billing vendor identifiers.
2026-07-14
Credit cost estimation
- Added:
estimateEventCostandestimateUsageCostmethods. They return the credits an event or a usage report would consume, without reporting it.
2026-07-12
- Fixed:
getCreditEntitlementnow defaults to theresourceIdset in the client configuration when none is passed, matchinggetCreditUsage,getCreditBalanceandgetCreditGrants. Previously it read customer-level credit entitlements and returned the fallback for resource-scoped credit subscriptions. An explicitresourceIdstill takes precedence.
2026-06-25
Credit wallet soft limit
- Added:
hasSoftLimitfield onCreditEntitlement. When a credit entitlement is configured as a soft limit,getEntitlement()returnshasAccess: trueandhasSoftLimit: trueeven after the credit balance reaches zero. Hard limit (the default) continues to returnhasAccess: falsewhen the balance is exhausted. Credit-backed features inherit the wallet’s soft-limit so dependent feature reads stay consistent.
2026-06-03
- Added:
pageInfoon thegetCreditUsageresult, for cursor pagination.
2026-06-01
- Security: patched vulnerable transitive dependencies.
2026-04-05
- Changed: entitlement reads now check the customer’s entitlements before the customer-level access-denied reason. Credit entitlements from standalone grants are evaluated normally even when the customer has no active subscription. Feature entitlements without a subscription still return
NoActiveSubscription.
2026-04-01
Breaking changes — aligns entitlement types and evaluation behavior with
@stigg/node-server-sdk:2026-03-19
- Added:
billingCycleAnchorproperty when provisioning and updating subscriptions. AcceptsSubscriptionBillingCycleAnchor.UNCHANGED(default) to keep the existing billing cycle anchor, orSubscriptionBillingCycleAnchor.NOWto reset it to the current timestamp.
2026-03-17
- Deprecated:
getCreditBalance()(please usegetCreditEntitlement()instead).getCreditEntitlement()reads directly from the SDK’s local cache, significantly reducing latency and removing rate-limit concerns. It returns the same data:currentBalance,totalConsumed,totalGranted, andcurrency.
2026-03-17
- Added:
getCreditEntitlement()method for low-latency retrieval of customer credit balance. - Added: Support for provisioning subscriptions with variable recurring credit grant entitlements.
2026-03-10
- Fixed: importing the SDK during Node.js server-side rendering no longer crashes on a bare
window.FormDatareference.
2026-03-10
- Fixed: the ESM bundle no longer drops some exports.
2026-02-24
- The SDK is now published from the
stiggio/stigg-sdkmonorepo to the public npm registry. No API change.
2026-02-26
- Enhanced
getCreditEntitlementto return currency information.
2026-02-23
- Added:
entitlementsV2onCustomerPortal, returning both feature and credit entitlements. - ⚠️ Deprecated:
CustomerPortal.entitlements(useentitlementsV2instead).
2026-02-16
- Added: credit entitlements on paywall plans and add-ons.
PackageEntitlementis now a union of feature and credit entitlements, and add-ons exposepackageEntitlements. - ⚠️ Deprecated: the legacy
entitlementsfields on paywall plans and add-ons.
2026-02-15
- Added:
usagePeriodEndonCreditEntitlement.
2025-12-22
- Added:
taxIdson subscription billing information, and the full billing information is now passed through on preview and estimate calls, to support checkout with a tax ID.
2026-01-24
- Added: Support for configuring and managing credit auto-recharge settings, including trigger balance, target top-up amount, and monthly spend limit.
2025-12-07
- Added support for subscriptions filter by resourceId and plan (planId/displayName).
2025-11-12
- Changed: entitlements are loaded with the entitlements-state query, which also returns the customer-level access-denied reason.
2025-11-10
- Added:
maxQuantityonAddon.
2025-10-26
- Added:
showWidgetWatermarkon paywall and checkout data, read from the SDK configuration.
2025-09-25
- Added:
creditRateon paywall prices.
2025-09-21
- Added:
getCreditUsagemethod.
2025-09-17
- Added:
getCreditLedgermethod.
2025-09-15
- Added: an ESM build of the SDK.
2025-09-09
- Updated SDK to prevent dependency on compromised NPM packages
2025-09-07
- Fixed: credit queries are no longer served from the GraphQL client cache, so balances and grants are always current.
2025-09-04
- Added:
createPaymentSessionmethod.
2025-09-04
- Changed:
getCreditBalancenow takes the customer and resource from the client configuration, so its input is optional.
2025-08-28
Credits
- Added:
getCreditBalanceandgetCreditGrantsmethods.
2025-09-01
- Added:
AccessDeniedReason.Revokedfor determining when an entitlement has been explicitly revoked.
2025-08-15
- ⚠️ Changed: the
prorationBehaviortype onSubscriptionBillingInfois nowSubscriptionProrationBehavior.
2025-08-13
- Added:
prorationBehavioronSubscriptionBillingInfo.
2025-07-30
- Added:
enumValueson package entitlements.
2025-07-24
- Removed: entitlement check reporting from the SDK. Entitlement checks no longer send tracking requests to Stigg.
2025-07-21
- Added:
getEnumEntitlementmethod for enum features, with optionalrequestedValues.
2025-06-30
- Added:
hiddenFromWidgetson add-on entitlements.
2025-06-26
- Added:
getSubscriptionsendpoint that allows retrieving all of customers’ subscriptions
2025-05-15
- Added:
previewNextInvoicemethod, to preview a subscription’s next invoice.
2025-04-01
- Added: optional
integrationIdon subscription billing information, to target a specific billing integration.
2025-02-19
- Added: ability to determine the number of attempts that were made to collect payment for a generated invoice when Stigg is integrated with Stripe using the
latestInvoice.attemptCountproperty of thegetActiveSubscriptions()andgetSubscription()endpoints
2025-01-12
- Added: support for offline mode
2024-12-17
- Added:
GetUsageHistoryV2 - ⚠️ Deprecated:
GetUsageHistory(please useGetUsageHistoryV2instead) - Changed:
- Input Object:
customerRefIdrenamed tocustomerIdresourceRefIdrenamed toresourceIdfeatureRefIdrenamed tofeatureIdresetPeriodremovedyearlyResetPeriodConfigurationremovedmonthlyResetPeriodConfigurationremovedweeklyResetPeriodConfigurationremoved
- Output Object
startDateremovedendDateremovedusageMeasurements[i].daterenamed toseries[0].point[i].timestampusageMeasurements[i].valuerenamed toseries[0].point[i].valueusageMeasurements[i].isResetPointrenamed toseries[0].point[i].isResetPoint- Old Value:
trueif and only if usage was reset due to periodic reset. - New Value:
trueif and only if usage was reset due to periodic reset or due to a plan transition.
- Old Value:
groups[i].groupInfo[j].keyrenamed toseries[i].tags[j].keygroups[i].groupInfo[j].valuerenamed toseries[i].tags[j].valuegroups[i].usageMeasurements[j].daterenamed toseries[i].point[j].timestampgroups[i].usageMeasurements[j].valuerenamed toseries[i].point[j].valuegroups[i].usageMeasurements[j].isResetPointrenamed toseries[i].point[j].isResetPoint- Old Value:
trueif and only if usage was reset due to periodic reset. - New Value:
trueif and only if usage was reset due to periodic reset or due to a plan transition.
- Old Value:
- Input Object:
2024-12-08
- Added: ability to override prices when there’s a scheduled update in place
2024-11-21
- Added: support for price localization in fixed fee coupons
2024-10-14
- Added: ability to estimate the subscription cost when the payment of the subscription is delegated to a different customer using:
PreviewSubscription.payingCustomerIdEstimateSubscription.payingCustomerIdEstimateSubscriptionUpdate.payingCustomerId
2024-10-08
- Added: ability to more easily determine the usage period of metered entitlements using:
MeteredEntitlement.usagePeriodStartMeteredEntitlement.usagePeriodEnd
- 🛑 Removed:
MeteredEntitlement.nextResetDate
2024-09-19
- Fixed: the entitlements cache TTL is now measured from the last fetch rather than from the date entitlements last changed. Entitlements that haven’t changed recently are no longer refetched on every read.
2024-09-19
- Improved: reading an entitlement for a feature the customer isn’t entitled to no longer triggers a refetch.
2024-09-02
- Added:
payingCustomerIdon subscription previews and estimates, andpayingCustomeron subscriptions, for subscriptions paid by a different customer.
2024-08-25
- Added:
budget.limiton a paywall plan’sdefaultTrialConfig.
2024-07-15
- Added: budget cap support. Metered entitlement checks return
hasAccess: falsewithAccessDeniedReason.BudgetExceededwhen the customer’s budget is exhausted.
2024-06-20
- Added: ability to get the list of active subscriptions from Edge using
getActiveSubscriptionsList()
2024-06-20
- Added: ability to get the details of a specific subscription using
getSubscription()