Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.formo.so/llms.txt

Use this file to discover all available pages before exploring further.

The formo profiles command group lets you look up individual wallet profiles, search across your entire user base with filters and sorting, merge-update identity properties, and manage labels on a wallet.

formo profiles get

Fetch a single wallet profile by address or ENS name.
Requires profiles:read scope on your API key.

Arguments

ArgumentTypeRequiredDescription
addressstringWallet address (0x…) or ENS name

Options

OptionTypeRequiredDescription
--expandstringComma-separated list of fields to expand: apps, chains, tokens, labels

Examples

# Get a wallet profile by address
formo profiles get 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045

# Get a profile by ENS name
formo profiles get vitalik.eth

# Get profile with expanded labels and chains
formo profiles get vitalik.eth --expand labels,chains

# Get profile with all expanded fields
formo profiles get 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045 --expand apps,chains,tokens,labels

Expand fields

FieldDescription
appsDApps the wallet has interacted with
chainsBlockchain networks the wallet is active on
tokensToken holdings for the wallet
labelsWallet labels and tags

Search wallet profiles with optional filters, sorting, and pagination.
Requires profiles:read scope on your API key.

Options

OptionTypeRequiredDescription
--addressstringFilter by wallet address
--pagenumberPage number (1-indexed, default 1)
--sizenumberPage size (default 100, max 1000)
--order-byenumField to sort by (see values below)
--order-direnumSort direction: asc or desc
--expandstringComma-separated fields to expand
--conditionsstringJSON array of FilterCondition objects for advanced filtering
--logicenumLogic operator for combining conditions: and (default) or or

--order-by values

ValueDescription
last_onchainLast on-chain activity timestamp
first_onchainFirst on-chain activity timestamp
net_worth_usdTotal net worth in USD
updated_atProfile last updated
tx_countTotal transaction count
first_seenFirst seen by Formo
last_seenLast seen by Formo
num_sessionsNumber of sessions
revenueRevenue attributed
volumeVolume attributed
pointsPoints attributed

Examples

# List first 10 profiles
formo profiles search --size 10

# Top 5 profiles by net worth
formo profiles search --order-by net_worth_usd --order-dir desc --size 5

# Get the second page of 20 profiles
formo profiles search --page 2 --size 20

# Search with a filter condition
formo profiles search \
  --conditions '[{"field":"users.net_worth_usd","op":"gt","value":10000}]' \
  --size 20

# Search profiles matching either condition (OR logic)
formo profiles search \
  --conditions '[{"field":"users.net_worth_usd","op":"gt","value":10000},{"field":"users.volume","op":"gt","value":1000}]' \
  --logic or \
  --size 20

# Filter by on-chain balance on a specific chain (Ethereum = chain 1)
formo profiles search \
  --conditions '[{"field":"chains.1.balance","op":"gt","value":1000}]' \
  --size 20
The response is a paginated envelope: { data, total, page, size, has_more }. Use has_more to know whether to fetch --page <n+1>.

FilterCondition reference

The --conditions option accepts a JSON array of filter condition objects:
[
  { "field": "users.net_worth_usd", "op": "gt", "value": 10000 },
  { "field": "chains.1.balance", "op": "gte", "value": 1000 }
]
field must be a typed path (prefixed by its category — see the table below). The CLI rejects a bare/untyped field (e.g. net_worth_usd) with an error, because the API would otherwise silently ignore it — no error, no filtering, returning the entire unfiltered dataset. Always prefix the field, e.g. users.net_worth_usd.
FieldTypeDescription
fieldstringTyped field path (see prefixes below)
opstringOperator (see table below)
valueanyValue to compare against
scopestring(token filters only) any or protocol
appIdstring(token filters with scope: protocol) e.g. aave-v3

Field path prefixes

PrefixExamples
users.users.net_worth_usd, users.volume, users.revenue, users.points, users.device, users.location, users.lifecycle, users.ens, users.farcaster
chains.chains.balance (any chain), chains.1.balance (Ethereum)
apps.apps.uniswap-v3.balance
tokens.tokens.0xA0b8…48.balance
labels.labels.coinbase.verified_account

Filter operators

OperatorDescription
eqEqual to
neqNot equal to
gtGreater than
gteGreater than or equal to
ltLess than
lteLess than or equal to
inIn a set of values
ninNot in a set of values
By default, multiple conditions are combined with AND logic. Use --logic or to combine with OR logic instead.

formo profiles update

Merge-update identity properties on a wallet profile. Only the listed property keys are accepted; unknown keys are rejected server-side.
Requires profiles:write scope on your API key.

Arguments

ArgumentTypeRequiredDescription
addressstringWallet address (0x…) or ENS name

Options

OptionTypeRequiredDescription
--propertiesstringJSON object of properties to merge

Allowed property keys

user_id, display_name, email, farcaster, discord, twitter, telegram, instagram, website, github, linkedin, facebook, tiktok, youtube, reddit, avatar, description, location, ens, lens, basenames, linea

Examples

# Set display name and Twitter handle
formo profiles update 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045 \
  --properties '{"display_name":"Vitalik","twitter":"VitalikButerin"}'

# Set just the email
formo profiles update vitalik.eth \
  --properties '{"email":"alice@example.com"}'

formo profiles labels create

Upsert one or more labels on a wallet profile. Provide either a single label via --tag-id or a batch via --labels.
Requires profiles:write scope on your API key.

Arguments

ArgumentTypeRequiredDescription
addressstringWallet address (0x…) or ENS name

Options

OptionTypeRequiredDescription
--tag-idstringLabel identifier (e.g. vip, airdrop_eligible). Required unless --labels is provided.
--valuestringOptional label value (e.g. tier name, country code)
--chain-idstringOptional chain identifier the label applies to
--labelsstringJSON array of UserLabelInput objects for batch upsert

Examples

# Tag a wallet as VIP
formo profiles labels create 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045 --tag-id vip

# Apply a tiered label scoped to a chain
formo profiles labels create 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045 \
  --tag-id tier --value gold --chain-id 1

# Apply multiple labels in one call
formo profiles labels create 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045 \
  --labels '[{"tag_id":"vip"},{"tag_id":"airdrop_eligible","chain_id":"1"}]'

UserLabelInput shape

FieldTypeRequiredDescription
tag_idstringLabel identifier
valuestringOptional label value
chain_idstringOptional chain identifier

formo profiles labels delete

Delete a label from a wallet profile. Pass --chain-id to scope the deletion to a chain-specific label.
Requires profiles:write scope on your API key.

Arguments

ArgumentTypeRequiredDescription
addressstringWallet address (0x…) or ENS name

Options

OptionTypeRequiredDescription
--tag-idstringLabel identifier to delete
--chain-idstringOptional chain identifier to scope the deletion

Examples

# Remove the vip label
formo profiles labels delete 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045 --tag-id vip

# Remove a chain-scoped label
formo profiles labels delete 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045 \
  --tag-id tier --chain-id 1