Skip to main content

Renewal

Intro

Once a customer is approaching the end of their contract, they will be sent reminder emails to accept a renewal contract. They will be switched to a month-to-month plan if a renewal plan is not accepted by the original contract expiration date.

By default, you can rely on the no-code flow for renewals to handle the experience and regulatory needs. We send renewal emails once a customer is eligible for renewal (90 days out from expiration), with links to hosted no-code flows. These flows provide a branded experience where customers can see a renewal rate and accept it to start once their current term ends.

The default renewal terms use the same pricing model as is used for new customers. You can work with our team to adjust default overrides like extending term length or changing pricing on renewal if desired.

Should I implement a custom renewal flow?

Most partners start with our default renewal behavior at launch. Once you have a good handle on your new customer flows, you may consider building a custom renewal flow if you need specific control over the renewal experience or want to integrate it directly into your app.

Prebuilt UI

No-code flow

The default renewal experience uses our no-code flow hosted by Light. When a customer is eligible for renewal, they receive an email with a link to a branded flow where they can:

  1. Review their renewal rate and plan details
  2. See when their current contract ends
  3. Accept the renewal to start service on the next day after expiration

This happens automatically without any implementation required from your side.

Custom embedded flow

If you want to host the renewal flow in your own app, we offer a prebuilt UI embedded flow using the same renewal interface. This lets you keep customers within your domain and app experience but without having to build the entire flow from scratch.

To use this option:

  1. Implement the prebuilt UI with the renewal scope in your app
  2. Let us know where you've set up the flow
  3. We'll update our renewal emails to link to your app instead of the default hosted flow

Learn more about prebuilt UI

API

If you want to customize your renewal process beyond the prebuilt flows, you can use our API directly. The prebuilt flows are built on top of our public API, so you can achieve the same behavior with a native implementation.

The API requires you retrieve a user's AccountToken for the renewal experience. Refer to the authentication docs for more details.

Request renewal plans

To show customers their available renewal plans, use the POST /v1/account/locations/{location_uuid}/renewal-plans/request API. This returns the renewal plans available for an active service location.

The response includes plan details like rates, term length, and start dates. For typical renewals, the earliest_start_date and latest_start_date will be the same date (the day after the current contract ends).

Accept renewal plan

Once a customer selects a renewal plan, use the POST /v1/account/locations/{location_uuid}/renewal-plans/accept API to finalize their selection.

You'll need to pass:

  • plan_uuid: The unique identifier for the selected renewal plan
  • service_start_date: The start date (typically the earliest_start_date from the request)
  • terms_accepted: Must be true to confirm the customer accepted the terms

Customizing renewal rates

If you want to offer different rates or plans to customers on renewal, you can use the general enrollment plans API instead. Call POST /v1/app/accounts/enroll/plans/request to request a custom plan, then accept the renewal using the renewal accept API with the service_start_date set to the day after their current contract ends.

This approach gives you full control over what plans and rates you offer at renewal time.

Webhooks allow your application to receive real-time notifications about events that occur within the Light platform. This enables you to build responsive and up-to-date integrations without the need for constant polling. Learn more

location.renewal_plan_requested

Triggered when a customer requests renewal plans for their location.

location.renewal_plan_accepted

Triggered when a customer accepts a renewal plan for their location.