Skip to main content

Subscriptions

GET Get current subscription​

https://focus.toggl.com/api/organizations/{organization_id}/subscriptions/current

Get current subscription.

curl  https://focus.toggl.com/api/organizations/{organization_id}/subscriptions/current \
-H "Content-Type: application/json"

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID

Response​

200​

NameTypeDescription
focus_trial_ended_atstringnull
grantedbooleanGranted reports an entitlement the organization holds without paying for it: the Stripe-backed fields are empty because no Stripe subscription backs the grant.
organization_idinteger-
priceobject-
productobject-
subscriptionobject-
subscription_itemobject-
track_subscriptionobject-
price​
NameTypeDescription
billing_period_in_monthsinteger-
cost_in_centsinteger-
currencystring-
tagstring-
track_pricing_plan_idinteger-
product​
NameTypeDescription
handlestring-
namestring-
sitestring-
toggl_product_idstring-
track_enterpriseboolean-
track_plan_idinteger-
subscription​
NameTypeDescription
customerobject-
idstring-
payment_failedboolean-
statestring-
subscription_itemobject-
urlstring-
customer​
NameTypeDescription
idstring-
urlstring-
subscription_item​
NameTypeDescription
discountobject-
quantityintegerQuantity is the live paid quantity (number of paid licenses).
scheduled_quantityintegerScheduledQuantity is the scheduled next-cycle quantity when a change is pending in Stripe (typically a decrease); nil when there is no pending change — no schedule, or the scheduled quantity equals the live quantity.
subscription_item_idstringID is the Stripe subscription item ID. Empty for trial-only synthetic responses where no Stripe subscription item exists yet.
updated_atstring-
discount​
NameTypeDescription
amount_offinteger-
coupon_idstring-
currencystring-
durationstring-
namestring-
percent_offnumber-
promotion_code_idstring-
subscription_item​
NameTypeDescription
discountobject-
quantityintegerQuantity is the live paid quantity (number of paid licenses).
scheduled_quantityintegerScheduledQuantity is the scheduled next-cycle quantity when a change is pending in Stripe (typically a decrease); nil when there is no pending change — no schedule, or the scheduled quantity equals the live quantity.
subscription_item_idstringID is the Stripe subscription item ID. Empty for trial-only synthetic responses where no Stripe subscription item exists yet.
updated_atstring-
discount​
NameTypeDescription
amount_offinteger-
coupon_idstring-
currencystring-
durationstring-
namestring-
percent_offnumber-
promotion_code_idstring-
track_subscription​
NameTypeDescription
cancel_datestring-
current_period_ends_atstring-
current_period_starts_atstring-
end_datestring-
payment_failedboolean-
start_datestring-
subscription_created_atstring-
subscription_updated_atstring-
trialobject-
trial​
NameTypeDescription
availableboolean-
end_datestring-
start_datestring-
trial_plan_idinteger-

400​

Invalid request

403​

Insufficient permissions

500​

Internal Server Error

GET Get current trial​

https://focus.toggl.com/api/organizations/{organization_id}/subscriptions/trials/current

Get the current active trial for the Focus product.

curl  https://focus.toggl.com/api/organizations/{organization_id}/subscriptions/trials/current \
-H "Content-Type: application/json"

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID

Response​

200​

Current active trial

NameTypeDescription
idinteger-
organization_idinteger-
plan_idinteger-
plan_namestring-
product_handlestring-
toggl_product_namestring-
trial_cancels_atstring-
trial_created_atstring-
trial_deleted_atstring-
trial_ended_atstring-
trial_started_atstring-
trial_typestring-

204​

No active trial found

400​

Invalid request

404​

Subscription not found

500​

Internal server error

POST Upserts a trial​

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/subscriptions/upsert-forced-trial

Creates or updates a trial for the organization based on workspace data and Plan import history.

curl -X POST https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/subscriptions/upsert-forced-trial \
-H "Content-Type: application/json" \
-d '\{"plan_workspace_id":"integer"\}'

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID

Body​

NameTypeDescription
plan_workspace_idinteger-

Response​

200​

Trial was created or updated

NameTypeDescription
idinteger-
organization_idinteger-
plan_idinteger-
plan_namestring-
product_handlestring-
toggl_product_namestring-
trial_cancels_atstring-
trial_created_atstring-
trial_deleted_atstring-
trial_ended_atstring-
trial_started_atstring-
trial_typestring-

204​

No trial created or updated (existing unchanged trial, paid subscription, or no eligible trial)

400​

Invalid request

409​

Forced trial already exists or org has active subscription

500​

Internal server error

© 2026 Toggl. All rights reserved.