Expo adds support for FCM HTTP v1 API
Product••4 minutes read
Chris Walter
Engineering
Expo now supports the FCM HTTP v1 API. Follow the migration steps in this blog to switch your projects from the legacy API to the v1 API.

This June, Google is shutting down an old version of FCM, known as the FCM legacy API, and is requiring that all developers migrate to the FCM HTTP v1 API.
At Expo, we’ve added support for the FCM HTTP v1 API. However, the credentials for the FCM legacy API are different from the v1 API’s. This means we can’t automatically switch your projects from the legacy API to the v1 API without your uploading new credentials.
In this blog, we’ll walk you through the migration steps.
How to update to the new FCM v1 API
- Create your FCM v1 credential (
google-services.json): Visit the Firebase console. Under Settings → Service Accounts for your project, click the button to “Generate new private key” for the Firebase Admin SDK. - Upload your credential to EAS: Browse to the credentials page for your EAS project. Click on your Android application ID and find the section titled “FCM v1 service account key” from which you can upload your JSON credential. Alternatively, you can use EAS CLI to upload your credential. From the terminal, go to your project’s directory and run
eas credentials→ choose Android → choose production → choose Google Service Accounts → chooseFCM v1.Note: at this point, your project will still be using the FCM legacy API. - Test your app with FCM v1: To test the FCM v1 API, specify
?useFcmV1=truein your HTTP requests to the Expo push notification service (that is,https://exp.host/--/api/v2/push/send?useFcmV1=true). The Expo push notification service will default to using the FCM legacy API until May 13, 2024. After this date, it will default to using the FCM HTTP v1 API and you can remove theuseFcmV1query parameter from your requests. If the push ticket or push receipt is unexpectedly errant and differs from what you get back from using the FCM legacy API, double check your FCM v1 credential or try uploading a new one. If you continue to experience errors or failures without resolution, please reach out to us via support@expo.dev or on Discord to debug further. - Delete your FCM legacy credential token (optional): When you are fully satisfied the FCM v1 API is working well for you, you can delete your FCM legacy credential token from EAS. It’s also a good practice to revoke the token through the Firebase console. Deleting your FCM legacy credentials is optional. After Google shuts down the FCM legacy API, Expo will delete your leftover FCM legacy credentials from EAS.
FCM Timeline
- March 7 - May 13, 2024: The Expo push notification service will default to using the FCM legacy API. It will use FCM v1 if the HTTP request to send push notifications specifies
?useFcmV1=truein the request URL, or if the project has only an FCM v1 credential and no FCM legacy credential. - May 13 - June 20, 2024: The Expo push notification service will change its default; it will default to FCM v1. It will use the FCM legacy API if the HTTP request to send push notifications specifies
?useFcmV1=falsein the request URL, or if the projects has only an FCM legacy credential and no FCM v1 credential. - June 20, 2024: Google will shut down the FCM legacy API. The Expo push notification service will always use FCM v1. The
useFcmV1query parameter will have no effect and we recommend removing it. Projects that do not have an FCM v1 credential will no longer successfully send notifications until a valid credential is uploaded.
What's next? Expo push notifications UI
The strength of Expo push notifications has always been the ease of getting it set up. And in the next couple months we're going to introduce a new Expo push notifications UI to make it easier to observe the performance of your notifications. Expect to hear more about that feature when we roll it out in May.
In the meantime, if you're just researching push notifications services and would like to learn more about Expo push notifications check out this video tutorial from Supabase:

