I need to import from a non-supported 3rd party password manager. The ProtoPass JSON format looks the most promising, but I can’t find details on the Id values. They appear to be some type of encoded hash or GUID, but I’m unfamiliar with how to generate them. I would appreciate any pointers on how to get the details. Thanks!
To get the JSON format for inspection, I created a dummy ProtoPass Vault with a variety of item types (Password, Identity, etc.) and then exported the vault. I can easily produce the JSON from my own password data, but the Ids are the only thing I’m uncertain about.
I also looked through the Proton Github repos, but found nothing… only a deadend to some backend notification call to “items::import”, but I couldn’t find way service or method that refers to.
You might have an easier time converting to a different format which Proton Pass can import, rather than the Proton Pass export format. eg. Convert your file to the Bitwarden JSON format (Bitwarden provide examples and documentation on their format) and then import that file into Proton Pass instead. (IIRC they support Bitwarden’s format)
Is there a reason you can’t use the generic CSV format?
Regardless, I have tested and it doesn’t look like those IDs are used during import. Import works perfectly fine with a Zipfile containing an unencrypted JSON file, as formatted by ProtonPass export, with all those base64 strings (
itemId
,itemUuid
,shareId
) removed or blanked out:JSON example
{ "encrypted": false, "userId": "", "vaults": { "": { "name": "test", "description": "", "display": { "color": 0, "icon": 0 }, "items": [ { "data": { "metadata": { "name": "test-login", "note": "" }, "extraFields": [], "type": "login", "content": { "itemEmail": "", "password": "password", "urls": [], "totpUri": "", "passkeys": [], "itemUsername": "username" } }, "state": 1, "aliasEmail": null, "contentFormatVersion": 6, "createTime": 1733128994, "modifyTime": 1733128994, "pinned": false } ] } }, "version": "1.25.0" }
When re-exporting those imported values, they have new IDs even when you include the old IDs from the original export, so they’re obviously not being used. My guess is they’re just some sort of random UUID.