# Migration v20

Contains 1 breaking change of the SDK interface.

## Changes

- [change to getDowngradeOptions](#change-to-getDowngradeOptions)

### change to getDowngradeOptions

A v2 of memberships  `/transitions/subscriptions/downgrade/options/v2` endpoint has been released to allow for access to special case discounts of 50% off and Standard Lite

New parameter

**firstOfferRejected** - of type boolean to define if a user has previously rejected the a cancellation offer presented in the current user journey.

New response:

The breaking change is the format of the response has changes from a single offer object or 204 response for no offers to an array of offers or an empty array.

Amend to DowngradeOptionResponse interface:

Makes `percent` an optional property as this will not always be present for all offers in v2 and adds a new optional property of `specialCaseDiscountType` type string to denote a special case discount offer.

Changes in src/transitions.ts

```diff
- public async getDowngradeOptions(subscriptionNumber: string, checkForStepUpOptions: boolean = false): Promise<DowngradeOptionsResponse> {
- 	const url = `${this.membershipApi}/transitions/subscriptions/downgrade/options/${subscriptionNumber}?checkForStepUpOptions=${checkForStepUpOptions}`;
- 	return this.requestGet({ url, key: this.transitionApiKey });
+ public async getDowngradeOptions(subscriptionNumber: string, checkForStepUpOptions: boolean = false, firstOfferRejected: boolean = false): Promise<DowngradeOptionsResponse[]> {
+ 	const url = `${this.membershipApi}/transitions/subscriptions/downgrade/options/v2/${subscriptionNumber}?checkForStepUpOptions=${checkForStepUpOptions}&firstOfferRejected=${firstOfferRejected}`;

+ 	return  this.requestGet({ url, key: this.transitionApiKey });
```

Changes to src/types/transistion.ts

```diff
- percent: number;
- friendlyName: string;
+percent?: number;
+friendlyName: string;
+specialCaseDiscountType?: string;
