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/
Retrieve a log of the events for the user associated with the product. Freemius tracks events such as opt-in, license activation, purchase etc. You can use this data for marketing and other automation purposes. More information can be found here.
https://api.freemius.com/v1/products/{product_id}/users/{user_id}/events.json
https://docs.freemius.com/_mock/api/products/{product_id}/users/{user_id}/events.json
curl -i -X GET \
'https://api.freemius.com/v1/products/1234/users/1234/events.json?count=10&fields=id%2Cname%2Cslug&offset=10' \
-H 'Authorization: Bearer <YOUR_AccessToken_HERE>'
{ "events": [ { … } ] }
https://api.freemius.com/v1/products/{product_id}/users/{user_id}.json
https://docs.freemius.com/_mock/api/products/{product_id}/users/{user_id}.json
curl -i -X GET \
'https://api.freemius.com/v1/products/1234/users/1234.json?fields=id%2Cname%2Cslug' \
-H 'Authorization: Bearer <YOUR_AccessToken_HERE>'
The product user data.
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.
Whether or not the user has opted-in to beta versions. We do not recommend using this option anymore since it will opt-in the user to all sites/activations. Currently, sites or activations can be managed individually.
The type of authentication. If app2fa
is set, the person has signed for 2FA authentication.
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.
Date and time of the last login.
{ "note": "string", "is_marketing_allowed": true, "is_beta": true, "email": "jane@example.com", "first": "Jane", "last": "Doe", "picture": "https://example.com/profile-pic.jpg", "ip": "127.0.0.1", "is_verified": "true", "auth": "app2fa", "secret_key": "sk_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6", "public_key": "pk_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6", "id": "123456", "created": "2025-01-01 00:00:00", "updated": "2025-01-01 00:00:00", "gross": 0.1, "last_login_at": "2025-07-30 05:56:29", "email_status": "delivered" }
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.
https://api.freemius.com/v1/products/{product_id}/users/{user_id}.json
https://docs.freemius.com/_mock/api/products/{product_id}/users/{user_id}.json
curl -i -X PUT \
'https://api.freemius.com/v1/products/1234/users/1234.json?fields=id%2Cname%2Cslug' \
-H 'Authorization: Bearer <YOUR_AccessToken_HERE>' \
-H 'Content-Type: application/json' \
-d '{}'
The product user updated data.
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.
Whether or not the user has opted-in to beta versions. We do not recommend using this option anymore since it will opt-in the user to all sites/activations. Currently, sites or activations can be managed individually.
The type of authentication. If app2fa
is set, the person has signed for 2FA authentication.
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.
Date and time of the last login.
{ "note": "string", "is_marketing_allowed": true, "is_beta": true, "email": "jane@example.com", "first": "Jane", "last": "Doe", "picture": "https://example.com/profile-pic.jpg", "ip": "127.0.0.1", "is_verified": "true", "auth": "app2fa", "secret_key": "sk_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6", "public_key": "pk_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6", "id": "123456", "created": "2025-01-01 00:00:00", "updated": "2025-01-01 00:00:00", "gross": 0.1, "last_login_at": "2025-07-30 05:56:29", "email_status": "delivered" }
Gets the user collection associated with a product.
There are a few filters that can be applied to the request.
You can specify the parameter email
to filter the users by email. Optionally you can also put a valid email in the search
parameter.
The search
parameter also accepts the following values:
You can use the combination of count
and offset
parameters to paginate the results.
https://api.freemius.com/v1/products/{product_id}/users.json
https://docs.freemius.com/_mock/api/products/{product_id}/users.json
curl -i -X GET \
'https://api.freemius.com/v1/products/1234/users.json?count=10&fields=id%2Cname%2Cslug&offset=10' \
-H 'Authorization: Bearer <YOUR_AccessToken_HERE>'
{ "users": [ { … } ] }
Create a new user associated with the product.
The user will be linked to the product if they already exist in Freemius.
User can only be created for products with elevated permissions or during data migration.
Freemius allows to migrate your users from other platforms. To do so, you need to set the is_migration
parameter to true
. This will prevent any emails from being sent to the users and will not log any events. Once migrated the user can use their existing licenses to activate your product.
(optional) URL address that the user will be auto forwarded to after email confirmation is clicked.
(optional) Defaults to TRUE. If false
, email verification message will NOT be sent after registration.
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 source of the migration data. To get support migrating from other platform please see our documentation.
https://api.freemius.com/v1/products/{product_id}/users.json
https://docs.freemius.com/_mock/api/products/{product_id}/users.json
curl -i -X POST \
'https://api.freemius.com/v1/products/1234/users.json?fields=id%2Cname%2Cslug' \
-H 'Authorization: Bearer <YOUR_AccessToken_HERE>' \
-H 'Content-Type: application/json' \
-d '{}'
OK
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.
Whether or not the user has opted-in to beta versions. We do not recommend using this option anymore since it will opt-in the user to all sites/activations. Currently, sites or activations can be managed individually.
The type of authentication. If app2fa
is set, the person has signed for 2FA authentication.
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.
Date and time of the last login.
{ "note": "string", "is_marketing_allowed": true, "is_beta": true, "email": "jane@example.com", "first": "Jane", "last": "Doe", "picture": "https://example.com/profile-pic.jpg", "ip": "127.0.0.1", "is_verified": "true", "auth": "app2fa", "secret_key": "sk_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6", "public_key": "pk_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6", "id": "123456", "created": "2025-01-01 00:00:00", "updated": "2025-01-01 00:00:00", "gross": 0.1, "last_login_at": "2025-07-30 05:56:29", "email_status": "delivered" }
https://api.freemius.com/v1/products/{product_id}/users/{user_id}/installs.json
https://docs.freemius.com/_mock/api/products/{product_id}/users/{user_id}/installs.json
curl -i -X GET \
'https://api.freemius.com/v1/products/1234/users/1234/installs.json?count=10&fields=id%2Cname%2Cslug&install_ids=1234%2C2478%2C2345&license_id=0&offset=10&plan_id=0' \
-H 'Authorization: Bearer <YOUR_AccessToken_HERE>'
{ "installs": [ { … } ] }
Comma separated list of fields to return in the response. If not specified, all fields are returned.
The number of records to skip before starting to return records. Default is 0.
Retrieve specific multiple license with a comma-separated string of their license keys.
https://api.freemius.com/v1/products/{product_id}/users/{user_id}/licenses.json
https://docs.freemius.com/_mock/api/products/{product_id}/users/{user_id}/licenses.json
curl -i -X GET \
'https://api.freemius.com/v1/products/1234/users/1234/licenses.json?count=10&fields=id%2Cname%2Cslug&ids=string&is_enriched=false&license_key=string&license_keys=string&offset=10&type=all' \
-H 'Authorization: Bearer <YOUR_AccessToken_HERE>'
{ "licenses": [ { … } ] }
Comma separated list of fields to return in the response. If not specified, all fields are returned.
The number of records to skip before starting to return records. Default is 0.
Filter the payments by the status.
https://api.freemius.com/v1/products/{product_id}/users/{user_id}/payments.json
https://docs.freemius.com/_mock/api/products/{product_id}/users/{user_id}/payments.json
curl -i -X GET \
'https://api.freemius.com/v1/products/1234/users/1234/payments.json?billing_cycle=1&count=10&extended=false&fields=id%2Cname%2Cslug&filter=all&include_addons=false&include_bundles=false&offset=10' \
-H 'Authorization: Bearer <YOUR_AccessToken_HERE>'
{ "payments": [ { … } ], "discounts": [ { … } ] }
Enrich the subscriptions with the plan name, install URL & title, and user email.
Comma separated list of fields to return in the response. If not specified, all fields are returned.
The number of records to skip before starting to return records. Default is 0.
Sort the subscriptions by the ID or the next payment date.
https://api.freemius.com/v1/products/{product_id}/users/{user_id}/subscriptions.json
https://docs.freemius.com/_mock/api/products/{product_id}/users/{user_id}/subscriptions.json
curl -i -X GET \
'https://api.freemius.com/v1/products/1234/users/1234/subscriptions.json?billing_cycle=1&count=10&extended=false&fields=id%2Cname%2Cslug&filter=all&gateway=stripe&offset=10&plan_id=string&search=string&sort=id' \
-H 'Authorization: Bearer <YOUR_AccessToken_HERE>'
{ "subscriptions": [ { … } ], "discounts": [ { … } ] }
Create a 1 min long token that represents the details of the user for setting the user context in a checkout session. Please read our documentation to learn how to use it.
https://api.freemius.com/v1/products/{product_id}/users/{user_id}/tokens/checkout.json
https://docs.freemius.com/_mock/api/products/{product_id}/users/{user_id}/tokens/checkout.json
curl -i -X POST \
https://api.freemius.com/v1/products/1234/users/1234/tokens/checkout.json \
-H 'Authorization: Bearer <YOUR_AccessToken_HERE>'
{ "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJwcm9kdWN0X2lkIjozLCJ0b2tlbl9leHBpcmF0aW9uIjoxNTY3ODk4NzYwfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" }