# Cryptolens Web API 3 > Web API 3 is the current programmable API for Cryptolens licensing, activation, customer, reseller, and billing-related workflows. Start with Quick Start, Authentication & Authorization, and Versioning, then use the grouped endpoint references below for deeper detail. Markdown mirrors normalize versioned docs to the highest documented `ModelVersion` available at generation time. When applicable, each article states its assumed model version explicitly. ## Overview - [Welcome to Web API 3](https://app.cryptolens.io/docs/api/v3/index.html.md) - Welcome to the documentation of all the method available in Web API 3. This is the latest version of the API. [Web API 2](https://app.cryptolens.io/docs/api/v2/) should no longer be used in new projects. - [Quick Start](https://app.cryptolens.io/docs/api/v3/QuickStart.md) - Cryptolens has a comprehensive API with methods that can be split up into two groups: those that are used 1) **inside your app** and 2) **with third party services (CRM, payments, etc)**. To get you up and running, we... - [Authentication & Authorization](https://app.cryptolens.io/docs/api/v3/Auth.md) - Web API 3 provides a new way of communicating with Cryptolens. Instead of having different access levels (where permission is given on a global level), Web API 3 provides a uniform way of authentication and authorization... - [Versioning](https://app.cryptolens.io/docs/api/v3/Versioning.md) - Methods in the Web API can change over time, however, despite this, it's important that such a change does not break older implementations. In order to be able to do so, Web API 3 uses query string versioning. - [Media Types](https://app.cryptolens.io/docs/api/v3/MediaTypes.md) - By default, Cryptolens Web API returns JSON formatted objects. The the most basic result always contains a **message** and a **result**. In rare cases, only a message is returned, in which case a server error has... ## Key Methods - [Key](https://app.cryptolens.io/docs/api/v3/Key.md) - These are all the methods that can be used to manipulate an existing license key. - [Activate](https://app.cryptolens.io/docs/api/v3/Activate.md) - This method will perform a key activation, similar to [Activate [Web API 2]](https://app.cryptolens.io/docs/api/v2/Activate). In contrast to key validation, key activation is not *read only* since it can change license key data depending on... - [Get Key](https://app.cryptolens.io/docs/api/v3/GetKey.md) - This method will return information about a license key, similar to [Validate [Web API 2]](https://app.cryptolens.io/docs/api/v2/Validate). In contrast to activation, this method (aka Key Validation) will be in *read only* mode. That is, it will... - [Get Keys](https://app.cryptolens.io/docs/api/v3/GetKeys.md) - This method will return a list of keys for a given [product](https://app.cryptolens.io/Feature/Product). Please keep in mind that although each license key will be of the [License Key](https://app.cryptolens.io/docs/api/v3/model/LicenseKey.md) type, the fields related to... - [Create Key](https://app.cryptolens.io/docs/api/v3/CreateKey.md) - This method allows you to create a new license key. The license can either be standalone or associated to a specific customer. It is also possible to add a new customer and associate it with the newly created license... - [Create Trial Key](https://app.cryptolens.io/docs/api/v3/CreateTrialKey.md) - This method creates a license key that is time-limited, [node-locked](https://help.cryptolens.io/licensing-models/node-locked) and with the "Time-Limited" and "Trial" features set to true (which can be set by editing the... - [Deactivate](https://app.cryptolens.io/docs/api/v3/Deactivate.md) - This method will 'undo' a [key activation](https://app.cryptolens.io/docs/api/v3/Activate.md) with a certain machine code. The key should not be blocked, since otherwise this method will throw an error. - [Block Key](https://app.cryptolens.io/docs/api/v3/BlockKey.md) - This method will block a specific license key to ensure that the key cannot be accessible by most of the methods in the Web API ([activation](https://app.cryptolens.io/docs/api/v2/Activate), [validation](https://app.cryptolens.io/docs/api/v2/Validate), [optional... - [Unblock Key](https://app.cryptolens.io/docs/api/v3/UnblockKey.md) - This method will unblock a specific license key to ensure that the key can be accessible by most of the methods in the Web API ([activation](https://app.cryptolens.io/docs/api/v2/Activate), [validation](https://app.cryptolens.io/docs/api/v2/Validate), [optional... - [Extend License](https://app.cryptolens.io/docs/api/v3/ExtendLicense.md) - This method will extend a license by a certain amount of days. If the [key algorithm](https://help.cryptolens.io/web-interface/skgl-vs-skm15) in the product is SKGL, the key string will be changed if necessary.... - [Machine Lock Limit](https://app.cryptolens.io/docs/api/v3/MachineLockLimit.md) - This method will change the *maximum number of machine codes* that a license key can have. - [Change Notes](https://app.cryptolens.io/docs/api/v3/ChangeNotes.md) - This method will change the content of the notes field of a given license key. - [Change Customer](https://app.cryptolens.io/docs/api/v3/ChangeCustomer.md) - This method will change the customer associated with a license. If the customer is not specified (for example, if CustomerId=0) or the customer with the provided ID does not exist, any customer that was previously... - [Change Reseller](https://app.cryptolens.io/docs/api/v3/ChangeReseller.md) - This method will change the reseller of a license. If the reseller is not specified (for example, if ResellerId=0) or the reseller with the provided ID does not exist, any reseller that was previously associated with the... - [Trial Activation](https://app.cryptolens.io/docs/api/v3/TrialActivation.md) - This method allows you to enable [Trial Activation](https://help.cryptolens.io/web-interface/trial-activation) (aka. start count down upon activation) field of a license. Please note that if you do not supply the Enabled... - [Add Feature](https://app.cryptolens.io/docs/api/v3/AddFeature.md) - This method will set a certain feature (F1..F8) to **true**. If the [key algorithm](https://help.cryptolens.io/web-interface/skgl-vs-skm15) in the product is SKGL, the key string will be changed if necessary. Otherwise,... - [Remove Feature](https://app.cryptolens.io/docs/api/v3/RemoveFeature.md) - This method will set a certain feature (F1..F8) to **false**. If the [key algorithm](https://help.cryptolens.io/web-interface/skgl-vs-skm15) in the product is SKGL, the key string will be changed if necessary. Otherwise,... ## License Templates - [License Templates](https://app.cryptolens.io/docs/api/v3/LicenseTemplate.md) - Methods related to [license templates](https://app.cryptolens.io/LicenseTypes). You can read more about them [here](https://help.cryptolens.io/web-interface/license-template). - [Get License Templates](https://app.cryptolens.io/docs/api/v3/GetLicenseTemplates.md) - Returns the list of [license templates](https://app.cryptolens.io/LicenseTypes). A license template allows you to pre-define the parameters that are used when creating a new license. You can read more about them... - [Create Key From Template](https://app.cryptolens.io/docs/api/v3/CreateKeyFromTemplate.md) - This method will create a license key based on a [License Template](https://app.cryptolens.io/LicenseTypes). If you want to see all the defined license templates through the API, this can be accomplished with [Get License... ## Customer Methods - [Customer](https://app.cryptolens.io/docs/api/v3/Customer.md) - Methods that allow you to interact with your customers and their licenses (see [Customer Management](https://app.cryptolens.io/Feature/Customer)). - [Add Customer](https://app.cryptolens.io/docs/api/v3/AddCustomer.md) - This method will add new customer. To remove an existing customer, please see [Remove Customer](https://app.cryptolens.io/docs/api/v3/RemoveCustomer.md). - [Edit Customer](https://app.cryptolens.io/docs/api/v3/EditCustomer.md) - This method will edit an existing customer. It will only change the properties that you specify. - [Get Customers](https://app.cryptolens.io/docs/api/v3/GetCustomers.md) - This method returns the list of customers. By default, it preserves the legacy ordering. If `SortByCreatedDescending=true`, the newest customers will be shown first. - [Get Customer Licenses](https://app.cryptolens.io/docs/api/v3/GetCustomerLicenses.md) - This method will return a list of license keys that belong to a certain customer. - [Remove Customer](https://app.cryptolens.io/docs/api/v3/RemoveCustomer.md) - This method will remove an existing customer given the customerId. To add a new customer, please see [Add Customer](https://app.cryptolens.io/docs/api/v3/AddCustomer.md). ## Data Object Methods - [Data Object Methods](https://app.cryptolens.io/docs/api/v3/Data.md) - These are all the methods that can be used to manipulate a [Data Object](https://app.cryptolens.io/docs/api/v3/DataObjectsIntro.md). - [Data Objects Overview](https://app.cryptolens.io/docs/api/v3/DataObjectsIntro.md) - Imagine that you would like to associate specific information with a license key, such as your **customer's name**, the **OS version**, etc. - [Add Data Object](https://app.cryptolens.io/docs/api/v3/AddDataObject.md) - This method will add a new [Data Object](https://app.cryptolens.io/docs/api/v3/DataObjectsIntro.md) to either a license key, product, or your entire account. Please read more about access tokens in [Remarks](https://app.cryptolens.io/docs/api/v3/AddDataObject.md#remarks). - [List Data Objects](https://app.cryptolens.io/docs/api/v3/ListDataObjects.md) - This method lists either all [Data Object](https://app.cryptolens.io/docs/api/v3/DataObjectsIntro.md) associated with a license key, a product or your entire account, or all of them at once. Please read more about access tokens in... - [Increment Int Value](https://app.cryptolens.io/docs/api/v3/IncrementIntValue.md) - This method will increment the integer value in a [Data Object](https://app.cryptolens.io/docs/api/v3/DataObjectsIntro.md) by a certain constant (non-negative). You can always [decrement](https://app.cryptolens.io/docs/api/v3/DecrementIntValue.md) it. Note, this method does... - [Decrement Int Value](https://app.cryptolens.io/docs/api/v3/DecrementIntValue.md) - This method will decrement the integer value in a [Data Object](https://app.cryptolens.io/docs/api/v3/DataObjectsIntro.md) by a certain constant (non-negative). You can always [increment](https://app.cryptolens.io/docs/api/v3/IncrementIntValue.md) it. Note, this method does... - [Set String Value](https://app.cryptolens.io/docs/api/v3/SetStringValue.md) - This method will assign a new string value to a [Data Object](https://app.cryptolens.io/docs/api/v3/DataObjectsIntro.md). Please read more about access tokens in [Remarks](https://app.cryptolens.io/docs/api/v3/SetStringValue.md#remarks). - [Set Int Value](https://app.cryptolens.io/docs/api/v3/SetIntValue.md) - This method will assign a new integer value to a [Data Object](https://app.cryptolens.io/docs/api/v3/DataObjectsIntro.md). Note, you can also [increment](https://app.cryptolens.io/docs/api/v3/IncrementIntValue.md) or [decrement](https://app.cryptolens.io/docs/api/v3/DecrementIntValue.md) the integer... - [Upload Values](https://app.cryptolens.io/docs/api/v3/UploadValues.md) - This method will extract content from a Cryptolens log (used in offline licensing) and update existing data objects (either by incrementing or decrementing them). To call this method, you either need an "Increment Int... - [Remove Data Object](https://app.cryptolens.io/docs/api/v3/RemoveDataObject.md) - This method will remove an existing [Data Object](https://app.cryptolens.io/docs/api/v3/DataObjectsIntro.md). Please read more about access tokens in [Remarks](https://app.cryptolens.io/docs/api/v3/RemoveDataObject.md#remarks). ## Product Methods - [Product](https://app.cryptolens.io/docs/api/v3/Product.md) - These are all the methods for product related tasks. - [Get Products](https://app.cryptolens.io/docs/api/v3/GetProducts.md) - This method will return the list of [products](https://app.cryptolens.io/docs/api/v3/model/Product.md). ## Auth Methods - [Auth Methods](https://app.cryptolens.io/docs/api/v3/AuthMethods.md) - Methods listed in this category are primarily intended for security features in the [Web API 3](https://app.cryptolens.io/docs/api/v3/index.html.md). - [Key Lock](https://app.cryptolens.io/docs/api/v3/KeyLock.md) - This method will, given a license key, generate a new [access token](https://app.cryptolens.io/docs/api/v3/Auth.md) that is locked to that particular key and return the Id of that key. The scope of the [access token](https://app.cryptolens.io/docs/api/v3/Auth.md) is preserved... - [Get Token (beta)](https://app.cryptolens.io/docs/api/v3/GetToken.md) - Get Token permission allows you to create access tokens on behalf of the authorizing user. This can be used to create plugins or to achieve user login authentication (for licensing). It gives you access to a range of... ## User Methods - [User authentication](https://app.cryptolens.io/docs/api/v3/UserAuth.md) - The idea behind user authentication is to allow you to authenticate users using their credentials (i.e. username and password) to verify their license. You can use their username and password to retrieve their licenses... - [Login](https://app.cryptolens.io/docs/api/v3/Login.md) - This method will return all licenses that belong to the user. This method can be called with an access token that has UserAuthNormal and UserAuthAdmin permission. - [Register](https://app.cryptolens.io/docs/api/v3/Register.md) - This method will register a new user. Please note that calling this method requires a UserAuthAdmin token. - [Associate](https://app.cryptolens.io/docs/api/v3/Associate.md) - Associates a user with a [customer object](https://app.cryptolens.io/docs/api/v3/model/Customer.md). Please note that calling this method requires a UserAuthAdmin token. - [Dissociate](https://app.cryptolens.io/docs/api/v3/Dissociate.md) - Dissociates a user from a customer [customer object](https://app.cryptolens.io/docs/api/v3/model/Customer.md). Please note that calling this method requires a UserAuthAdmin token. - [Get Users](https://app.cryptolens.io/docs/api/v3/GetUsers.md) - List all registered users. Please note that calling this method requires a UserAuthAdmin token. - [Change Password](https://app.cryptolens.io/docs/api/v3/ChangePassword.md) - This method will change the password of a user. It supports 3 modes of operation. With an access token that has UserAuthNormal permission (i.e. without admin permission), the password can either be changed by providing... - [Reset Password Token](https://app.cryptolens.io/docs/api/v3/ResetPasswordToken.md) - This method allows you to retrieve the password reset token that you can use when calling [Change Password](https://app.cryptolens.io/docs/api/v3/ChangePassword.md) method. Please note that calling this method requires a UserAuthAdmin token. - [Remove User](https://app.cryptolens.io/docs/api/v3/RemoveUser.md) - This method removes a user. Please note that calling this method requires a UserAuthAdmin token. ## Analytics Methods - [Analytics](https://app.cryptolens.io/docs/api/v3/AI.md) - These are all the methods that can be used to collect usage information of your application, which is then analysed using Cryptolens AI engine. - [Register Event](https://app.cryptolens.io/docs/api/v3/RegisterEvent.md) - This method will register an event that has occurred in either the client app (eg. start of a certain feature or interaction within a feature) or in a third party provider (eg. a payment has occurred, etc). Events are... - [Get Events](https://app.cryptolens.io/docs/api/v3/GetEvents.md) - This method will retrieve events that were registered using [Register event](https://app.cryptolens.io/docs/api/v3/RegisterEvent.md) method. Events are stored for at least 30 days. Older events may be removed. - [Get Object Log](https://app.cryptolens.io/docs/api/v3/GetObjectLog.md) - This method will retrieve a list of [Object Logs](https://app.cryptolens.io/docs/api/v3/model/ObjectLog.md). These are events that are created when certain object types are added or modified to allow you to track all changes made by you and your... - [Get Web API Log](https://app.cryptolens.io/docs/api/v3/GetWebAPILog.md) - This method will retrieve a list of [Web API Logs](https://app.cryptolens.io/docs/api/v3/model/WebAPILog.md). All events that get logged are related to a change of a license key or data object, eg. when license key gets activated or when a property... ## Message Methods - [Message API](https://app.cryptolens.io/docs/api/v3/Message.md) - These are all the methods for creating and broadcasting messages. You can read more about how they can be used [here](https://help.cryptolens.io/messaging/index). - [Create Message](https://app.cryptolens.io/docs/api/v3/CreateMessage.md) - This method will create a new message (which you can also manage [here](https://app.cryptolens.io/Message)). - [Get Messages](https://app.cryptolens.io/docs/api/v3/GetMessages.md) - This method will return a list of messages that were broadcasted. You can create new messages [here](https://app.cryptolens.io/Message). Messages can be filtered based on the time and the channel. - [Remove Message](https://app.cryptolens.io/docs/api/v3/RemoveMessage.md) - This method will remove a message that was previously broadcasted (which you can also manage [here](https://app.cryptolens.io/Message)). ## Payment Form Methods - [Payment Form](https://app.cryptolens.io/docs/api/v3/PaymentForm.md) - Overview of payment form session methods and related help links. - [Create Session](https://app.cryptolens.io/docs/api/v3/PFCreateSession.md) - This method will create a new session for a [Payment Form](https://app.cryptolens.io/Feature/PaymentForm). It allows you to customize appearance of the form (such as price, heading, etc). You should only create new sessions from a server side... ## Subscription Methods - [Subscription](https://app.cryptolens.io/docs/api/v3/Subscription.md) - These methods are related to the [recurring billing](https://help.cryptolens.io/recurring-payments/index) module. They can all be accessed using an access token with 'Subscription' permission. - [Record Usage](https://app.cryptolens.io/docs/api/v3/RecordUsage.md) - This method records uses [Stripe's metered billing](https://stripe.com/docs/billing/subscriptions/metered-billing) to record usage for a certain subscription. In order to use this mehtod, you need to have set up... ## Reseller Methods - [Reseller](https://app.cryptolens.io/docs/api/v3/Reseller.md) - These are all the methods that can be used to work with reseller objects. All methods require only the "Reseller" permission. Please enable the reseller module on the [billing page](https://app.cryptolens.io/Billing). - [Add Reseller](https://app.cryptolens.io/docs/api/v3/AddReseller.md) - This method will add new reseller. To remove an existing reseller, please see [Remove Reseller](https://app.cryptolens.io/docs/api/v3/RemoveReseller.md). - [Edit Reseller](https://app.cryptolens.io/docs/api/v3/EditReseller.md) - This method will edit an existing reseller. This method will only change the properties that you specify. - [Get Resellers](https://app.cryptolens.io/docs/api/v3/GetResellers.md) - This method will return the list of resellers, with the newest resellers shown first. - [Get Reseller Customers](https://app.cryptolens.io/docs/api/v3/GetResellerCustomers.md) - This method will return a list of customers that belong to a certain reseller. - [Remove Reseller](https://app.cryptolens.io/docs/api/v3/RemoveReseller.md) - This method will remove an existing reseller given the resellerId. To add a new reseller, please see [Add Reseller](https://app.cryptolens.io/docs/api/v3/AddReseller.md). ## Optional - [Activation Data](https://app.cryptolens.io/docs/api/v3/model/ActivationData.md) - A result of an activation performed using activation methods ([Activate [Web API 2]](https://app.cryptolens.io/docs/api/v2/Activate) or [Activate [Web API 3]](https://app.cryptolens.io/docs/api/v3/Activate.md)). - [Anomaly Properties](https://app.cryptolens.io/docs/api/v3/model/AnomalyProperties.md) - Properties related to an anomaly. - [Basic License Key](https://app.cryptolens.io/docs/api/v3/model/BasicLicenseKey.md) - A license key object represents information related to a specific license found inside a [product](https://app.cryptolens.io/Feature/Product). This model is a reduced version of [License Key](https://app.cryptolens.io/docs/api/v3/model/LicenseKey.md). - [Customer](https://app.cryptolens.io/docs/api/v3/model/Customer.md) - A customer object is a representation of a customer that can be found in the [customer panel](https://app.cryptolens.io/Customer). - [Customer (extended)](https://app.cryptolens.io/docs/api/v3/model/CustomerExtended.md) - A customer object is a representation of a customer that can be found in the [customer panel](https://app.cryptolens.io/Customer). - [Data Object](https://app.cryptolens.io/docs/api/v3/model/DataObject.md) - The structure of a [data object](https://app.cryptolens.io/docs/api/v3/DataObjectsIntro.md) aka additional variable. - [Event Object](https://app.cryptolens.io/docs/api/v3/model/EventObject.md) - Reference for the Event Object model. - [Feature Definitions](https://app.cryptolens.io/docs/api/v3/model/FeatureDefinitions.md) - A [feature definition](https://help.cryptolens.io/web-interface/feature-definitions) object. It can be edited on the product page. - [License Key](https://app.cryptolens.io/docs/api/v3/model/LicenseKey.md) - A license key object represents information related to a specific license found inside a [product](https://app.cryptolens.io/Feature/Product). - [License Template](https://app.cryptolens.io/docs/api/v3/model/LicenseTemplate.md) - The [License Template](https://help.cryptolens.io/web-interface/license-template) object. You can also see a list of license templates on the [following page](https://app.cryptolens.io/LicenseTypes). - [Message](https://app.cryptolens.io/docs/api/v3/model/Message.md) - A message object that can be broadcasted to users. You can create new messages [here](https://app.cryptolens.io/Message). - [Metadata](https://app.cryptolens.io/docs/api/v3/model/Metadata.md) - Additional information about each [License Key](https://app.cryptolens.io/docs/api/v3/model/LicenseKey.md). - [Object Log](https://app.cryptolens.io/docs/api/v3/model/ObjectLog.md) - Reference for the Object Log model. - [Product](https://app.cryptolens.io/docs/api/v3/model/Product.md) - A product object is a representation of a product that can be found in the [product panel](https://app.cryptolens.io/Product). - [Reseller](https://app.cryptolens.io/docs/api/v3/model/Reseller.md) - An object that contains information about a reseller. - [User](https://app.cryptolens.io/docs/api/v3/model/User.md) - A user object. - [Web API Log](https://app.cryptolens.io/docs/api/v3/model/WebAPILog.md) - A state code is a 4 digit number that stores information about a request. It allows you to tell whether a certain request was successful or unsuccessful, and in some cases, what kind of action was taken. State codes can...