The CLV1 protocol is now publicRead the spec

Utility 05 / 05

Sell anywhereKeep the keys

Scoped API keys for shops and bots, a reseller desk paid in credit, signed webhooks

Seller APIResell and stay in charge

How it works

  1. 01

    Create an API key

    Pick its scopes, its apps and the IPs allowed to use it

  2. 02

    Connect the shop

    An order calls the API, the key is made in one step

  3. 03

    Invite resellers

    You grant credit, they make keys in a desk of their own

Everything in it

  • Scopes per keyEach key does only what it was given
  • No double salesAn Idempotency-Key keeps one order one sale
  • Clear limits120 requests a minute, 600 on Premium
  • Credit ledgerEvery reseller key is paid from credit and written down
  • Signed webhooksHMAC-SHA256, retried about 15 times over 3 days
  • Full OpenAPIGenerated from the schemas that validate requests

In code

shell
curl -X POST https://<api host>/seller/v1/apps/app_…/licenses \
  -H "Authorization: Bearer $CLAVIS_KEY" \
  -H "Idempotency-Key: order-1042" \
  -H "Content-Type: application/json" \
  -d '{ "policyId": "pol_…", "count": 1, "email": "buyer@example.com" }'
order.ts
const res = await fetch(`${host}/seller/v1/apps/${appId}/licenses`, {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.CLAVIS_KEY}`,
    "Idempotency-Key": "order-1042", // a retry never sells twice
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ policyId, count: 1, email: "buyer@example.com" }),
});
const { data } = await res.json(); // data.keys: shown once
order.py
import os, requests

res = requests.post(
    f"{host}/seller/v1/apps/{app_id}/licenses",
    headers={
        "Authorization": f"Bearer {os.environ['CLAVIS_KEY']}",
        "Idempotency-Key": "order-1042",
    },
    json={"policyId": policy_id, "count": 1, "email": "buyer@example.com"},
)
keys = res.json()["data"]["keys"]

Which plan has it

Basic
2 API keys, 1 webhook
Premium
Resellers, 25 API keys, 50 webhooks
Compare plans

Read more in Protect Hub

Your softwareYour keys

Next utilitySign-in for apps

How can we help?

Frequently asked

What is ClavisAUH?

A licensing and authentication service for desktop software: license keys, device binding, end-user sign-in and signed responses. All run from one dashboard

Why can't a cracker fake your server?

The SDK only trusts answers signed with your app's private key. That key never leaves our servers, so a fake server can't sign and gets rejected

What ends up in my binary?

Your app id and public key. Nothing secret, because each device makes its own key pair on first run

Does it work offline?

Yes. Every plan gets a signed offline token for 7 days, and your app checks it locally. Premium lets you choose how long. A revoked license can keep working offline for that time, unless Online-Only Mode is on

Which languages are supported?

JavaScript and TypeScript today. C++, C# and Python are next, on the same open protocol

Is Basic really free?

Yes. No time limit, no card. Move to Premium when you need more

Get in touch