API. The entitlement and offer engine.
One call returns everything an account can use, with plans, add-ons, incentives and offers merged into features and limits. Checkout runs through PayPal.
Self-host your own entitlements, access and offers that secure your app and give you the freedom to experiment and grow your revenue.
One call returns everything an account can use, with plans, add-ons, incentives and offers merged into features and limits. Checkout runs through PayPal.
Change plans, limits and offers without a deploy. See usage per account and feature, run cancel flows, and approve what the agent proposes.
Wrap your app in the provider and gate features where they live. Paywalls, checkout and cancel flows read straight from the API, so access matches what each account paid for.
if (user.plan === "pro" || user.plan === "team") {
enableExports();
}
if (user.id === "acme_corp") {
// custom deal, ask Dave
seats = 50;
enableSso();
}
if (promo === "BF24" && Date.now() < BF_END) {
price = 199;
}
// TODO: affiliate bundles???const exports = useEntitlement("exports");
const seats = useEntitlement("seats");
// Plans, custom deals, promos and partner
// bundles all live in the dashboard.Custom plan for AcmeBF24 promo, ends SundayBundle for @sarahbuilds
Plan, offer extras and incentives, merged into one list of features and limits.
{
"plan": "pro",
"offer": "spring_launch",
"entitlements": {
"exports": true,
"seats": { "limit": 10, "used": 4 },
"ai_credits": { "limit": 5000, "used": 4120 }
},
"incentive": { "percent_off": 20, "cycles_left": 2 }
}














Your app at a glance. Accounts by plan, active incentives and 30 days of usage on one page.
Pro plan
Pro features · 1,000 credits
Resource pack
Templates add-on · Instant delivery
Go yearly
2 months free · +2,000 credits
Starter
Core features · 200 credits
When an account runs low on credits, show the next plan up and take payment through PayPal.
Give more instead of discounting. Add credits or seats the moment someone clicks cancel.
Make a bundle for one partner. Buyers from their link are credited to them and get access on their own.
Launch a Black Friday price with an end date. When it passes, the link stops selling and there's no code to clean up.
Put two packages on two links and compare how many buyers check out on each.
The tiers that set a customer's baseline. Every account always sits on one core plan.
One or more plans with their prices, order bumps and extra entitlements, behind one link that checks out with PayPal.
The features and limits a plan unlocks, resolved into one answer your app can check.
Extra features or capacity that snap onto any plan, without minting a new tier.
Discounts, trials and grants applied on top of a plan, for a set time or number of cycles.
Every link carries its own offer, and the server re-checks each price before it reaches PayPal.
import { OfferProvider, Offer } from "offer-sdk/checkout";
export default function Checkout({ searchParams }) {
return (
<OfferProvider appId="app_123" offerId={searchParams.offer}>
<Offer.Headline />
<Offer.IntervalToggle />
<Offer.Plans>{(plan) => <Offer.Plan plan={plan} />}</Offer.Plans>
<Offer.Bumps>{(bump) => <Offer.Bump bump={bump} />}</Offer.Bumps>
<Offer.Summary />
<Offer.Checkout />
</OfferProvider>
);
}