Welcome to the Freemius API Documentation!
You can use our API to access Freemius API endpoints, which can get information on various aspects of Freemius.
If you're using Freemius for a WordPress product, please check out our official SDK.
Freemius API supports Bearer Token authentication for product-specific operations.
To retrieve your API token:
Use this token by including it in the Authorization
header of your API requests:
Authorization: Bearer {api_token}
Bearer tokens are scoped to a specific product. This means they can only be used with endpoints under the /products/{product_id}/
namespace. For example:
GET /products/12345/users.json
Authorization Bearer {api_token}
Requests to endpoints outside the product scope will result in an authorization error.
The Freemius API is organized around different scopes, based on the top-level entity of the operation:
For example, let's say you want to list all payments of a product. This operation can be done in several scopes:
/products/{product_id}/payments.json
./developers/{developer_id}/products/{product_id}/payments.json
.On the other hand, if a user would want to list their payment, then endpoint will be scoped to the user:
/users/{user_id}/payments.json
.Some operations can be done from a particular scope only. For example only a developer can update a plan of a product or create a new plan. So the following operations will work:
/developers/{developer_id}/products/{product_id}/plans/{plan_id}.json
/developers/{developer_id}/products/{product_id}/plans.json
If you try to perform the same operation on a product scope, it will return an error. The scopes provides a way to control access and permissions for different entities in the Freemius ecosystem.
Currently, Bearer Token authentication is supported for product scope only. If you need access to endpoints in others scopes, use the secret-key based authentication with the following SDKs:
For most use cases, managing your products, licenses, and customers through the Developer Dashboard or Customer Portal provides all the necessary capabilities.
https://api.freemius.com/v1/
https://docs.freemius.com/_mock/api/
https://api.freemius.com/v1/products/{product_id}/installs/{install_id}/licenses/{license_id}/subscriptions.json
https://docs.freemius.com/_mock/api/products/{product_id}/installs/{install_id}/licenses/{license_id}/subscriptions.json
curl -i -X GET \
'https://api.freemius.com/v1/products/1234/installs/1234/licenses/1234/subscriptions.json?count=10&fields=id%2Cname%2Cslug&offset=10' \
-H 'Authorization: Bearer <YOUR_AccessToken_HERE>'
{ "subscriptions": [ { … } ] }
Activate a license and if needed, create an install with the given properties.
No Authorization header is required. If the provided license doesn't have an associated user, the endpoint will require the
first_name
,last_name
, anduser_email
parameters to create a new user and associate it with the license.
Unique identifier of the caller. The UID must be same when pinging and when activating or deactivating a license. The generation of the UID is a responsibility of the client.
The license key. This is used for activating the license on the user's site.
Whether or not the user has given their consent for marketing materials. A null
value indicates that the user has not made a decision yet.
Install ID when activating on an already existing install. If provided must belong to the same user as the license owner and must have the same UID. The new license will be activated for the install and existing one will be deactivated.
https://api.freemius.com/v1/products/{product_id}/licenses/activate.json
https://docs.freemius.com/_mock/api/products/{product_id}/licenses/activate.json
curl -i -X POST \
https://api.freemius.com/v1/products/1234/licenses/activate.json \
-H 'Content-Type: application/json' \
-d '{
"uid": "7W131pej6bJYV8WYM9KgGoBNB9bCiSrY",
"license_key": "sk_123FGqM456Pa786WtOp%^+67Y+;sXXz"
}'
License activated successfully.
The secret key associated with the entity for authorization.
The public key associated with the entity for authorization.
The name of the plan. Only lowercase characters allowed.
Whether or not the user has given their consent for marketing materials. A null
value indicates that the user has not made a decision yet.
The secret key associated with the entity for authorization.
The public key associated with the entity for authorization.
The API access token with which authenticated requests can be made for this install
entity. You need to set this token as the Bearer
token in the Authorization
header. For example:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
{ "user_id": "123456", "user_secret_key": "sk_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6", "user_public_key": "pk_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6", "plugin_id": "123456", "license_plan_name": "professional", "is_marketing_allowed": true, "install_id": "123456", "install_secret_key": "sk_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6", "install_public_key": "pk_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6", "install_api_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9" }
The quota to use. Can be a number or the string 'unlimited'.
The quota to use. Can be a number or the string 'unlimited'.
The quota to use. Can be a number or the string 'unlimited'.
Whether to update the payment method. If true, the link will be generated for the current plan and billing cycle of the license and other parameters will be ignored. If the license is not associated with a subscription, or is lifetime, an exception will be thrown.
https://api.freemius.com/v1/products/{product_id}/licenses/{license_id}/checkout/link.json
https://docs.freemius.com/_mock/api/products/{product_id}/licenses/{license_id}/checkout/link.json
curl -i -X POST \
https://api.freemius.com/v1/products/1234/licenses/1234/checkout/link.json \
-H 'Authorization: Bearer <YOUR_AccessToken_HERE>' \
-H 'Content-Type: application/json' \
-d '{}'
Upgrade link generated successfully.
The settings used to generate the link. This can be fed as-is to the Freemius Checkout JS SDK if you're using modals in your website.
{ "url": "http://example.com", "settings": { "plugin_id": 1, "plan_id": 2, "licenses": "unlimited" }, "expires": "2019-08-24T14:15:22Z" }
Unique identifier of the caller. The UID must be same when pinging and when activating or deactivating a license. The generation of the UID is a responsibility of the client.
Install ID from which the license should be deactivated. The license must be active on the install.
https://api.freemius.com/v1/products/{product_id}/licenses/deactivate.json
https://docs.freemius.com/_mock/api/products/{product_id}/licenses/deactivate.json
curl -i -X POST \
'https://api.freemius.com/v1/products/1234/licenses/deactivate.json?fields=id%2Cname%2Cslug' \
-H 'Content-Type: application/json' \
-d '{
"uid": "7W131pej6bJYV8WYM9KgGoBNB9bCiSrY",
"install_id": 0,
"license_key": "sk_123FGqM456Pa786WtOp%^+67Y+;sXXz"
}'
License deactivated.
The secret key associated with the entity for authorization.
The public key associated with the entity for authorization.
The date and time the entity was created, under UTC timezone.
The date and time the entity was updated, under UTC timezone. If null
then the entity was never updated since its creation.
The ID of the plan associated with the product that the install has a license activation. If null
it means the install is using the free plan.
The ID of the license associated with the entity.
The ID of the trial license associated to the product. If this is not a trial, this will be null
.
The product trial license expiry date. If this is not a trial, this will be null.
The ID of the subscription associated with the entity.
The gross amount the install has spent on the product. This includes one time purchase, or subscriptions and renewals.
The ISO 3166-1 alpha 2 two-letter country code associated with the entity.
The Freemius SDK version. Only relevant for WordPress products using the Freemius WP SDK.
The programming language version (e.g PHP version).
The source of the migration data. To get support migrating from other platform please see our documentation.
0
- Freemius1
- Other2
- Easy Digital Downloads (EDD)3
- WooCommerce (WC)4
- Rating Widget5
- Gumroad6
- CodeCanyon7
- ThemeForest8
- AppSumo9
- SendOwl10
- WHMCS11
- Lemon SqueezyTime when the product was upgraded to the current version. If never upgraded since the initial installation, this will be null
.
The last time the product was used on the site.
{ "secret_key": "sk_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6", "public_key": "pk_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6", "id": "123456", "created": "2025-01-01 00:00:00", "updated": "2025-01-01 00:00:00", "site_id": 1234, "plugin_id": "123456", "user_id": "123456", "url": "https://example.com", "title": "Catwalk Designs", "version": "1.0.0", "plan_id": "1234", "license_id": "123456", "trial_plan_id": "1234", "trial_ends": "2025-01-01 00:00:00", "subscription_id": "123456", "gross": 100, "country_code": "us", "language": "en-GB", "platform_version": "1.0.0", "sdk_version": "1.2.2", "programming_language_version": "5.6", "is_active": true, "is_disconnected": true, "is_premium": true, "is_uninstalled": true, "is_locked": true, "source": 0, "upgraded": "2025-01-01 00:00:00", "last_seen_at": "2025-01-01 00:00:00", "last_served_update_version": "1.2.2" }
https://api.freemius.com/v1/products/{product_id}/licenses/{license_id}.json
https://docs.freemius.com/_mock/api/products/{product_id}/licenses/{license_id}.json
curl -i -X GET \
'https://api.freemius.com/v1/products/1234/licenses/1234.json?fields=id%2Cname%2Cslug' \
-H 'Authorization: Bearer <YOUR_AccessToken_HERE>'
The retrieved license.
The date and time the entity was created, under UTC timezone.
The date and time the entity was updated, under UTC timezone. If null
then the entity was never updated since its creation.
The ID of the user the entity belongs to. If NULL then still not associated to any user.
The ID of the pricing associated with the entity.
The maximum number of license activations. If null
then the license will support unlimited activations.
The total number of production activation the license has. This does not count local or staging environment activations.
The number of times the license is activated on local or staging environments.
The expiration date of the license. If null
then it's a lifetime license.
The license key. This is used for activating the license on the user's site.
Whether the license offers unlimited local or staging environment activations.
Whether to block features after expiration of the license. If set to false
, this would not block features, would only block updates.
Guide the Freemius WP SDK when the product should be running in a white-label mode.
The environment the entity belongs to. 0 means it belongs to the production environment, 1 means it belongs to the sandbox environment.
The source of the migration data. To get support migrating from other platform please see our documentation.
0
- Freemius1
- Other2
- Easy Digital Downloads (EDD)3
- WooCommerce (WC)4
- Rating Widget5
- Gumroad6
- CodeCanyon7
- ThemeForest8
- AppSumo9
- SendOwl10
- WHMCS11
- Lemon Squeezy{ "id": "123456", "created": "2025-01-01 00:00:00", "updated": "2025-01-01 00:00:00", "plugin_id": "123456", "user_id": "123456", "plan_id": "123456", "pricing_id": "123456", "quota": 10, "activated": 1, "activated_local": 1, "expiration": "2025-12-31 23:59:59", "secret_key": "sk_123FGqM456Pa786WtOp%^+67Y+;sXXz", "is_free_localhost": true, "is_block_features": true, "is_cancelled": true, "is_whitelabeled": true, "environment": 0, "source": 0 }
The maximum number of license activations. If null
then the license will support unlimited activations.
The expiration date of the license. If null
then it's a lifetime license.
Whether to block features after expiration of the license. If set to false
, this would not block features, would only block updates.
Guide the Freemius WP SDK when the product should be running in a white-label mode.
Whether the license offers unlimited local or staging environment activations.
The ID of the user the entity belongs to. If NULL then still not associated to any user.
https://api.freemius.com/v1/products/{product_id}/licenses/{license_id}.json
https://docs.freemius.com/_mock/api/products/{product_id}/licenses/{license_id}.json
curl -i -X PUT \
'https://api.freemius.com/v1/products/1234/licenses/1234.json?fields=id%2Cname%2Cslug' \
-H 'Authorization: Bearer <YOUR_AccessToken_HERE>' \
-H 'Content-Type: application/json' \
-d '{}'
The updated license.
The date and time the entity was created, under UTC timezone.
The date and time the entity was updated, under UTC timezone. If null
then the entity was never updated since its creation.
The ID of the user the entity belongs to. If NULL then still not associated to any user.
The ID of the pricing associated with the entity.
The maximum number of license activations. If null
then the license will support unlimited activations.
The total number of production activation the license has. This does not count local or staging environment activations.
The number of times the license is activated on local or staging environments.
The expiration date of the license. If null
then it's a lifetime license.
The license key. This is used for activating the license on the user's site.
Whether the license offers unlimited local or staging environment activations.
Whether to block features after expiration of the license. If set to false
, this would not block features, would only block updates.
Guide the Freemius WP SDK when the product should be running in a white-label mode.
The environment the entity belongs to. 0 means it belongs to the production environment, 1 means it belongs to the sandbox environment.
The source of the migration data. To get support migrating from other platform please see our documentation.
0
- Freemius1
- Other2
- Easy Digital Downloads (EDD)3
- WooCommerce (WC)4
- Rating Widget5
- Gumroad6
- CodeCanyon7
- ThemeForest8
- AppSumo9
- SendOwl10
- WHMCS11
- Lemon Squeezy{ "id": "123456", "created": "2025-01-01 00:00:00", "updated": "2025-01-01 00:00:00", "plugin_id": "123456", "user_id": "123456", "plan_id": "123456", "pricing_id": "123456", "quota": 10, "activated": 1, "activated_local": 1, "expiration": "2025-12-31 23:59:59", "secret_key": "sk_123FGqM456Pa786WtOp%^+67Y+;sXXz", "is_free_localhost": true, "is_block_features": true, "is_cancelled": true, "is_whitelabeled": true, "environment": 0, "source": 0 }
https://api.freemius.com/v1/products/{product_id}/licenses/{license_id}.json
https://docs.freemius.com/_mock/api/products/{product_id}/licenses/{license_id}.json
curl -i -X DELETE \
'https://api.freemius.com/v1/products/1234/licenses/1234.json?delete=true&fields=id%2Cname%2Cslug&include_bundle=true' \
-H 'Authorization: Bearer <YOUR_AccessToken_HERE>'
No content
Filter licenses by status.
If true
, returns the associated user information.
The number of records to skip before starting to return records. Default is 0.
Comma separated list of fields to return in the response. If not specified, all fields are returned.
https://api.freemius.com/v1/products/{product_id}/licenses.json
https://docs.freemius.com/_mock/api/products/{product_id}/licenses.json
curl -i -X GET \
'https://api.freemius.com/v1/products/1234/licenses.json?count=10&enriched=true&fields=id%2Cname%2Cslug&filter=active&offset=10&plan_id=123&search=123&source=123' \
-H 'Authorization: Bearer <YOUR_AccessToken_HERE>'
{ "licenses": [ { … } ] }
The license key. This is used for activating the license on the user's site.
https://api.freemius.com/v1/products/{product_id}/licenses.json
https://docs.freemius.com/_mock/api/products/{product_id}/licenses.json
curl -i -X PUT \
'https://api.freemius.com/v1/products/1234/licenses.json?fields=id%2Cname%2Cslug' \
-H 'Authorization: Bearer <YOUR_AccessToken_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"email": "foo@example.com",
"license_key": "sk_123FGqM456Pa786WtOp%^+67Y+;sXXz"
}'
The license is assigned.
The date and time the entity was created, under UTC timezone.
The date and time the entity was updated, under UTC timezone. If null
then the entity was never updated since its creation.
The ID of the user the entity belongs to. If NULL then still not associated to any user.
The ID of the pricing associated with the entity.
The maximum number of license activations. If null
then the license will support unlimited activations.
The total number of production activation the license has. This does not count local or staging environment activations.
The number of times the license is activated on local or staging environments.
The expiration date of the license. If null
then it's a lifetime license.
The license key. This is used for activating the license on the user's site.
Whether the license offers unlimited local or staging environment activations.
Whether to block features after expiration of the license. If set to false
, this would not block features, would only block updates.
Guide the Freemius WP SDK when the product should be running in a white-label mode.
The environment the entity belongs to. 0 means it belongs to the production environment, 1 means it belongs to the sandbox environment.
The source of the migration data. To get support migrating from other platform please see our documentation.
0
- Freemius1
- Other2
- Easy Digital Downloads (EDD)3
- WooCommerce (WC)4
- Rating Widget5
- Gumroad6
- CodeCanyon7
- ThemeForest8
- AppSumo9
- SendOwl10
- WHMCS11
- Lemon Squeezy{ "id": "123456", "created": "2025-01-01 00:00:00", "updated": "2025-01-01 00:00:00", "plugin_id": "123456", "user_id": "123456", "plan_id": "123456", "pricing_id": "123456", "quota": 10, "activated": 1, "activated_local": 1, "expiration": "2025-12-31 23:59:59", "secret_key": "sk_123FGqM456Pa786WtOp%^+67Y+;sXXz", "is_free_localhost": true, "is_block_features": true, "is_cancelled": true, "is_whitelabeled": true, "environment": 0, "source": 0 }
https://api.freemius.com/v1/products/{product_id}/licenses/{license_id}/installs.json
https://docs.freemius.com/_mock/api/products/{product_id}/licenses/{license_id}/installs.json
curl -i -X DELETE \
'https://api.freemius.com/v1/products/1234/licenses/1234/installs.json?fields=id%2Cname%2Cslug' \
-H 'Authorization: Bearer <YOUR_AccessToken_HERE>'
Licenses deactivated from all installs.
The date and time the entity was created, under UTC timezone.
The date and time the entity was updated, under UTC timezone. If null
then the entity was never updated since its creation.
The ID of the user the entity belongs to. If NULL then still not associated to any user.
The ID of the pricing associated with the entity.
The maximum number of license activations. If null
then the license will support unlimited activations.
The total number of production activation the license has. This does not count local or staging environment activations.
The number of times the license is activated on local or staging environments.
The expiration date of the license. If null
then it's a lifetime license.
The license key. This is used for activating the license on the user's site.
Whether the license offers unlimited local or staging environment activations.
Whether to block features after expiration of the license. If set to false
, this would not block features, would only block updates.
Guide the Freemius WP SDK when the product should be running in a white-label mode.
The environment the entity belongs to. 0 means it belongs to the production environment, 1 means it belongs to the sandbox environment.
The source of the migration data. To get support migrating from other platform please see our documentation.
0
- Freemius1
- Other2
- Easy Digital Downloads (EDD)3
- WooCommerce (WC)4
- Rating Widget5
- Gumroad6
- CodeCanyon7
- ThemeForest8
- AppSumo9
- SendOwl10
- WHMCS11
- Lemon Squeezy{ "id": "123456", "created": "2025-01-01 00:00:00", "updated": "2025-01-01 00:00:00", "plugin_id": "123456", "user_id": "123456", "plan_id": "123456", "pricing_id": "123456", "quota": 10, "activated": 1, "activated_local": 1, "expiration": "2025-12-31 23:59:59", "secret_key": "sk_123FGqM456Pa786WtOp%^+67Y+;sXXz", "is_free_localhost": true, "is_block_features": true, "is_cancelled": true, "is_whitelabeled": true, "environment": 0, "source": 0 }
https://api.freemius.com/v1/products/{product_id}/licenses/{license_id}/renewals.json
https://docs.freemius.com/_mock/api/products/{product_id}/licenses/{license_id}/renewals.json
curl -i -X POST \
https://api.freemius.com/v1/products/1234/licenses/1234/renewals.json \
-H 'Authorization: Bearer <YOUR_AccessToken_HERE>'
{ "sent": true }
https://api.freemius.com/v1/products/{product_id}/licenses/resend.json
https://docs.freemius.com/_mock/api/products/{product_id}/licenses/resend.json
curl -i -X POST \
https://api.freemius.com/v1/products/1234/licenses/resend.json \
-H 'Authorization: Bearer <YOUR_AccessToken_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"email": "johndoe@example.com"
}'
https://api.freemius.com/v1/products/{product_id}/licenses/{license_id}/resend.json
https://docs.freemius.com/_mock/api/products/{product_id}/licenses/{license_id}/resend.json
curl -i -X POST \
https://api.freemius.com/v1/products/1234/licenses/1234/resend.json \
-H 'Authorization: Bearer <YOUR_AccessToken_HERE>'
https://api.freemius.com/v1/products/{product_id}/users/{user_id}/licenses/{license_id}/review_url.json
https://docs.freemius.com/_mock/api/products/{product_id}/users/{user_id}/licenses/{license_id}/review_url.json
curl -i -X GET \
https://api.freemius.com/v1/products/1234/users/1234/licenses/1234/review_url.json \
-H 'Authorization: Bearer <YOUR_AccessToken_HERE>'
Data needed to create a review with an optional picture. When sending multipart/form-data
the data
property must be a JSON object with same structure as the JSON payload.
Reviewer's profile picture. A maximum of 200KB in size and 300px width and 300px height is allowed.
https://api.freemius.com/v1/products/{product_id}/users/{user_id}/licenses/{license_id}/reviews.json
https://docs.freemius.com/_mock/api/products/{product_id}/users/{user_id}/licenses/{license_id}/reviews.json
curl -i -X POST \
'https://api.freemius.com/v1/products/1234/users/1234/licenses/1234/reviews.json?fields=id%2Cname%2Cslug' \
-H 'Authorization: Bearer <YOUR_AccessToken_HERE>' \
-H 'Content-Type: multipart/form-data' \
-F picture=string \
-F 'data={"name":"My Product"}'
The created review.
The date and time the entity was created, under UTC timezone.
The date and time the entity was updated, under UTC timezone. If null
then the entity was never updated since its creation.
The ID of the user the entity belongs to. If NULL then still not associated to any user.
The content of the review.
The icon of the entity, must be a valid JPG, PNG or GIF image, with dimension not exceeding 300px by 300px. Max allowed size is 200KB
{ "id": "123456", "created": "2025-01-01 00:00:00", "updated": "2025-01-01 00:00:00", "plugin_id": "123456", "external_id": "string", "user_id": "123456", "rate": 80, "title": "Great plugin! It works perfectly.", "text": "I love this plugin! It has all the features I need and more. The support team is also very responsive and helpful. Highly recommend!", "name": "John Doe", "job_title": "Software Engineer", "company": "Example Software Inc.", "company_url": "https://www.example.com", "picture": "string", "profile_url": "https://example.com/profile", "license_id": "123456", "is_verified": true, "is_featured": false }