Skip to content

AI & TechnologyFCM Legacy API Shutdown: Fixing Push and the 2027 Deadline

Simon Dziak
Simon Dziak
Founder & developer, App369
LinkedIn
October 18, 20268 min

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 18, 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 or get a range for your project in the 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 18, 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

DateWhat happenedSource
June 20, 2023Firebase deprecates sending through the legacy FCM HTTP and XMPP APIs, including upstream messagesFirebase (archived guide)
July 22, 2024Shutdown of the legacy send APIs beginsFirebase (archived guide)
September 2026Firebase deprecates all InstanceId server APIs and the device group featureFirebase FAQ
January 1, 2027New users can no longer start using the deprecated APIsFirebase FAQ
September 29, 2027Requests to the InstanceId server APIs and device group management start failingFirebase FAQ

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 18, 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 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.
  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, which still makes one request per token behind the scenes.
  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.

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 useIt stops workingWhat to do instead
InstanceId info API (iid.googleapis.com/iid/info) to check tokensAfter September 29, 2027To 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, 2027The new FCM topic subscription API, or a current Admin SDK
InstanceId batch import (iid/v1:batchImport) to turn APNs tokens into FCM tokensAfter September 29, 2027Send 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, 2027Follow Firebase's guide to migrating off device groups and send to individual tokens
Sending to a device group key through HTTP v1Group keys stop working after September 29, 2027Send 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.

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 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, or send me a short description.

Frequently asked questions

Why did my Firebase push notifications stop working in 2024?
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.
What replaced the FCM server key?
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.
Is the FCM legacy API completely gone?
For sending, yes. On October 18, 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.
What is changing on September 29, 2027?
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.
Do I need to change my Flutter, Android or iOS app?
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.
Where is the official FCM migration guide now?
The old URL, firebase.google.com/docs/cloud-messaging/migrate-v1, returned 404 on October 18, 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.

Sources

  1. Firebase, "Migrate from legacy FCM APIs to HTTP v1" (Wayback Machine copy, January 8, 2026)
  2. Firebase, Cloud Messaging FAQ and troubleshooting (FCM legacy API deprecations, September 2026)
  3. Firebase, send messages with the HTTP v1 API
  4. Firebase, FCM server environment
  5. Firebase, FCM topic subscription REST API
  6. Firebase, migrate off device groups
  7. Google, InstanceId server reference
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
Share:

Related Resources

Related guides