crxpay

License keys

Sell your extension with keys.

When someone pays, they get a key in their email. They paste it into your extension and it unlocks. You can set how many seats each key covers. You can turn a key off with one click if you need to.

Per-seat
activation
Offline
validation
Instant
revoke
crxpay · activate
Activate your license
Paste your key
XXXX-XXXX-XXXX-XXXX-XXXX
Activate
Your key was emailed on purchase.
Live preview · paste → activate

How it works

From payment to unlocked. You write zero code.

Someone buys your extension. crxpay makes a key, sends it to them, and remembers how many seats it covers. When they paste the key, the SDK checks it on the device first. No trip to your server needed.

Flow · one purchase to active seat
01
They pay
Stripe clears the payment. We get notified.
02
Key is made
A signed key is created and tied to a seat count.
03
Email goes out
We send the key to the buyer. Branded as you.
04
They paste it
The SDK checks the key on the device. No server call.
05
Extension unlocks
Pro features turn on and stay on, even offline.

You control every key

Set seats, expiry, and who can use it.

Three simple toggles cover teams, giveaways, resellers, and refunds. Change them from the dashboard, no new extension build required.

Key settings
Seats per key

Up to 5 people can share the same key.

Expiry

Great for lifetime deals and one-time purchases.

Let users switch devices
Your key will look like this
5 seats, never expires
Who uses keys
  • Team licenses
    One purchase, one key, five people. Perfect for small agencies.
  • Reseller & giveaways
    Bulk generate 100 keys and hand them to a partner or a launch campaign.
  • Beta testers
    Short-lived keys that auto-expire when your beta ends.
  • Offline activation
    The SDK can check a key without internet. Great for workplaces on VPN.

SDK

Three lines of code to accept a key.

The SDK gives you one call to activate, one to check if a user still has a valid seat, and one webhook to revoke a key when you need to. That is all of it.

popup.ts
import { crxpay } from '@crxpay/sdk';

// user pastes their key, you pass it to us
const result = await crxpay.activateKey(inputValue);

if (result.ok) {
  toast('Pro unlocked — enjoy!');
} else {
  toast(result.error); // e.g. "seat limit reached"
}

Why teams pick keys

Fast, offline, and fully in your control.

Real numbers from extensions shipping license keys through crxpay in the last 90 days.

0s
Key delivery to inbox
right after payment clears
0 ms
Offline validation
no server round-trip needed
0+
Keys per bulk export
for resellers and giveaways
0 click
Revoke a key
from the dashboard, any time

Ready to grow?

Our entire suite of features comes standard — and your first $2,500 in tracked revenue is free.