What do you mean by messed up?
Same problem here.
Push notifications had been working on my Traccar 4.15 server for the last 4 years, until they suddenly stopped working in 21/22 October 2026.
I noticed that my push notifications API key in traccar.org/my-account had changed, which had never happened before. I updated notificator.traccar.key in conf/traccar.xml and restarted the server. I then deleted notificationTokens from my user attributes, logged out and logged back in, and checked that a new notificationTokens value had been generated. Email and web popup notifications work, but I no longer receive push notifications.
To rule out the age of my version, I tested the push endpoint manually with both request formats: the one sent by 4.15, and the one sent by the current master (which adds "type":"manager" and "priority"). In both cases I used POST https://www.traccar.org/push/ with the header "Authorization: key=<key>".
Format used by 4.15:
curl -s -m 20 -w '\nHTTP %{http_code}\n' -X POST https://www.traccar.org/push/ \
-H "Authorization: key=$KEY" -H 'Content-Type: application/json' \
-d "{\"registration_ids\":[\"$TOK\"],\"notification\":{\"title\":\"test old\",\"body\":\"4.15 format\",\"sound\":\"default\"}}"
{"successCount":0,"failureCount":1,"responses":[{"success":false,"error":{"code":"messaging/registration-token-not-registered","message":"NotRegistered"}}]}
HTTP 200
Format used by current master:
curl -s -m 20 -w '\nHTTP %{http_code}\n' -X POST https://www.traccar.org/push/ \
-H "Authorization: key=$KEY" -H 'Content-Type: application/json' \
-d "{\"type\":\"manager\",\"registration_ids\":[\"$TOK\"],\"notification\":{\"title\":\"test new\",\"body\":\"master format\",\"sound\":\"default\"},\"priority\":true}"
{"successCount":0,"failureCount":1,"responses":[{"success":false,"error":{"code":"messaging/registration-token-not-registered","message":"NotRegistered"}}]}
HTTP 200
Both formats give exactly the same response, so upgrading Traccar would not change anything: the request is accepted (HTTP 200, no 401, so the API key is valid), but the freshly generated device token is rejected. This points to a problem on the traccar.org push service side, not to my configuration or to the age of my version.
Can anyone confirm, and can the Traccar team check the push service?
The messaging/registration-token-not-registered error is coming directly from Firebase. I just tested same requests with my own token and everything worked as expected.
What do you mean by messed up?
Messed up as in vanished from the user's attributes. Saw the same thing with another user (using another Traccar instance). After he logged out and in on the Traccar Manager app, the 'notification tokens' reappeared in his attributes. (He didn't confirm yet whether his app reports 'push notifications' again.)
Follow up: the user confirms that his 'push notifications' work again after logging out and in of the Traccar Manager app.
Might be interesting to investigate why the 'notification tokens' disappeared, at least I know now what to look for if it should happen again.
Server removes old tokens when they expire. It's possible that it's a corner case where new token wasn't registered yet. We are releasing an update to Traccar Manager to fix that corner case.
Thanks Anton. Some more data, all with the official Traccar Manager from the Play Store:
So it looks like the app registers a different kind of token depending on the server, and the push service only accepts the short one. How does the app decide which one to send, and is there a way to get the short one with a 4.15 web UI? Or is upgrading the server the only option?
Follow-up after reading the code. Both traccar-web and traccar got a "Support Firebase registration ids" commit on Oct 18, 2026, three days before my push notifications stopped:
So the Manager app seems to send the short ID to servers that support it and the classic FCM token to older ones, which is what I see on 4.15. Please note that your test with your own token most likely used a short ID, which works for me too. What fails is the classic long token that the app still registers for older servers (142 characters, freshly generated).
Could you test the push service with a long FCM registration token, not a short ID? If it is rejected, then 4.15 and other older servers lost push notifications on Oct 18-21, and I'd like to know whether that is intended.
Follow-up: I solved it without upgrading the server.
I patched the Traccar Web 4.15 UI so that it talks to the Manager app and handles notification tokens the same way the current master does. After that, the updated Manager app registers the new Firebase registration ID, and push notifications work again on my 4.15 server.
So the problem is not the API key. The current Manager app together with the new push service update no longer work with the old 4.x web UI as it is.
Old tokens should still work, so it has nothing to do with the web logic.
Thanks, but my tests say otherwise.
So in practice the web logic is exactly what decides which token the app registers.
I see that 3117f977a still sends non-22-character values through addToken, so on paper old tokens are supported. In practice Firebase rejects them, even one freshly generated by the current Manager connected to a 4.x server. Also, 28ec741e drops all long tokens as soon as a 22-character ID arrives, which suggests they're considered superseded.
If old tokens are supposed to keep working, then something is wrong on the push service or app side. Could you try a long token (142/163 characters) from the current app connected to a 4.x server, rather than a 22-character ID?
Just for reference.
With old long notificationstoken generated with official Traccar Manager before patching the server 4.15 web logic:
curl -s -m 20 -w '\nHTTP %{http_code}\n' -X POST https://www.traccar.org/push/ \
-H "Authorization: key=$KEY" -H 'Content-Type: application/json' \
-d "{\"registration_ids\":[\"$TOK\"],\"notification\":{\"title\":\"test old\",\"body\":\"4.15 format\",\"sound\":\"default\"}}"
{"successCount":0,"failureCount":1,"responses":[{"success":false,"error":{"code":"messaging/registration-token-not-registered","message":"NotRegistered"}}]}
HTTP 200
With new short notificationstoken generated with official Traccar Manager after patching the server 4.15 web logic:
curl -s -m 20 -w '\nHTTP %{http_code}\n' -X POST https://www.traccar.org/push/ \
-H "Authorization: key=$KEY" -H 'Content-Type: application/json' \
-d "{\"registration_ids\":[\"$TOK\"],\"notification\":{\"title\":\"test old\",\"body\":\"4.15 format\",\"sound\":\"default\"}}"
{"successCount":1,"failureCount":0,"responses":[{"success":true,"messageId":"projects/traccar-manager-app/messages/0:1792653045674501%5efg29695eeb2969"}]}
HTTP 200
How do you get a long token with the current manager app?
It is enough to login with Traccar Manager 6.2.3 in a Traccar server 4.15, it will be generated a long token that is discarded by firebase.
That doesn't make sense. Token is generated by the app and it should be a short one.
That is good to know for next time.
Mainly yes. But the 'notification tokens' for my user were messed up (by an update of the app?). Logging out and in of the Traccar Manager app fixed it.