# FCM Legacy API Shutdown: Fixing Push and the 2027 Deadline

> FCM legacy API shutdown: the legacy send APIs stopped from July 22, 2024, and InstanceId APIs end September 29, 2027. How to move push notifications to HTTP v1.

Canonical: https://app369.com/blog/fcm-legacy-api-shutdown-http-v1-migration-2026/
Last updated: 2026-11-01

[![Simon Dziak](https://app369.com/.netlify/images?w=48&amp;h=48&amp;fm=webp&amp;q=100&amp;url=%2Fimages%2Fszymon.jpg) **Simon Dziak** Founder & developer, App369](https://app369.com/about/szymon-dziak/) [LinkedIn](https://www.linkedin.com/in/szymondziak/)

Published October 18, 2026 · Updated November 1, 2026•Facts last verified October 21, 2026•8 min

App369https://app369.com/blog/fcm-legacy-api-shutdown-http-v1-migration-2026/

[← Back to Blog](https://app369.com/blog/)

## Key takeaways

- →Firebase deprecated sending through the legacy FCM HTTP and XMPP APIs on June 20, 2023, and began shutting them down on July 22, 2024. On October 21, 2026, the old fcm.googleapis.com/fcm/send endpoint returned 404.
- →The replacement is the FCM HTTP v1 API, authorized with short-lived OAuth 2.0 access tokens from a service account instead of a server key. Firebase recommends the Admin SDK, which handles the tokens for you.
- →A second deadline is coming: in September 2026 Firebase deprecated all InstanceId server APIs and the device group feature. Requests to them start failing after September 29, 2027.
- →If you manage topic subscriptions with an older Firebase Admin SDK, you are affected by the 2027 change. Firebase lists the minimum versions to upgrade to, such as Node.js 14.5.0 and Python 7.7.0.
- →Firebase's old migration guide URL now returns 404, so many tutorials that link to it lead nowhere. This page collects the dates, the steps and the current Firebase pages in one place.

Pricing an app? Try the free [app cost calculator](https://app369.com/tools/app-cost-calculator/) or get a range for your project in the [instant quote](https://app369.com/instant-quote/).

**If your app’s push notifications stopped arriving in mid-2024, your server was probably still using the legacy FCM API, which Firebase began shutting down on July 22, 2024.** The fix is on the server: send through the FCM HTTP v1 API, ideally with the Firebase Admin SDK, and replace the old server key with a service account. Then check the second deadline: the InstanceId server APIs and device groups stop working after September 29, 2027.

If you landed here from a tutorial that links to Firebase’s old migration guide, that page now returns 404. The dates and steps here come from Firebase’s own documentation, as listed in the sources, including an archived copy of that guide. I tested the old endpoint and guide URL myself on October 21, 2026.

**Disclosure:** App369 is my studio. I build and fix Flutter and Firebase apps for a living, including push notifications, and the last section mentions what I sell. Google doesn’t pay me for anything on this page.

## What changed, and when

| Date | What happened | Source |
| --- | --- | --- |
| June 20, 2023 | Firebase deprecates sending through the legacy FCM HTTP and XMPP APIs, including upstream messages | [Firebase (archived guide)](https://web.archive.org/web/20260108211426/https://firebase.google.com/docs/cloud-messaging/migrate-v1) |
| **July 22, 2024** | **Shutdown of the legacy send APIs begins** | [Firebase (archived guide)](https://web.archive.org/web/20260108211426/https://firebase.google.com/docs/cloud-messaging/migrate-v1) |
| September 2026 | Firebase deprecates all InstanceId server APIs and the device group feature | [Firebase FAQ](https://firebase.google.com/docs/cloud-messaging/troubleshooting#fcm-26-deprecation) |
| January 1, 2027 | New users can no longer start using the deprecated APIs | [Firebase FAQ](https://firebase.google.com/docs/cloud-messaging/troubleshooting#fcm-26-deprecation) |
| **September 29, 2027** | **Requests to the InstanceId server APIs and device group management start failing** | [Firebase FAQ](https://firebase.google.com/docs/cloud-messaging/troubleshooting#fcm-26-deprecation) |

Firebase says there is no service downgrade before September 29, 2027, so the second change gives you roughly a year from the announcement. The first one is already done.

### What the old addresses do today

Checked on October 21, 2026:

- A POST to `https://fcm.googleapis.com/fcm/send`, the legacy send endpoint, returned **404**.
- **firebase.google.com/docs/cloud-messaging/migrate-v1**, the migration guide most tutorials link to, returned **404**. The [Wayback Machine copy from January 2026](https://web.archive.org/web/20260108211426/https://firebase.google.com/docs/cloud-messaging/migrate-v1) still has the full text.
- **firebase.google.com/docs/cloud-messaging/http-server-ref**, the legacy protocol reference, redirects to Firebase’s server environment page.

## Moving sends to HTTP v1

1. **Find the old code.** Search your server, Cloud Functions and any scripts for `fcm.googleapis.com/fcm/send`, an `Authorization: key=` header, `registration_ids`, or an XMPP connection to FCM. Also check third-party tools or plugins that send pushes for you: any that were set up with an FCM server key need updating or replacing. If your app sends through Expo’s push service, Android delivery needs an FCM V1 service account key uploaded to EAS (Expo’s build service). The [Expo push notifications fix](https://app369.com/fix/expo-push-notifications-not-working/) covers that and the other common causes. The free [Firebase shutdown checker](https://app369.com/tools/firebase-shutdown-checker/) searches pasted server code for these in your browser.
2. **Use the Admin SDK if you can.** Firebase calls the Admin SDK the recommended method for sending from a server. It handles authorization and the new message format, and it can send the same message to a list of tokens for you.
3. **Or call HTTP v1 directly.** Send a POST to `https://fcm.googleapis.com/v1/projects/PROJECT_ID/messages:send` with an `Authorization: Bearer <access token>` header. The token is a short-lived OAuth 2.0 access token from a service account, requested with the `https://www.googleapis.com/auth/firebase.messaging` scope. Google’s auth libraries can request and refresh it.
4. **Change the message shape.** HTTP v1 wraps everything in a `message` object with exactly one target, such as a `token`, a `topic` or a `condition`. Platform settings move into `android`, `apns` and `webpush` blocks. There’s no `registration_ids` list. To reach many devices, send one request per token, use a topic or condition, or use the Admin SDK’s multi-token sending (sendEachForMulticast, up to 500 tokens per call), which sends each message to the v1 API for you.
5. **Enable the API.** If you get errors reaching the endpoint, check that “Firebase Cloud Messaging API” is enabled for the project in the Google Cloud console, as Firebase’s guide says.
6. **Keep the service account key off devices.** It belongs on your server or in a secret manager, never in the mobile app or a public repository. If a key was ever committed to a repository, replace it.
7. **Test with real devices.** Send a test message to an Android phone and an iPhone (and a web client, if you use FCM on the web), with the app in the foreground, in the background and closed, before you remove the old code path. Once nothing uses them, delete or restrict the old server keys so they can’t be leaked and reused.

Push failing only on iPhone, with “APNS token has not been set yet”? That’s an iOS setup problem in the app, not the server send: the [Flutter APNs token fix](https://app369.com/fix/flutter-apns-token-not-set/) walks through Firebase’s checks.

If the new send returns UNREGISTERED (404) for some devices, those tokens are no longer valid, for example after an uninstall or a token refresh. The [FCM token not registered fix](https://app369.com/fix/fcm-registration-token-not-registered/) covers what Firebase says to do with them.

## Before September 29, 2027

The second deprecation hits apps that used the older InstanceId server APIs or device groups, even if sending already moved to HTTP v1.

| If you use | It stops working | What to do instead |
| --- | --- | --- |
| InstanceId info API (`iid.googleapis.com/iid/info`) to check tokens | After September 29, 2027 | To validate a token, send through HTTP v1 with `validate_only` set to true. For topic info, use the new topic subscription API |
| InstanceId topic subscription APIs (`iid/v1/.../rel/topics`, `batchAdd`, `batchRemove`) | After September 29, 2027 | The new [FCM topic subscription API](https://firebase.google.com/docs/reference/fcm/fcmtopics/rest), or a current Admin SDK |
| InstanceId batch import (`iid/v1:batchImport`) to turn APNs tokens into FCM tokens | After September 29, 2027 | Send through Apple’s APNs directly, or add the FCM iOS SDK so the app registers itself |
| Device group management (`fcm.googleapis.com/fcm/notification` and similar) | After September 29, 2027 | Follow Firebase’s [guide to migrating off device groups](https://firebase.google.com/docs/cloud-messaging/migrate-off-device-groups) and send to individual tokens |
| Sending to a device group key through HTTP v1 | Group keys stop working after September 29, 2027 | Send to each device’s token instead |

If you manage topic subscriptions with the Firebase Admin SDK, Firebase says earlier versions are affected and lists the versions to upgrade to: Node.js 14.5.0 or later, Python 7.7.0 or later, Java 9.11.0 or later, Go 4.22.0 or later, and .NET 3.7.0 or later.

For every other dated Apple, Google Play and Firebase requirement in 2026 and 2027, see [App Store and Google Play deadlines for 2026 and 2027](https://app369.com/blog/app-store-google-play-deadlines-2026-2027/).

## Need a hand?

If pushes still don’t arrive after the move, or you’re not sure which parts of your backend touch the old APIs, the [App Fix Ticket](https://app369.com/fixed-price/flutter-firebase-bug-fix/) covers API, webhook and Cloud Function errors in two fixed-price steps. A $450 Diagnosis gives you the root cause with evidence and a fixed repair quote within 3 business days, credited toward the fix. If you go ahead, the $1,200 Fix takes 5 business days. For help with something else in a Firebase app, see [how to debug a Flutter and Firebase bug](https://app369.com/blog/how-to-debug-a-flutter-firebase-bug-2026/), or [send me a short description](https://app369.com/contact/).

## **Want this done at a fixed price?**

Fixed scope, fixed price, paid upfront. The work happens in writing; no call needed.

- [**App Fix Ticket**from $450One reproducible bug in an existing mobile or web app, diagnosed and fixed.](https://app369.com/fixed-price/flutter-firebase-bug-fix/)

## **Frequently asked questions**

<dl>

<dt>**Why did my Firebase push notifications stop working in 2024?**</dt>
<dd>Most likely your server still sent through the legacy FCM API (fcm.googleapis.com/fcm/send, with a server key). Firebase deprecated those APIs on June 20, 2023 and began shutting them down on July 22, 2024. Move your server to the HTTP v1 API or the Firebase Admin SDK.</dd>

<dt>**What replaced the FCM server key?**</dt>
<dd>A short-lived OAuth 2.0 access token derived from a service account. The Firebase Admin SDK creates and refreshes it for you. If you call the HTTP v1 API directly, you request the token yourself and send it as a Bearer token.</dd>

<dt>**Is the FCM legacy API completely gone?**</dt>
<dd>For sending, yes. On October 21, 2026, a POST to fcm.googleapis.com/fcm/send returned 404. Some related legacy endpoints, such as the InstanceId server APIs and device group management, still work until September 29, 2027, and then start failing.</dd>

<dt>**What is changing on September 29, 2027?**</dt>
<dd>Firebase is decommissioning all InstanceId server APIs (iid.googleapis.com, used for token info, topic subscriptions and batch import of APNs tokens) and the device group feature. After that date, requests to those APIs fail and device group tokens stop working with the HTTP v1 send API. New users can't start using them after January 1, 2027.</dd>

<dt>**Do I need to change my Flutter, Android or iOS app?**</dt>
<dd>Usually not for the send migration, because the change is on your server. The exceptions: apps that sent upstream messages from the device, which were deprecated along with the legacy APIs; apps that relied on device groups; and iOS setups that used server-side batch import of APNs tokens, which the FCM iOS SDK replaces.</dd>

<dt>**Where is the official FCM migration guide now?**</dt>
<dd>The old URL, firebase.google.com/docs/cloud-messaging/migrate-v1, returned 404 on October 21, 2026. The Wayback Machine has a copy from January 2026. The current Firebase pages for sending are the HTTP v1 send guide and the server environment page, both linked in the sources.</dd>

</dl>

## **Sources**

1. [Firebase, "Migrate from legacy FCM APIs to HTTP v1" (Wayback Machine copy, January 8, 2026)](https://web.archive.org/web/20260108211426/https://firebase.google.com/docs/cloud-messaging/migrate-v1)
2. [Firebase, Cloud Messaging FAQ and troubleshooting (FCM legacy API deprecations, September 2026)](https://firebase.google.com/docs/cloud-messaging/troubleshooting#fcm-26-deprecation)
3. [Firebase, send messages with the HTTP v1 API](https://firebase.google.com/docs/cloud-messaging/send/v1-api)
4. [Firebase, FCM server environment](https://firebase.google.com/docs/cloud-messaging/server-environment)
5. [Firebase, FCM topic subscription REST API](https://firebase.google.com/docs/reference/fcm/fcmtopics/rest)
6. [Firebase, migrate off device groups](https://firebase.google.com/docs/cloud-messaging/migrate-off-device-groups)
7. [Google, InstanceId server reference](https://developers.google.com/instance-id/reference/server)

Tags

#fcm legacy api shutdown #fcm http v1 migration #fcm server key deprecated #fcm/send 404 #firebase push notifications stopped working #fcm device groups deprecated #instanceid api deprecated #iid.googleapis.com #fcm topic subscription api #firebase admin sdk messaging

Generated from app369.com . © 2026 App369. All rights reserved.

**Share:**

[Share on Twitter](https://twitter.com/intent/tweet?text=FCM%20Legacy%20API%20Shutdown%3A%20Fixing%20Push%20and%20the%202027%20Deadline&amp;url=https%3A%2F%2Fapp369.com%2Fblog%2Ffcm-legacy-api-shutdown-http-v1-migration-2026%2F) [Share on LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fapp369.com%2Fblog%2Ffcm-legacy-api-shutdown-http-v1-migration-2026%2F) [Share on Facebook](https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fapp369.com%2Fblog%2Ffcm-legacy-api-shutdown-http-v1-migration-2026%2F)

## **Related Resources **

[Firebase Deprecations: Every Shutdown Date, 2024 to 2027](https://app369.com/blog/firebase-deprecations-shutdown-dates-2026/) [Firebase Test Lab Shutting Down: Alternatives for 2027](https://app369.com/blog/firebase-test-lab-shutting-down-alternatives-2027/) [Firebase Studio Shutting Down: How to Migrate by March 2027](https://app369.com/blog/firebase-studio-shutting-down-migrate-project-2027/) [Android Things Shut Down: What to Run Your Device App On in 2026](https://app369.com/blog/android-things-shut-down-device-app-alternatives-2026/) [goo.gl Shut Down: Which Google Short Links Still Work in 2026](https://app369.com/blog/google-url-shortener-goo-gl-shut-down-2026/) [Google Play Games Services v1 Shutdown 2027: Migrate to v2](https://app369.com/blog/play-games-services-v1-shutdown-migrate-to-v2-2027/)

## **Related guides **

[<h3>**Deep Linking in 2026: What Replaced Firebase Dynamic Links and How to Set It Up**</h3>Firebase Dynamic Links alternative: it shut down August 25, 2025. How to set up Universal Links and Android App Links in 2026, with prices checked Oct 17, 2026.**Read more **](https://app369.com/blog/firebase-dynamic-links-shutdown-deep-linking-2026/) [<h3>**How to Debug a Flutter and Firebase Bug: Find the Root Cause (2026)**</h3>Find the root cause of a Flutter and Firebase bug: reproduce it, read the right logs, isolate it with the Emulator Suite, and fix the five most common issues.** Read more **](https://app369.com/blog/how-to-debug-a-flutter-firebase-bug-2026/) [<h3>**Firebase Security Rules Best Practices: The Complete Guide (2026)**</h3>Firebase security rules best practices for 2026 in one table: deny-all baseline, update checks, custom claims, validation, emulator tests and Cloud Functions.** Read more **](https://app369.com/blog/firebase-security-guide-2026/)