# Phasing out Old Versions

An older resource variant or action **MAY** be phased out and eventually removed providing clients were given enough time to accommodate for the change.

Whether a resource or action can be phased out and removed completely depends on the nature of the API and the importance of existing integrations.&#x20;

If an interface might be phased out it **MUST** follow the Phasing out Outline as specified in these guidelines.&#x20;

> The gist is to never break existing clients. As soon as there is a breaking change a new resource variant should be created leaving the original intact to not break existing integrations. However, over the time it might be desired to remove older, unused variants.

### Phasing out Outline

#### 1. Mark as Deprecated

The deprecation mark **SHOULD** happen both at runtime and in the documentation.&#x20;

For the runtime deprecation notice the  [HTTP Sunset Header](https://tools.ietf.org/id/draft-wilde-sunset-header-03.html) **MUST** be used. For the documentation, the resource or action **MUST** be clearly marked in its description as deprecated.

#### 2. Inform Users

Existing API users **MUST** be noticed by available means about the deprecation of the interface. They **SHOULD** be informed about what are the alternatives to using the deprecated functionality and what is the migration path.

#### 3. Remove Documentation of the Deprecated Interface

Eventually, the part of API documentation describing the deprecated interface **MAY** be removed or hidden to prevent new users from using the deprecated resources or actions.&#x20;

#### 4. Final Notice

After a sufficient grace period a final deprecation notice **SHOULD** be issued.

#### 5. Remove Deprecated Interface

When there are no users using the deprecated interface, the interface **MAY** be decommissioned. A deprecated resource or action **MUST NOT** be removed if there are known existing integrations using it.

Based one the nature of migration path a redirect to a new variant **SHOULD** be provided.

> Phasing-out, depends on the importance of the APIs and its audience, for business-critical APIs, one never want to risk removing anything. For example [Stripe.com](http://stripe.com/) maintain all past versions. For other, less critical APIs, or APIs where one control its client(s), one can be more relaxed about removing deprecated resources.&#x20;
