> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mx.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Deprecations

> Platform API endpoints that are deprecated or sunset, their replacements and dates, and the response headers you can use to detect a deprecation programmatically.

Some Platform API endpoints are **deprecated** (scheduled for removal) or **sunset** (already
removed, returning `410 Gone`). This page lists each one — its replacement and key dates — and
shows how to detect a deprecation from any API response.

<Info>
  **Deprecated does not mean gone.** A deprecated endpoint keeps working exactly as it does
  today — same request, same response — right up until its **sunset** date. Deprecation is
  advance notice so you can migrate on your own schedule; an endpoint only stops working —
  returning `410 Gone` — once it is **sunset**.
</Info>

## The endpoint lifecycle

<Steps>
  <Step title="Active">
    The endpoint works normally and sends no deprecation headers.
  </Step>

  <Step title="Deprecated">
    The endpoint still returns its normal `2xx` response, now with `Deprecation`, `Sunset`, and
    `Link` headers. This is your window to migrate — nothing breaks yet.
  </Step>

  <Step title="Sunset">
    On the `Sunset` date the endpoint stops working and returns `410 Gone`. Calls fail until you
    move to the replacement.
  </Step>
</Steps>

<Note>
  This lifecycle and the deprecation headers apply to **all API versions**. An endpoint's sunset
  date can differ by the version you request — see
  [How sunset dates depend on your version](#how-sunset-dates-depend-on-your-version).
</Note>

***

## How MX signals a deprecation

How MX signals a deprecation depends on what's being deprecated — a whole endpoint or an
individual field.

### Endpoint deprecations

Deprecated and sunset endpoints announce their status in every response through standard HTTP
headers, so you can detect a pending removal directly from your integration.

| Header | Standard | What it tells you |
| :- | :- | :- |
| `Deprecation` | [RFC 9745](https://www.rfc-editor.org/rfc/rfc9745) | The date the endpoint was announced as deprecated. |
| `Sunset` | [RFC 8594](https://www.rfc-editor.org/rfc/rfc8594) | The date the endpoint stops working. After it, the endpoint returns `410 Gone`. |
| `Link` | [RFC 8288](https://www.rfc-editor.org/rfc/rfc8288) | Where to read what changed and how to migrate. `rel="deprecation"` while the endpoint is live; `rel="sunset"` once it is gone. |

A deprecated endpoint returns its normal status and body, plus the headers:

```http theme={null}
HTTP/1.1 200 OK
Deprecation: Tue, 29 Sep 2026 00:00:00 GMT
Sunset: Tue, 30 Mar 2027 00:00:00 GMT
Link: <https://docs.mx.com/api-reference/platform-api/v20260929/overview/deprecations>; rel="deprecation"
```

Once an endpoint is sunset, it stops doing work and returns `410 Gone`:

```http theme={null}
HTTP/1.1 410 Gone
Deprecation: Tue, 29 Sep 2026 00:00:00 GMT
Sunset: Tue, 30 Mar 2027 00:00:00 GMT
Link: <https://docs.mx.com/api-reference/platform-api/v20260929/overview/deprecations>; rel="sunset"
```

### Field deprecations

Individual request and response fields can also be deprecated. They follow the same lifecycle as endpoints, but they aren't signaled with the `Deprecation` and `Sunset` headers. Instead, the field is marked as deprecated on its endpoint's page, and the [Upgrade Guide](./upgrade-guide) explains what replaces it.

***

## Detect a deprecation programmatically

Because the headers ride along on every response, you can watch for them in your existing client
and alert before an endpoint ever fails — no need to check this page by hand.

<CodeGroup>
  ```javascript JavaScript theme={null}
  const response = await fetch(url, options);

  // Deprecated endpoints carry these headers on a normal 2xx response.
  const deprecation = response.headers.get("Deprecation");
  const sunset = response.headers.get("Sunset");

  if (deprecation || sunset) {
    const link = response.headers.get("Link");
    console.warn(`Deprecated: ${url} — deprecated ${deprecation}, sunset ${sunset}. See ${link}`);
  }

  // After the sunset date, the endpoint returns 410 Gone.
  if (response.status === 410) {
    throw new Error(`Endpoint ${url} is sunset. Migrate to its replacement.`);
  }
  ```

  ```python Python theme={null}
  response = requests.request(method, url, **options)

  # Deprecated endpoints carry these headers on a normal 2xx response.
  deprecation = response.headers.get("Deprecation")
  sunset = response.headers.get("Sunset")

  if deprecation or sunset:
      link = response.headers.get("Link")
      print(f"Deprecated: {url} — deprecated {deprecation}, sunset {sunset}. See {link}")

  # After the sunset date, the endpoint returns 410 Gone.
  if response.status_code == 410:
      raise RuntimeError(f"Endpoint {url} is sunset. Migrate to its replacement.")
  ```

  ```ruby Ruby theme={null}
  response = http.request(request)

  # Deprecated endpoints carry these headers on a normal 2xx response.
  deprecation = response["Deprecation"]
  sunset = response["Sunset"]
  link = response["Link"]

  if deprecation || sunset
    warn "Deprecated: #{url} — deprecated #{deprecation}, sunset #{sunset}. See #{link}"
  end

  # After the sunset date, the endpoint returns 410 Gone.
  raise "Endpoint #{url} is sunset. Migrate to its replacement." if response.code == "410"
  ```

  ```go Go theme={null}
  resp, err := client.Do(req)
  if err != nil {
  	log.Fatal(err)
  }
  defer resp.Body.Close()

  // Deprecated endpoints carry these headers on a normal 2xx response.
  deprecation := resp.Header.Get("Deprecation")
  sunset := resp.Header.Get("Sunset")

  if deprecation != "" || sunset != "" {
  	link := resp.Header.Get("Link")
  	log.Printf("Deprecated: %s — deprecated %s, sunset %s. See %s", url, deprecation, sunset, link)
  }

  // After the sunset date, the endpoint returns 410 Gone.
  if resp.StatusCode == http.StatusGone {
  	log.Fatalf("Endpoint %s is sunset. Migrate to its replacement.", url)
  }
  ```

  ```java Java theme={null}
  HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

  // Deprecated endpoints carry these headers on a normal 2xx response.
  String deprecation = response.headers().firstValue("Deprecation").orElse(null);
  String sunset = response.headers().firstValue("Sunset").orElse(null);

  if (deprecation != null || sunset != null) {
      String link = response.headers().firstValue("Link").orElse(null);
      System.out.printf("Deprecated: %s — deprecated %s, sunset %s. See %s%n", url, deprecation, sunset, link);
  }

  // After the sunset date, the endpoint returns 410 Gone.
  if (response.statusCode() == 410) {
      throw new IllegalStateException("Endpoint " + url + " is sunset. Migrate to its replacement.");
  }
  ```
</CodeGroup>

***

## How sunset dates depend on your version

You have until the **sunset date shown for your version** in the tables below. Which date applies
depends on the version you request:

* **On the current version, a short runway (\~6 months).** The replacement is already available,
  so a new integration should build against it from the start rather than adopt an endpoint that
  is already on its way out.
* **On earlier versions, a longer runway (\~18 months)** to migrate an existing integration. This
  runway ends on the endpoint's sunset date **or** that version's end-of-life, whichever comes
  first.

A far sunset date is the migration deadline for that endpoint on that version — not an announced
end-of-life for the version itself. Sunset dates are only ever extended, never pulled in without
a new announcement.

***

## Deprecated endpoints

These endpoints are still callable and return their normal response today, with deprecation
headers. Migrate to the successor before the sunset date that applies to your version. For the
request and response changes behind each replacement, see the
[Upgrade Guide](./upgrade-guide).

### Member aggregation endpoints

| Milestone | Date |
| :- | :- |
| Deprecated | 2026-09-29 |
| Sunset on `v20260929`+ | 2027-03-30 |
| Sunset on earlier versions | 2028-03-30 |

Paths are relative to `/users/{user_guid}/members/{member_guid}/`.

| Endpoint | Use instead |
| :- | :- |
| `POST …/verify` | [`…/account_verification`](/api-reference/platform-api/v20260929/reference/members/account-verification) |
| `POST …/aggregate` | [`…/transactions`](/api-reference/platform-api/v20260929/reference/members/aggregate-transactions) |
| `POST …/check_balance` | [`…/balance`](/api-reference/platform-api/v20260929/reference/members/aggregate-account-balances) |
| `POST …/extend_history` | [`…/transaction_history`](/api-reference/platform-api/v20260929/reference/members/aggregate-transaction-history) |
| `POST …/fetch_rewards` | [`…/rewards`](/api-reference/platform-api/v20260929/reference/rewards/aggregate-rewards) |
| `POST …/fetch_statements` | [`…/statements`](/api-reference/platform-api/v20260929/reference/statements/aggregate-statements) |
| `POST …/identify` | [`…/identity_verification`](/api-reference/platform-api/v20260929/reference/members/identity-verification) |
| `GET …/oauth_window_uri` | [`POST …/oauth/authorization_url`](/api-reference/platform-api/v20260929/reference/widgets/create-oauth-authorization-url) |

***

### Scheduled payments

| Milestone | Date |
| :- | :- |
| Deprecated | 2026-09-29 |
| Sunset (all versions) | 2028-03-30 |

Paths are relative to `/users/{user_guid}/insights/{insight_guid}/`.

| Endpoint | Use instead |
| :- | :- |
| `GET …/scheduled_payments` | [`…/repeating_transactions`](/api-reference/platform-api/v20260929/reference/insights/list-all-repeating-transactions-associated-with-an-insight) |

***

### Legacy endpoints (v20111101 only)

| Milestone | Date |
| :- | :- |
| Deprecated | 2023-11-09 |
| Sunset on `v20111101` | 2028-03-30 |

These are already sunset on `v20250224` and newer — see [Sunset endpoints](#sunset-endpoints).

| Endpoint | Use instead |
| :- | :- |
| `POST /users/{user_guid}/connect_widget_url` | [`POST /users/{user_guid}/widget_urls`](/api-reference/platform-api/v20260929/reference/widgets/request-widget-url) |
| `POST /payment_processor_authorization_code` | [`POST /authorization_code`](/api-reference/platform-api/v20260929/reference/processor-token/request-an-authorization-code) |

***

## Sunset endpoints

The endpoints that follow return `410 Gone`.

### Managed data endpoints

| Milestone | Date |
| :- | :- |
| Deprecated | 2025-08-12 |
| Sunset on all versions | 2026-09-29 |

These have no direct API replacement — to send data held at your institution to MX, use
[MDX Real Time](/products/connectivity/overview/held-data/mdx-real-time) until a replacement is
added to the Platform API.

| Endpoint |
| :- |
| `GET /managed_institutions` |
| `GET, POST /users/{user_guid}/managed_members` (+ `/{member_guid}`) |
| `GET, POST /users/{user_guid}/managed_members/{member_guid}/accounts` (+ `/{account_guid}`) |
| `GET, POST …/accounts/{account_guid}/transactions` (+ `/{transaction_guid}`) |

***

### Legacy endpoints

| Milestone | Date |
| :- | :- |
| Deprecated | 2023-11-09 |
| Sunset on `v20250224`+ | 2025-08-12 |

On `v20111101` these remain deprecated and callable until that version's end-of-life — see
[Legacy endpoints (v20111101 only)](#legacy-endpoints-v20111101-only).

| Endpoint | Use instead |
| :- | :- |
| `POST /users/{user_guid}/connect_widget_url` | [`POST /users/{user_guid}/widget_urls`](/api-reference/platform-api/v20260929/reference/widgets/request-widget-url) |
| `POST /payment_processor_authorization_code` | [`POST /authorization_code`](/api-reference/platform-api/v20260929/reference/processor-token/request-an-authorization-code) |

***

## Migrating

This page tells you **what** is deprecated and **when** it sunsets. For the **how** — the
exact request and response changes for each replacement — see the
[Upgrade Guide](./upgrade-guide).
