How to change billing_time on an active subscription

Last updated: May 28, 2026

Sending a second subscription create request with a different billing_time value returns 200 OK but silently leaves the existing subscription unchanged. Lago's create service, when it finds an active subscription matching the same external_id and plan with no plan upgrade or downgrade detected, returns the existing record untouched. The incoming payload, including billing_time, is ignored entirely in this code path.

How it works

billing_time is set at subscription creation and cannot be modified in place. When you POST a new subscription using an existing subscription's external_id and the same plan code, Lago interprets this as a no-op if no plan change is involved. The 200 OK response confirms the existing subscription record was found, not that any change was applied.

How to resolve the issue

To change billing_time on an existing subscription, you must terminate the current subscription explicitly, then create a new one with the desired billing_time value. Use DELETE /api/v1/subscriptions/:external_id to terminate, then POST /api/v1/subscriptions with a new external_id (or the same one after termination completes) and the updated billing_time.

How to prevent this from happening again

Do not rely on re-sending the create endpoint to update subscription properties. Lago's create endpoint is idempotent on external_id + plan. Only actual plan changes (upgrades or downgrades) trigger a new subscription record. For any property that cannot be changed in place, the terminate-and-recreate path is the supported approach.


This article reflects guidance drawn from customer case resolutions. It is not officially supported documentation and may not apply to all situations.