Setting the file. One moment.
Skill 82 · Importing Push Tokens
Subchapter 82.1
references/exporting-devices.mdMarkdown3 KBView on GitHub
Each platform stores the same three facts under different names: the device token, the platform, and the user ID your app gave it. APIs and export screens change, so check the platform’s current docs before relying on a field name.
| Platform | Where the devices are | Token field | User ID field |
|---|---|---|---|
| OneSignal | POST /players/csv_export (CSV of subscriptions), or the dashboard CSV export | identifier (push rows only) | external_user_id, which you must request in extra_fields |
| Braze | POST /users/export/ids or a segment export | push_tokens[].token, with push_tokens[].platform and app | external_id |
| Customer.io | People → Export to CSV → Export other → All devices in this workspace | the device id | the person’s id |
| Airship | GET /api/channels (paged), or GET /api/named_users | push_address | named_user_id |
| Firebase (own backend) | Your own database. FCM has no API that lists tokens | the token your app saved | the user ID saved next to it |
invalid_identifier is t, or notification_types is negative. These rows can still carry a token, and an imported token can be sent to again. Also drop rows with a null token. device_type tells iOS from Android.external_id and cannot be mapped.push_address or no named_user_id cannot be imported. device_type is ios or android.firebase channel even for iOS devices.Expo tokens (ExponentPushToken[...]) cannot be imported anywhere. They only work through Expo’s push service. The app has to read the native token with getDevicePushTokenAsync and register it through the PostHog SDK, which happens as people open the updated app.