Skip to main content
GET
Search and filter wallet profiles across your project with advanced filtering capabilities. You can look up an exact wallet address, run a free-text search across addresses and social fields, and combine that with structured filters in the request body.

Authentication

This endpoint requires authentication using a Workspace API Key with profiles:read permission. Include the API key in your request headers:
The API key needs to have the read permission for profiles in the API settings. You can configure this in your workspace API key settings.

Query Parameters

address

Filter by a specific wallet address (exact match). Accepts an EVM address, a Solana address, or an ENS name (e.g. vitalik.eth) which is resolved to an address before filtering. An unresolvable ENS name or an otherwise invalid value returns a 400 BAD_REQUEST.
Case-insensitive free-text search across wallet addresses and all supported social fields. This includes values from both global wallet profiles and project-scoped identify overrides.

expand

Comma-separated list of optional sections to include in each profile response. Supported values:
  • apps - DeFi app interactions and balances
  • chains - Per-chain activity metrics
  • tokens - Token holdings
  • labels - Wallet labels
Expanding fields like chains, tokens, or apps increases response size and latency. The collections are capped at 50 items each.

order_by

Field to sort results by. Supported values:
  • last_onchain (default) - Last on-chain activity timestamp
  • first_onchain - First on-chain activity timestamp
  • net_worth_usd - Total net worth
  • updated_at - Last profile update timestamp
  • tx_count - Total transaction count
  • first_seen - First seen timestamp in your app
  • last_seen - Last seen timestamp in your app
  • num_sessions - Number of sessions
  • revenue - Total revenue
  • volume - Total volume
  • points - Total points

order_dir

Sort direction:
  • desc (default) - Descending order
  • asc - Ascending order

page

1-indexed page number to return.
  • Default: 1

size

Page size - number of profiles per page.
  • Default: 100
  • Maximum: 1000

Request Body (Filters)

The search endpoint supports rich filtering capabilities through a JSON request body. The body contains a filter object with conditions and logic.

Filter Schema

Filter Condition

Each condition in the conditions array has:

Operators


Field Reference

User Fields (users.*)

Filter by user engagement and profile data. Use the format users.{attribute}.

Profile Fields

Example - Find users with net worth > $10,000:
Example - Find high-volume users:

Engagement Fields

Example - Find mobile users from the US:

UTM & Referral Fields

Example - Find users from Google Ads campaign:

Lifecycle Filter

Filter by user lifecycle stage. Valid values: At Risk, Churned, New, Power user, Resurrected, Returning. Example - Find new and power users:

Social Fields

Social fields support two modes:
  • Presence checks: use an empty string value to match profiles where the field is present.
  • Value matching: use eq, neq, or contains with a non-empty string to match the actual social value.
Example - Find users with any email present:
Example - Find users with both ENS and Farcaster present:
Example - Find users whose Twitter contains bob:
Example - Find an exact email match:

Chain Filters (chains.*)

Filter by per-chain net worth. Supports filtering across all chains or specific chains.

All Chains

Use chains.balance to filter across all chains (returns profiles where any chain matches). Example - Find users with >$1,000 on any chain:

Specific Chain

Use chains.{chain_id}.balance to filter on a specific chain. Common chain IDs:
  • 1 - Ethereum Mainnet
  • 137 - Polygon
  • 42161 - Arbitrum One
  • 10 - Optimism
  • 8453 - Base
  • 56 - BNB Chain
  • 43114 - Avalanche
Example - Find users with >$5,000 on Ethereum:
Example - Find users with >$1,000 on both Ethereum and Polygon:

App Filters (apps.*)

Filter by DeFi app interactions and balances.

All Chains

Use apps.{app_id}.balance to filter by app balance across all chains. Example - Find users with >$1,000 in Uniswap:

Specific Chain

Use apps.{chain_id}.{app_id}.balance to filter by app balance on a specific chain. Example - Find users with >$500 in Aave on Ethereum:

Token Filters (tokens.*)

Filter by token holdings. Supports optional scope and appId parameters.

Token Filter Parameters

All Chains

Use tokens.{token_address}.balance to filter by token balance across all chains. Example - Find users holding >1000 USDC (any chain):

Specific Chain

Use tokens.{chain_id}.{token_address}.balance to filter by token balance on a specific chain. Example - Find users with >500 USDC on Ethereum:

Protocol-Specific Token Filters

Use scope: "protocol" with appId to filter for tokens deposited in a specific DeFi protocol. Example - Find users with USDC deposited in any protocol:
Example - Find users with USDC deposited in Aave V3:
Example - Find users with ETH staked in Lido:

Label Filters (labels.*)

Filter by wallet labels. Use the format labels.{tag_id}. Common label IDs:
  • coinbase.verified_account - Coinbase verified account (boolean)
  • coinbase.verified_country - Coinbase verified country code
  • coinbase.verified_coinbase_one - Coinbase One membership (boolean)
  • sanctions.designated - Sanctioned address (boolean)
  • passport.models_aggregate_score - Passport aggregate score (0-100)
  • passport.unique_humanity_score - Passport uniqueness score
Example - Find Coinbase verified users:
Example - Find US-verified Coinbase users:
Example - Find users with high Passport score:

Combined Filter Examples

High-Value Web3 Users

Find users with >$10,000 net worth, ENS name, and activity on Ethereum:

Active DeFi Users

Find users with activity in Uniswap or Aave:

Verified Power Users

Find Coinbase-verified power users from specific countries:

Multi-Chain Whales

Find users with significant holdings across multiple chains:

Response

The response is a paginated envelope of wallet profiles.

Response Fields

Profile Fields

Each profile in the data array includes:

Error Responses

Authorizations

Authorization
string
header
required

Workspace API key (e.g. formo_xxx). Create one in the Formo dashboard under Team Settings > API Keys.

Query Parameters

address
string

Filter by wallet address. Accepts an EVM (0x...) or Solana address, or an ENS name (e.g. vitalik.eth) which is resolved to an address.

expand
string

Comma-separated: apps, chains, tokens, labels

order_by
enum<string>

Sort field

Available options:
net_worth_usd,
tx_count,
first_onchain,
last_onchain,
updated_at,
first_seen,
last_seen,
num_sessions,
revenue,
volume,
points
order_dir
enum<string>

Sort direction

Available options:
asc,
desc
page
integer
default:1

1-indexed page number (default 1).

Required range: x >= 1
size
integer
default:100

Page size (default 100, max 1000).

Required range: 1 <= x <= 1000

Body

application/json

Optional filter conditions

Filter conditions for profile search

conditions
object[]
logic
enum<string>
default:and
Available options:
and,
or

Response

Paginated wallet profile search results.

Pagination cursor returned alongside data on every paginated list endpoint. Use these to walk pages: has_more is true while page * size < total. Combine with the matching Page and Size query parameters to request the next page.

page
integer
required

1-indexed page number echoed from the request.

size
integer
required

Page size echoed from the request.

total
integer
required

Total row count across all pages.

has_more
boolean
required

True when more pages remain (page * size < total).

data
object[]
required