Your extension is worth more than $0.

A few lines is all it takes to integrate the SDK: premium status, the paywall and Stripe are handled for you. We take 5% per transaction, nothing else.

background.js
import { Ciiti } from '@extmonetize/ciiti';import { EXTMONETIZE_PUBLIC_KEY } from './extmonetize-key.js'; const ciiti = Ciiti.create({  apiKey: 'pk_pub_xyz789',  publicKey: EXTMONETIZE_PUBLIC_KEY,}); // At startup: registers the deviceawait ciiti.init(); // Is this feature unlocked?if (await ciiti.canUse('ai_gen')) {  runAiGeneration();} else {  // 💳 checkout  await ciiti.openCheckout({ planId: 'plan_pro' });}

In short

5%per transaction, that’s it
$0monthly subscription
0server to run
RS256premium status verified offline
Everything you need to sell

The monetization layer, ready to use

Focus on your product. ExtMonetize covers payments, security and measurement.

RS256-signed premium status

Pin the public key: a forged token has no valid signature.

Stripe Connect payments

Money lands in your own Stripe account. Subscriptions and one-off payments, no card data on your side.

Paywall & feature gating

Lock any feature behind canUse(). Entitlements travel inside the token.

Built-in analytics

Conversion, MRR and events, aggregated per extension.

Signed webhooks

HMAC-SHA256 signed, retried five times with exponential backoff.

Lifecycle emails

Receipts, failed-payment reminders, trial-ending notices.

Free trials

Per-user trial period, no card.

Subscription or one-off

Monthly, yearly, or a single payment.

Zero-dependency SDK

A TypeScript module, shipped as ESM and CJS.

No lock-in

Your customers stay in your Stripe.

Multi-device sign-in

One emailed code, and premium follows the user.

Multi-currency

Set the currency plan by plan.

What users see

Three states, no payment form to write

The SDK handles the locked → payment → premium transition. Here is what your user sees.

E My extension

AI generation

This feature is part of the Pro plan.

Upgrade to Pro
1. Locked canUse() returns false — the feature stays inert.
checkout.stripe.com

$4.99 / month

Pro plan$4.99
7-day trial$0
•••• •••• •••• 4242
Start free trial
2. Payment openCheckout() opens Stripe checkout. No form to write.
E My extension
Premium active

AI generation

Unlimited while the subscription is active.

Generate
3. Premium The RS256 token is stored and re-verified offline on every call.
Integration

How it works

1

Register your extension

Create a developer account and register your extension from the dashboard. Grab your publishable key.

2

Set up your plans

Monthly/yearly subscription or one-off payment, free trial, feature gates. All editable on the fly.

3

Drop in the SDK

create(), init(), canUse(), openCheckout() in your service worker — live in 5 minutes.

4

Get paid

Stripe pays out to your account, webhooks notify you, and the dashboard tracks MRR and conversion.

Pricing

No subscription. One number.

5%

per successful transaction, charged when the money comes in.

  • Unlimited extensions and users
  • No subscription, no fixed fee
  • No credit card to sign up
  • Paid straight into your Stripe account
  • You only pay on what you actually earn
Start for free

Stripe’s own fees apply on top, charged directly to your account.

Frequently asked

What people ask before signing up

Do I need to run a server?

No. The SDK talks straight to the ExtMonetize API, which handles user accounts, plans, Stripe checkout and entitlements. You manage no backend and no database.

What stops a user from claiming to be premium?

Premium status is a token signed with RS256 by our server; the private key never leaves it. Pin the public key in your bundle and the SDK verifies the signature locally: a token forged in chrome.storage is rejected, and an attacker would have to re-sign the token AND rebuild your extension. Like any client-side check it raises the bar without being unbreakable — keep access control for genuinely sensitive capabilities (premium API calls) on your server.

Who collects the money?

You do. Through Stripe Connect, payments land in your own Stripe account and Stripe pays you out on your usual schedule. We never hold your funds.

What happens if I stop using ExtMonetize?

Your customers, subscriptions and payment history live in your Stripe account, not ours. You leave with your entire customer base.

Does the SDK work offline?

Yes, provided you pin the public key (config.publicKey) — copy it from the dashboard and ship it in your bundle. The token is then verified locally, with no network round trip. Without a pinned key the SDK refuses to start: set allowUnpinnedKey: true to run online-only on purpose, re-fetching the status from the server on every check.

Which browsers are supported?

Chrome and Chromium browsers on Manifest V3, plus Firefox. The SDK is a TypeScript module with no runtime dependencies, usable in any extension context.

What about VAT and sales tax?

Because payments are collected in your Stripe account, you are the merchant. Collecting and reporting tax is on your account — Stripe Tax can handle it if you enable it.

Give your users a way to pay.

Create your account, register your extension, get paid. No credit card.