POST /subscriptions/{subscription-id}/change_term_end

Use this endpoint to adjust when a subscription's current term or trial ends without altering the plan or billing frequency. It is helpful when you need to align renewals to a specific calendar date or extend a trial. Future renewals will follow the new date, keeping the subscription cadence intact.

Prerequisites & Constraints

Subscriptions must be in one of the following status values: in_trial, active, non_renewing.

Impacts

Subscription

Based on the subscription's status, the following updates are made:

  • If the status is in_trial, the trial_end is set to the new date.
  • If the status is active, the current_term_end is set to the new date.
  • If the status is non_renewing, the upcoming cancellation date is set to the new date.

Invoices and Credit Notes

The API can generate unbilled charges, invoice, or credit notes. You can control the behaviour using prorate and invoice_immediately parameters. To preview invoices, credits, and dates, use the Change term end estimate endpoint.

Advance Charges

If there are advance charges, then credit notes are issued for the unused portion of the service period.

Scheduled Pause

If the subscription is scheduled to pause at the end of the current term, the pause date is updated to match the new term end date.

Ramps

If subscription ramps are present, this operation moves them to the draft state. Update and reschedule the ramps as needed to keep them in sync.

Implementation Notes

The request fails with invalid_state if the subscription is not in one of the trial, active, or non_renewing states. Validate the status before invoking this API.

Servers

Path parameters

Name Type Required Description
subscription-id String Yes

Request headers

Name Type Required Description
chargebee-request-origin-device String No

The device from which the customer has made the request

Content-Type String Yes The media type of the request body.

Default value: "application/x-www-form-urlencoded"

chargebee-event-webhook String No

skip only webhooks

Valid values:

  • "all-disabled"
chargebee-business-entity-id String No

If the site has multiple business entities, you can use this custom HTTP header to specify the business entity for which Chargebee should perform the operation.

chargebee-event-actions String No

skip all actions to be done on the events

Valid values:

  • "all-disabled"
chargebee-request-origin-user String No

The email address of your customer/user. Use this when the email address has only ASCII characters.

chargebee-request-origin-ip String No

The IP address of the customer where the request originated

chargebee-request-origin-user-encoded String No

The Base64-encoded email address of your customer/user. Use this if the email address has UTF-8 characters. When this header is provided, the header chargebee-request-origin-user is ignored.

chargebee-event-email String No

skip only emails

Valid values:

  • "all-disabled"

Request body fields

Name Type Required Description
prorate Boolean No

Applicable for active / non_renewing subscriptions. If specified as true prorated charges / credits will be added during this operation.

invoice_immediately Boolean No

If there are charges raised immediately for the subscription, this parameter specifies whether those charges are to be invoiced immediately or added to unbilled charges. The default value is as per the site settings.

Note: invoice_immediately only affects charges that are raised at the time of execution of this API call. Any charges scheduled to be raised in the future are not affected by this parameter.
.
term_ends_at Integer Yes

The time at which the current term should end for this subscription. The value must be a date in the future, i.e. later than current time. The value must not be the same as next_billing_at.

How to start integrating

  1. Add HTTP Task to your workflow definition.
  2. Search for the API you want to integrate with and click on the name.
    • This loads the API reference documentation and prepares the Http request settings.
  3. Click Test request to test run your request to the API and see the API's response.