ECONNREFUSED error when sending push notifications

I’m using Expo to send push notifications with my node.js server as described in

I keep getting this kind of error :

FetchError: request to failed, reason: connect ECONNREFUSED

and this as well :

FetchError: request to failed, reason: connect ECONNREFUSED

Is it simply the expo infrastructure failing? Or is my request being rejected for some reason?

I also get this error very frequently:

Error: Expo responded with an error with status code 504: <html>
<head><title>504 Gateway Time-out</title></head>
<center><h1>504 Gateway Time-out</h1></center>

This error normally means that the software on the remote server is not listening on the port you’re trying to connect to. e.g. it crashed and has not yet been restarted. If this is the case it would mean that it is not your specific request that is being rejected.

There’s also a possibility that there’s something in between you and the server that is interfering with the traffic. Either a transparent proxy server or a firewall. This seems less likely to me.

The “Gateway Time-out” error indicates a proxy of some kind, but it could be on Expo’s servers rather than between you and Expo’s servers.

I have not yet needed push notifications, so I haven’t experienced this myself, but I haven’t noticed others complaining about the same thing on the forums, so I’m not sure how common this is.
Is there any pattern to the errors? Certain times of day when they are more likely? What percentage of times do you get the errors? If it fails, how long is it until it starts working again?

Either way it seems best to queue up the notifications and retry them if they fail.

1 Like


Randomly I have similar issue. The recent one is happening right now, with a response in body :

<head><title>504 Gateway Time-out</title></head>
<center><h1>504 Gateway Time-out</h1></center>
1 Like

We’re getting this too. Nothing mentioned on :confused:

Someone else got a 503 error rather than a 504 error, but they might both have the same cause. See this message from one of the Expo team members:

Hi we are getting this error too. We have an expo app for our partner businesses and we sometimes encounter server error 504. This is on a production server!

Screen Shot 2020-01-13 at 1.57.05 PM|690x357

This is the logs from our node.js server hosted on heroku. Any idea on how to fix this?

1 Like

FYI: Receiving the same error message.

I have the same problem with the same config. Did you find a way to manage it ?

Hi Expo team,
I’m experiencing the same issue. Captured error from my notificaton function: Expo responded with an error with status code 504…

504 Gateway Time-out

History here is suggesting that similar issues in the past had to do with Expo server stability. May I check that is it something with Expo again or is it my code?

Here’s a snippet of my Firebase function:

return admin.firestore().getUserNotificationTokensSnapshot()
.then( snapshot => {
let notificationTokens = {}

        snapshot.forEach( doc => {
            const docID =
            const docData =
            if ( docData.notification ) {

                const { expoToken } = docData.notification

                const tokenString = getTokenStringFromToken(expoToken)

                if ( tokenString ) {
                    notificationTokens[docID] = tokenString

        const userIDs = Object.keys(notificationTokens)
        const now =

        const notificationObjectKey = `${type}-${uid}-${now}`

        let messages = []

        for ( let i=0; i<userIDs.length; i++ ) {
            const pushToken = notificationTokens[userIDs[i]]
            if (Expo.isExpoPushToken(pushToken)) {
                    to: pushToken,
                    sound: 'default',
                    data: {...notificationData, notificationObjectKey},

        let chunks = expo.chunkPushNotifications(messages)
        let tickets = []

        return Promise.all( => {
            return expo.sendPushNotificationsAsync(chunk)
                .then( ticketChunk => {
                    return Promise.resolve(true)
            .then( _ => {
                let receiptIds = [];
                for (let ticket of tickets) {
                    if ( {

                //function to update receipts in the firebase 
            .then( _ => {
                return {
                    success: true
            .catch( e => {
                console.log('err: ', e.message)
                return {
                    success: false,
                    errorCode: 'unknown',
                    errorMessage: e.message