Search Profiles
Search and filter wallet profiles by address, socials, labels, net worth, chain activity, and more. Returns paginated results with full profile data.
Authentication
This endpoint requires authentication using a Workspace API Key withprofiles:read permission. Include the API key in your request headers:
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.
search
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 balanceschains- Per-chain activity metricstokens- Token holdingslabels- Wallet labels
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 timestampfirst_onchain- First on-chain activity timestampnet_worth_usd- Total net worthupdated_at- Last profile update timestamptx_count- Total transaction countfirst_seen- First seen timestamp in your applast_seen- Last seen timestamp in your appnum_sessions- Number of sessionsrevenue- Total revenuevolume- Total volumepoints- Total points
order_dir
Sort direction:
desc(default) - Descending orderasc- 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 withconditions and logic.
Filter Schema
Filter Condition
Each condition in theconditions array has:
Operators
Field Reference
User Fields (users.*)
Filter by user engagement and profile data. Use the format users.{attribute}.
Profile Fields
Engagement Fields
UTM & Referral Fields
Lifecycle Filter
Filter by user lifecycle stage. Valid values:At Risk, Churned, New, Power user, Resurrected, Returning.
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, orcontainswith a non-empty string to match the actual social value.
bob:
Chain Filters (chains.*)
Filter by per-chain net worth. Supports filtering across all chains or specific chains.
All Chains
Usechains.balance to filter across all chains (returns profiles where any chain matches).
Example - Find users with >$1,000 on any chain:
Specific Chain
Usechains.{chain_id}.balance to filter on a specific chain.
Common chain IDs:
1- Ethereum Mainnet137- Polygon42161- Arbitrum One10- Optimism8453- Base56- BNB Chain43114- Avalanche
App Filters (apps.*)
Filter by DeFi app interactions and balances.
All Chains
Useapps.{app_id}.balance to filter by app balance across all chains.
Example - Find users with >$1,000 in Uniswap:
Specific Chain
Useapps.{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
Usetokens.{token_address}.balance to filter by token balance across all chains.
Example - Find users holding >1000 USDC (any chain):
Specific Chain
Usetokens.{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
Usescope: "protocol" with appId to filter for tokens deposited in a specific DeFi protocol.
Example - Find users with USDC deposited in any protocol:
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 codecoinbase.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
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 thedata array includes:
Error Responses
Authorizations
Workspace API key (e.g. formo_xxx). Create one in the Formo dashboard under Team Settings > API Keys.
Query Parameters
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.
Comma-separated: apps, chains, tokens, labels
Sort field
net_worth_usd, tx_count, first_onchain, last_onchain, updated_at, first_seen, last_seen, num_sessions, revenue, volume, points Sort direction
asc, desc 1-indexed page number (default 1).
x >= 1Page size (default 100, max 1000).
1 <= x <= 1000Body
Optional filter conditions
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.