Browse the library
Documentation libraryGetting started
Ship to your customers
Once your software has passed the [test list](/docs/before-selling), three jobs remain: get the build to customers, get keys to customers, and help customers when they get stuck. This guide gathers the three, each part pointing to the detailed guide.
3 min read
1. The build
- The build carries your app's API address, App ID and public key. The public key only checks signatures, so embedding it is safe; never embed any secret key.
- Declare the right version (
appVersionor its name in your SDK): the server uses it to block builds that are too old and to announce new ones. - Release through ClavisAUH to get signed builds, download links that expire after 5 minutes, and software that checks for updates itself: Signed releases and updates. You can still release through your own channel.
- Before changing signing keys, release a build that carries both the old and the new key: Signing keys and rotation.
2. Get keys to customers
| Way | Suits | Read more |
|---|---|---|
| Make keys on the dashboard and send them | Few sales, direct sales | Creating and managing licenses |
| Your store calls the Seller API on each order | Online sales, automatic | Selling with the Seller API |
| Resellers make keys with the credit you give them | Sales through partners | Resellers and credit |
Whichever way:
- The full key shows only once, when it is made. ClavisAUH keeps only a hash, so send or save it right away.
- Attach the buyer's email to the license: the buyer can sign in to the customer portal and gets a reminder before it expires.
- For your own systems to learn when a key is activated or about to expire, subscribe to Webhooks.
3. Customers help themselves
Turn on the customer portal for the app: buyers sign in with their email or their key, see their licenses, and remove an old machine themselves under the transfer rules you set (Devices, HWID and transfers). Most "I changed my computer" requests no longer need you.
4. When a customer cannot get in
- Paste the customer's key into search (⌘K or Ctrl K): the dashboard opens that key's license.
- In the detail panel, Recent SDK calls lists the latest calls, refused ones with their reason. Everything is in the Activity log.
- Act on the reason:
| Reason | Usually | You |
|---|---|---|
invalid_credentials | A mistyped key, a key of another app, or one no longer usable on a machine without a seat | Check the key and the app; look at the license's state |
device_limit | The customer changed machines or installed on a second one | Reset devices, or let the customer remove the old machine in the customer portal |
license_expired | It expired | Extend |
license_suspended | You suspended it | Reinstate if it is fine |
update_required | The customer's build is below the minimum version | Send the new build |
network_error, timeout | The customer's network, firewall or proxy | Ask the customer to allow connections to your API address |
The error sentence the customer sees is that code's sentence in the error codes table, so whatever sentence they read to you tells you the code.