Salable creates your Stripe Connected Account, handles webhooks, manages entitlements and team access, and gives you hybrid pricing, all in one platform.
Create a Stripe-powered checkout session without touching a single webhook. Salable handles the entire subscription lifecycle for you.
Checkout docs →| 1 | const { data } = await salable.api.checkout.post({ |
| 2 | planId: "plan_01KHN...", |
| 3 | owner: "user_123", |
| 4 | interval: "month", |
| 5 | intervalCount: 1, |
| 6 | currency: "USD", |
| 7 | successUrl: "https://myapp.com/success", |
| 8 | cancelUrl: "https://myapp.com/cancel" |
| 9 | }); |
Stripe only handles the payment. Who gets access, which features they can use and how teams are managed are all on you.
Teams end up shipping a flat-rate pricing model because it's the quickest solution rather than what's best for their business. Salable gives you every pricing model without the engineering cost. Pick what fits your product and ship it.
Design a pricing model that fits your product and your market. Mix flat-rate, per-seat, metered, and one-time charges on a single plan.
Flat monthly base with per-seat scaling.
Low base cost with metered token billing.
Annual licence with seats and onboarding.
Pure pay-as-you-go with a one-time setup.
Base, seats, and transaction metering combined.
Monthly retainer with one-time project fees.
Monthly base plus per-transaction revenue share.
Per-client billing with optional onboarding.
One-time charge with no recurring billing.
Per-plugin billing with a one-time install fee.
Flat monthly base with per-seat scaling.
Low base cost with metered token billing.
Annual licence with seats and onboarding.
Pure pay-as-you-go with a one-time setup.
Base, seats, and transaction metering combined.
Monthly retainer with one-time project fees.
Monthly base plus per-transaction revenue share.
Per-client billing with optional onboarding.
One-time charge with no recurring billing.
Per-plugin billing with a one-time install fee.
Flat monthly base with per-seat scaling.
Low base cost with metered token billing.
Annual licence with seats and onboarding.
Pure pay-as-you-go with a one-time setup.
Base, seats, and transaction metering combined.
Monthly retainer with one-time project fees.
Monthly base plus per-transaction revenue share.
Per-client billing with optional onboarding.
One-time charge with no recurring billing.
Per-plugin billing with a one-time install fee.
Pass a granteeId and an owner and you get back exactly which features that user can access, scoped to whichever organization they're acting as. Switch org and the entitlements change with it, because the same user can belong to multiple organizations with different subscriptions. None of that logic lives in your app.
| 1 | import { Salable } from "@salable/sdk"; |
| 2 | const salable = new Salable("secret-api-key"); |
| 3 | |
| 4 | const { data } = await salable.api.entitlements.check.get({ |
| 5 | queryParameters: { |
| 6 | granteeId: "user_123", |
| 7 | owner: "org_123", |
| 8 | }, |
| 9 | }); |
| 10 | if (data.entitlements.find((e) => e.value === "image_generation")) { |
| 11 | console.log("access granted"); |
| 12 | } |
The same user. Two different organizations. Pass the owner field and Salable scopes the check to that organization. The same granteeId gets different entitlements depending on which organization they're acting as.
Webhooks arrive out of order, repeat by design, and disappear entirely if your handler stays broken past Stripe's three-day webhook retry window. Paying customers lose access while customers who canceled their subscriptions never have their access revoked. Salable solves this out of the box.
Every subscription event is handled, deduplicated, and reconciled, covering upgrades, downgrades, cancellations, failed payments, and retries. Entitlements now stay in sync with billing status without you writing a single handler.
Stripe doesn't have a concept of seats. It knows a payment was made, and that's it. Which users belong to that subscription, what they can access, what happens when someone joins or leaves: none of that exists in Stripe.
Salable assigns users to subscriptions and tracks membership in real time, so adding, removing, or swapping members updates their entitlements instantly without you building any of it.
click a member to toggle access
Secured by Stripe
Salable has a built-in cart system that lets customers bundle your core product, add-ons, and one-off fees into a single Stripe checkout, so there are no separate transactions and no drop-off between purchases.
Anonymous checkout lets users build a cart before they've signed up and attach it to their account at sign-in, removing the friction of requiring an account before someone can commit to a purchase.
Building a bespoke plan normally means a code change and a deploy, so teams never offer it.
With Salable, bespoke plans are a dashboard task. Clone an existing plan, adjust the entitlements and price, send the customer a checkout link. All while you're still on the call.
Procurement needs a purchase order, finance need to manually invoice or a customer requests a trial period on a bespoke plan and does not want to provide their card.
Salable-only subscriptions let you grant immediate access on agreed terms without having to use the Stripe checkout flow.
Start free, scale as you grow. No hidden fees.
Perfect for growing projects.
For established products with real revenue.
For large-scale operations with custom requirements and dedicated support.
*Salable is built on top of Stripe Billing, so their fees (0.7%, and 2.9% + $0.30) still apply.
Public pages to validate current security credentials, documentation, and policies.
Get the hybrid billing your product actually needs, on top of the Stripe account you already have.