Freemius API (1.0)

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.

  • Manage products.
  • Manage license verifications.
  • Create custom integration with your SaaS.

If you're using Freemius for a WordPress product, please check out our official SDK.

Bearer Token Auth

Freemius API supports Bearer Token authentication for product-specific operations.

To retrieve your API token:

  1. Go to the Freemius Developer Dashboard.
  2. Open the Settings page of the relevant product.
  3. Click on the API Token tab.
  4. Copy the API Bearer Authorization Token from the UI.

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.

Other Scopes and Authentication

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:

  • Product Scope: /products/{product_id}/payments.json.
  • Developer Scope: /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:

  • User Scope: /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:

  • Update Plan: POST /developers/{developer_id}/products/{product_id}/plans/{plan_id}.json
  • Create Plan: POST /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.

Download OpenAPI description
Languages
Servers
Production API

https://api.freemius.com/v1/

Local development API

http://api.freemius-local.com:8080/v1/

Mock server

https://docs.freemius.com/_mock/api/

Products

All operations which can be done on a product.

Operations

Developers

All operations which can be done from on a developer.

Operations

Subscriptions

All operations associated to a subscription.

Operations

Users

All operations which can be done on a user belonging to a store or a product.

Operations

Licenses

All operations which can be done on a license belonging to a store or a product.

Operations

Coupons

All operations which can be done on a coupon belonging to a store or a product.

Operations

Carts

All operations which can be done on a cart belonging to a store or a product.

Operations

Payments

All operations associated to a payment.

Operations

Installations

Operations related to the installation of a product.

Operations

List all plan's features for Addon

Request

Get plan's features collection for an addon on a site.

Path
product_idinteger(int64)>= 1required

The ID of the product.

Example: 1234
install_idinteger(int64)>= 1required

The ID of the install.

Example: 1234
addon_idinteger(int64)>= 1required

The ID of the Addon.

Example: 1234
plan_idinteger(int64)>= 1required

The ID of the plan.

Example: 1234
Query
countinteger[ 1 .. 50 ]

The number of records to return.

Default 25
Example: count=10
offsetinteger>= 0

The number of records to skip before starting to return records. Default is 0.

Default 0
Example: offset=10
fieldsstring

Comma separated list of fields to return in the response. If not specified, all fields are returned.

Example: fields=id,name,slug
curl -i -X GET \
  'https://api.freemius.com/v1/products/1234/installs/1234/addons/1234/plans/1234/features.json?count=10&fields=id%2Cname%2Cslug&offset=10' \
  -H 'Authorization: Bearer <YOUR_AccessToken_HERE>'

Responses

The plan's features collection for Addon on an install.

Bodyapplication/json
featuresArray of objects(Feature)
Response
application/json
{ "features": [ {} ] }

Resolve a clone

Request

Resolve a clone of an install that was created by the product.

Path
product_idinteger(int64)>= 1required

The ID of the product.

Example: 1234
install_idinteger(int64)>= 1required

The ID of the install.

Example: 1234
clone_idinteger(int64)>= 1required

The ID of the clone.

Example: 1234
Query
fieldsstring

Comma separated list of fields to return in the response. If not specified, all fields are returned.

Example: fields=id,name,slug
Bodyapplication/jsonrequired
resolutionstring or nullrequired

The resolution or purpose of the clone site.

Enum"temporary_duplicate""new_home""long_term_duplicate"
new_install_idstring or null(int64)>= 1

The ID of the newly created cloned Install.

Example: "1234"
curl -i -X PUT \
  'https://api.freemius.com/v1/products/1234/installs/1234/clones/1234.json?fields=id%2Cname%2Cslug' \
  -H 'Authorization: Bearer <YOUR_AccessToken_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "resolution": "temporary_duplicate"
  }'

Responses

Install clone created.

Bodyapplication/json
idstring(int64)>= 1

The unique identifier of the entity.

Example: "123456"
createdstring(date-time)

The date and time the entity was created, under UTC timezone.

Example: "2025-01-01 00:00:00"
updatedstring or null(date-time)

The date and time the entity was updated, under UTC timezone. If null then the entity was never updated since its creation.

Example: "2025-01-01 00:00:00"
install_idstring(int64)>= 1

The ID of the installation or site the entity is associated with.

Example: "123456"
new_install_idstring or null(int64)>= 1

The ID of the newly created cloned Install.

Example: "1234"
install_urlstring

The install's URL (install.url) when the clone was identified.

Example: "https://example.com"
site_urlstring

The URL of the site where the clone was identified.

Example: "https://staging.example.com"
statestring

The state of the clone.

Enum"pending""resolved"
resolutionstring or null

The resolution or purpose of the clone site.

Enum"temporary_duplicate""new_home""long_term_duplicate"
Response
application/json
{ "id": "123456", "created": "2025-01-01 00:00:00", "updated": "2025-01-01 00:00:00", "install_id": "123456", "new_install_id": "1234", "install_url": "https://example.com", "site_url": "https://staging.example.com", "state": "pending", "resolution": "temporary_duplicate" }

Create a clone

Request

Create a clone of an install associated with the product.

Use this endpoint if you want to support migration or temporary or long-term duplicates for staging purposes.

By default the clone will be created in a pending state. For our WP SDK the clone will be created in a safe mode state.

After creating the clone, you will need to resolve the clone by updating its state and resolution. You will need to handle the licensing logic for the new install entity. Our WP SDK handles it automatically for WordPress products (plugins and themes).

Path
product_idinteger(int64)>= 1required

The ID of the product.

Example: 1234
install_idinteger(int64)>= 1required

The ID of the install.

Example: 1234
Query
fieldsstring

Comma separated list of fields to return in the response. If not specified, all fields are returned.

Example: fields=id,name,slug
Bodyapplication/json
site_urlstringrequired

The URL of the new site to clone the install to.

Example: "https://example.com"
curl -i -X POST \
  'https://api.freemius.com/v1/products/1234/installs/1234/clones.json?fields=id%2Cname%2Cslug' \
  -H 'Authorization: Bearer <YOUR_AccessToken_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "site_url": "https://example.com"
  }'

Responses

Install clone created.

Bodyapplication/json
idstring(int64)>= 1

The unique identifier of the entity.

Example: "123456"
createdstring(date-time)

The date and time the entity was created, under UTC timezone.

Example: "2025-01-01 00:00:00"
updatedstring or null(date-time)

The date and time the entity was updated, under UTC timezone. If null then the entity was never updated since its creation.

Example: "2025-01-01 00:00:00"
install_idstring(int64)>= 1

The ID of the installation or site the entity is associated with.

Example: "123456"
new_install_idstring or null(int64)>= 1

The ID of the newly created cloned Install.

Example: "1234"
install_urlstring

The install's URL (install.url) when the clone was identified.

Example: "https://example.com"
site_urlstring

The URL of the site where the clone was identified.

Example: "https://staging.example.com"
statestring

The state of the clone.

Enum"pending""resolved"
resolutionstring or null

The resolution or purpose of the clone site.

Enum"temporary_duplicate""new_home""long_term_duplicate"
Response
application/json
{ "id": "123456", "created": "2025-01-01 00:00:00", "updated": "2025-01-01 00:00:00", "install_id": "123456", "new_install_id": "1234", "install_url": "https://example.com", "site_url": "https://staging.example.com", "state": "pending", "resolution": "temporary_duplicate" }

Trials

Operations related to a trial license of a product.

Operations

Addons

Operations related to an addon of a product.

Operations

Plans

Operations related to plans, pricings and features of a product.

Operations

Events

Operations related to events of a store or product.

Operations

Reviews

Operations related to reviews of a product.

Operations

Deployments

Operations related to version deployments and retrieval.

Operations