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}/coupons/{coupon_id}.json
https://docs.freemius.com/_mock/api/products/{product_id}/coupons/{coupon_id}.json
curl -i -X GET \
https://api.freemius.com/v1/products/1234/coupons/1234.json \
-H 'Authorization: Bearer <YOUR_AccessToken_HERE>'
The coupon is retrieved successfully.
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 type of the entity the coupon belongs to.
Comma separated IDs of plans the coupon would work for. If null
, coupon supports all plans.
Comma separated licenses quota limits. If null
, coupon supports all license limits. 0
is used for an unlimited-site license.
Comma separated billing cycles. If null
, coupon supports all billing cycles. 0
is used for lifetime billing cycle.
The type of the discount. "percentage" means the discount is a percentage of the price, "dollar" means the discount is a fixed amount.
Date and time from when the coupon will be activated.
Date and time, after which the coupon will be expired.
Whether the coupon also supports discount for renewals or first payment only.
The user type the coupon is applicable to.
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", "entity_id": 12345, "entity_type": "plugin", "plans": "123,654,8757", "licenses": "1,5,10,0", "billing_cycles": "1,12", "code": "BLACKFRIDAY2024", "discount": 0, "discount_type": "dollar", "start_date": "2025-04-01 11:13:28", "end_date": "2025-04-30 19:17:21", "redemptions": 0, "redemptions_limit": 0, "has_renewals_discount": true, "has_addons_discount": true, "is_one_per_user": true, "is_active": true, "user_type": "all", "source": 0 }
Comma separated IDs of plans the coupon would work for. If null
, coupon supports all plans.
Comma separated licenses quota limits. If null
, coupon supports all license limits. 0
is used for an unlimited-site license.
Comma separated billing cycles. If null
, coupon supports all billing cycles. 0
is used for lifetime billing cycle.
The user type the coupon is applicable to.
The type of the discount. "percentage" means the discount is a percentage of the price, "dollar" means the discount is a fixed amount.
Date and time from when the coupon will be activated.
Date and time, after which the coupon will be expired.
Whether the coupon also supports discount for renewals or first payment only.
https://api.freemius.com/v1/products/{product_id}/coupons/{coupon_id}.json
https://docs.freemius.com/_mock/api/products/{product_id}/coupons/{coupon_id}.json
curl -i -X PUT \
https://api.freemius.com/v1/products/1234/coupons/1234.json \
-H 'Authorization: Bearer <YOUR_AccessToken_HERE>' \
-H 'Content-Type: application/json' \
-d '{}'
The coupon is updated.
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 type of the entity the coupon belongs to.
Comma separated IDs of plans the coupon would work for. If null
, coupon supports all plans.
Comma separated licenses quota limits. If null
, coupon supports all license limits. 0
is used for an unlimited-site license.
Comma separated billing cycles. If null
, coupon supports all billing cycles. 0
is used for lifetime billing cycle.
The type of the discount. "percentage" means the discount is a percentage of the price, "dollar" means the discount is a fixed amount.
Date and time from when the coupon will be activated.
Date and time, after which the coupon will be expired.
Whether the coupon also supports discount for renewals or first payment only.
The user type the coupon is applicable to.
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", "entity_id": 12345, "entity_type": "plugin", "plans": "123,654,8757", "licenses": "1,5,10,0", "billing_cycles": "1,12", "code": "BLACKFRIDAY2024", "discount": 0, "discount_type": "dollar", "start_date": "2025-04-01 11:13:28", "end_date": "2025-04-30 19:17:21", "redemptions": 0, "redemptions_limit": 0, "has_renewals_discount": true, "has_addons_discount": true, "is_one_per_user": true, "is_active": true, "user_type": "all", "source": 0 }
https://api.freemius.com/v1/products/{product_id}/coupons/{coupon_id}.json
https://docs.freemius.com/_mock/api/products/{product_id}/coupons/{coupon_id}.json
curl -i -X DELETE \
https://api.freemius.com/v1/products/1234/coupons/1234.json \
-H 'Authorization: Bearer <YOUR_AccessToken_HERE>'
No content
Retrieve the coupon collection associated with your product.
You can use filtering to search for a particular coupon or a group of coupons. The available parameters are:
code
- You can explicitly search coupon by the code.search
- You can search by coupon code or coupon ID.prefix
- You can filter by coupon code prefix.If using search and filtering, then the
is_enriched
parameter is ignored.
https://api.freemius.com/v1/products/{product_id}/coupons.json
https://docs.freemius.com/_mock/api/products/{product_id}/coupons.json
curl -i -X GET \
'https://api.freemius.com/v1/products/1234/coupons.json?code=string&count=10&is_enriched=true&offset=10&prefix=string&search=string' \
-H 'Authorization: Bearer <YOUR_AccessToken_HERE>'
{ "coupons": [ { … } ] }
Create a new coupon.
Alternatively, you can use the Freemius Developer Dashboard.
If you're creating coupon from your SaaS for some specific use case, please be sure to set the
plans
,redemptions_limit
,end_date
, andis_one_per_user
properties to the appropriate values, to avoid misuse.
Comma separated IDs of plans the coupon would work for. If null
, coupon supports all plans.
Comma separated licenses quota limits. If null
, coupon supports all license limits. 0
is used for an unlimited-site license.
Comma separated billing cycles. If null
, coupon supports all billing cycles. 0
is used for lifetime billing cycle.
The user type the coupon is applicable to.
The type of the discount. "percentage" means the discount is a percentage of the price, "dollar" means the discount is a fixed amount.
Date and time from when the coupon will be activated.
Date and time, after which the coupon will be expired.
Whether the coupon also supports discount for renewals or first payment only.
https://api.freemius.com/v1/products/{product_id}/coupons.json
https://docs.freemius.com/_mock/api/products/{product_id}/coupons.json
curl -i -X POST \
https://api.freemius.com/v1/products/1234/coupons.json \
-H 'Authorization: Bearer <YOUR_AccessToken_HERE>' \
-H 'Content-Type: application/json' \
-d '{}'
The coupon is created.
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 type of the entity the coupon belongs to.
Comma separated IDs of plans the coupon would work for. If null
, coupon supports all plans.
Comma separated licenses quota limits. If null
, coupon supports all license limits. 0
is used for an unlimited-site license.
Comma separated billing cycles. If null
, coupon supports all billing cycles. 0
is used for lifetime billing cycle.
The type of the discount. "percentage" means the discount is a percentage of the price, "dollar" means the discount is a fixed amount.
Date and time from when the coupon will be activated.
Date and time, after which the coupon will be expired.
Whether the coupon also supports discount for renewals or first payment only.
The user type the coupon is applicable to.
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", "entity_id": 12345, "entity_type": "plugin", "plans": "123,654,8757", "licenses": "1,5,10,0", "billing_cycles": "1,12", "code": "BLACKFRIDAY2024", "discount": 0, "discount_type": "dollar", "start_date": "2025-04-01 11:13:28", "end_date": "2025-04-30 19:17:21", "redemptions": 0, "redemptions_limit": 0, "has_renewals_discount": true, "has_addons_discount": true, "is_one_per_user": true, "is_active": true, "user_type": "all", "source": 0 }
https://api.freemius.com/v1/products/{product_id}/coupons/{coupon_id}/note.json
https://docs.freemius.com/_mock/api/products/{product_id}/coupons/{coupon_id}/note.json
curl -i -X GET \
https://api.freemius.com/v1/products/1234/coupons/1234/note.json \
-H 'Authorization: Bearer <YOUR_AccessToken_HERE>'
The coupon note details.
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 type of the scope entity that this note is associated with.
The type of the entity that this note is associated with.
{ "id": "123456", "created": "2025-01-01 00:00:00", "updated": "2025-01-01 00:00:00", "scope_entity_id": 12345, "scope_entity_type": "plugin", "entity_id": 12345, "entity_type": "coupon", "note": "This is a note" }
https://api.freemius.com/v1/products/{product_id}/coupons/{coupon_id}/note.json
https://docs.freemius.com/_mock/api/products/{product_id}/coupons/{coupon_id}/note.json
curl -i -X PUT \
https://api.freemius.com/v1/products/1234/coupons/1234/note.json \
-H 'Authorization: Bearer <YOUR_AccessToken_HERE>' \
-H 'Content-Type: application/json' \
-d '{}'
The coupon note was updated.
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 type of the scope entity that this note is associated with.
The type of the entity that this note is associated with.
{ "id": "123456", "created": "2025-01-01 00:00:00", "updated": "2025-01-01 00:00:00", "scope_entity_id": 12345, "scope_entity_type": "plugin", "entity_id": 12345, "entity_type": "coupon", "note": "This is a note" }
https://api.freemius.com/v1/products/{product_id}/coupons/{coupon_id}/note.json
https://docs.freemius.com/_mock/api/products/{product_id}/coupons/{coupon_id}/note.json
curl -i -X POST \
https://api.freemius.com/v1/products/1234/coupons/1234/note.json \
-H 'Authorization: Bearer <YOUR_AccessToken_HERE>' \
-H 'Content-Type: application/json' \
-d '{}'
The note was added to the coupon.
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 type of the scope entity that this note is associated with.
The type of the entity that this note is associated with.
{ "id": "123456", "created": "2025-01-01 00:00:00", "updated": "2025-01-01 00:00:00", "scope_entity_id": 12345, "scope_entity_type": "plugin", "entity_id": 12345, "entity_type": "coupon", "note": "This is a note" }
https://api.freemius.com/v1/products/{product_id}/coupons/{coupon_id}/note.json
https://docs.freemius.com/_mock/api/products/{product_id}/coupons/{coupon_id}/note.json
curl -i -X DELETE \
https://api.freemius.com/v1/products/1234/coupons/1234/note.json \
-H 'Authorization: Bearer <YOUR_AccessToken_HERE>'
No content
https://api.freemius.com/v1/products/{product_id}/coupons/special.json
https://docs.freemius.com/_mock/api/products/{product_id}/coupons/special.json
curl -i -X GET \
'https://api.freemius.com/v1/products/1234/coupons/special.json?type=affiliate' \
-H 'Authorization: Bearer <YOUR_AccessToken_HERE>'
{ "coupon_entities": [ { … } ] }
https://api.freemius.com/v1/products/{product_id}/coupons/{coupon_id}/special/{special_id}.json
https://docs.freemius.com/_mock/api/products/{product_id}/coupons/{coupon_id}/special/{special_id}.json
curl -i -X PUT \
https://api.freemius.com/v1/products/1234/coupons/1234/special/cart_recovery.json \
-H 'Authorization: Bearer <YOUR_AccessToken_HERE>'
The special coupon has been created.
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 type of the entity (Usually 2
which means it is a product or 20
which means it is an affiliate).
The special coupon type.
The type of the discount. "percentage" means the discount is a percentage of the price, "dollar" means the discount is a fixed amount.
If the discount type is dollar
, then this field will hold values of absolute discount amount per supported currency.
{ "id": "123456", "created": "2025-01-01 00:00:00", "updated": "2025-01-01 00:00:00", "coupon_id": 12345, "entity_id": 12345, "entity_type": 2, "type": "affiliate", "code": "BLACKFRIDAY2024", "redemptions": 0, "discount": 0, "discount_type": "dollar", "discounts": { "usd": 10.5, "eur": 10.5, "gbp": 10.5 }, "has_renewals_discount": true }
https://api.freemius.com/v1/products/{product_id}/coupons/{coupon_id}/special/{special_id}.json
https://docs.freemius.com/_mock/api/products/{product_id}/coupons/{coupon_id}/special/{special_id}.json
curl -i -X DELETE \
https://api.freemius.com/v1/products/1234/coupons/1234/special/cart_recovery.json \
-H 'Authorization: Bearer <YOUR_AccessToken_HERE>'
No content