Request
POST /v1/data/wallets · Required scope: view:wallets (pro and ultra tiers)
At least one of wallet_type, chain_primary, start_date, or end_date
is required.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
wallet_type | string | null | One of the four required | — | Wallet application name, e.g. "MetaMask", "Exodus" |
chain_primary | string | null | See above | — | Primary chain, e.g. "ethereum", "bitcoin", "solana" |
start_date | string (date-time) | null | See above | — | Inclusive start filter, clamped by query_window_days |
end_date | string (date-time) | null | See above | — | Inclusive end filter |
sort_direction | asc | desc | No | desc | Must stay constant across pages |
cursor | string | null | No | — | Pagination token |
limit | integer | No | 25 | 1–500, clamped to your tier’s max_rows |
Example request
Response
200 OK — array of WalletRecord, cursor-paginated.
| Field | Description |
|---|---|
victim_id | SHA-256 victim ID — use with Victim Profiles |
family | Stealer family that captured this wallet |
wallet_type | Wallet application, e.g. "MetaMask", "Exodus" |
wallet_kind | browser_extension, desktop_app, etc. |
browser / profile | Browser the extension was installed in, if applicable |
extension_id | Browser extension ID, may be null for desktop wallets |
source_dir | Path/directory the wallet data was harvested from |
wallet_storage_format | Storage format of the wallet vault |
chain_primary | Primary chain, e.g. "ethereum", "bitcoin", "solana" |
evm_addresses, btc_addresses, tron_addresses, solana_addresses, cosmos_addresses, ton_addresses, other_addresses | Wallet addresses extracted per chain |
vault_kdf / vault_iterations | Key-derivation parameters for the encrypted vault, may be null |
password_hint | User-set password hint, may be null |
windows_username | OS username the wallet was found under |
has_wallet_files | true if raw wallet files were captured |
has_seed_phrase | true if a seed phrase was captured |
has_private_key | true if a private key was captured |
has_encrypted_vault | true if an encrypted vault file was captured |
inserted_at | When the record was ingested |
Pagination
Cursor-paginated — see Pagination.Errors
| Status | code | Cause |
|---|---|---|
| 400 | VALIDATION_ERROR | None of wallet_type, chain_primary, start_date, end_date provided |
| 400 | INVALID_CURSOR | Tampered or stale cursor |
| 403 | FORBIDDEN_SCOPE | Key lacks view:wallets (free tier) |
Tier notes
This endpoint requiresview:wallets, which is not included on the free
tier — a free-tier key receives 403 FORBIDDEN_SCOPE. seed_phrase,
private_key, encrypted_vault, and wallet_files are never returned as
raw values — they are always reduced to has_seed_phrase, has_private_key,
has_encrypted_vault, and has_wallet_files boolean flags on free/pro
tiers. See Data Masking.