Guides
Wallets
Connect a public key from Ledger, Trezor, a file, or paste it. What it can and can't do.
Perly Pay makes a new address for every invoice from your wallet's public key. The money goes straight to that address — it's yours from the first second.
What a public key can and can't do
| It can | It can't |
|---|---|
| Make your receiving addresses | Spend, sign or move anything |
| Let us watch them for payments | Be turned into your private key |
| Show the payments it received | Change where money goes |
A public key does show every address it makes and what they received. That's why we keep it sealed (AES-256) and never show it back in full.
Four ways to connect
| From | How | Keys |
|---|---|---|
| Ledger | Plug in, open the Bitcoin app (2.1.0 or newer — update it in Ledger Live) or the Ethereum app, press Read from Ledger. The browser reads the public key; you confirm on the device. | BTC and EVM |
| Trezor | Same, through Trezor's own connect window. | BTC and EVM |
| File | Export watch-only from Sparrow, Electrum or your wallet and drop the file. | BTC |
| Paste | Paste a zpub/xpub, or a list of addresses you own. | BTC and EVM |
Which keys
| Family | Path | Looks like |
|---|---|---|
| Bitcoin | m/84'/0'/0' (native SegWit) | zpub6r… or xpub6C… |
| USDC, USDT, USDT0 (every EVM network) | m/44'/60'/0'/0 | xpub6E… |
One EVM key serves Base, Arbitrum, Optimism and Ethereum: an address is the same on all four.
Check the first address
After connecting, we show your first address. Find the same one in your wallet (Ledger Live, Trezor Suite, Sparrow). If they match, confirm — that proves the key is yours and the path is right.
Use a fresh account
Old payments to an address never pay a new invoice — only money that arrives after the invoice opens counts. Still, a fresh account keeps your books clean and your history private.
Seeing every payment in your wallet
Each invoice gets the next address of your key. Wallets list those addresses in their own ways.
Bitcoin
Invoices take receive addresses 0, 1, 2… of the native SegWit account m/84'/0'/0', and the dashboard names them that way. Ledger Live and Trezor Suite show it as a plain Native SegWit account — nothing to set up. For more control, open the same account in Sparrow: connect the device, pick Native SegWit, m/84'/0'/0'.
USDC and USDT
Invoices take m/44'/60'/0'/0/0, m/44'/60'/0'/0/1, m/44'/60'/0'/0/2…: the BIP44 standard path, with the number at the end. The dashboard calls them account 1, 2, 3. Trezor uses this path itself, so Trezor Suite, Rabby and MetaMask list them the same way.
m/44'/60'/0'/0/0, m/44'/60'/1'/0/0… Account 1 is its first Ethereum account too. From account 2 on, it does not list them on Base, Arbitrum or Optimism, and on Ethereum it stops at the first address that never received anything. The money is there and your Ledger signs for it — open it in Rabby or MetaMask.| Wallet | To see accounts 2, 3, … from a Ledger |
|---|---|
| Rabby | Add the Ledger, then Advanced Settings → Select HD path → BIP44. Not Ledger Live, not Legacy. |
| MetaMask | Add a hardware wallet → Ledger, then Select HD path → BIP44 Standard (e.g. MetaMask, Trezor). Not Ledger Live, not Legacy (MEW / MyCrypto). |
Both then list the addresses in order: account 2 in your dashboard is the second one there.
Unpaid invoices and the gap
Wallets look 20 empty addresses ahead. If many invoices go unpaid in a row, payments can sit past that gap. The dashboard tells you when; raise the gap limit in Sparrow or Electrum, or add the next accounts in Rabby or MetaMask.