Skip to main content
The formo profiles command group lets you look up individual wallet profiles, search your user base, merge-update identity properties, and manage labels.

Lifecycle Threshold Options

profiles get and profiles search accept optional lifecycle threshold overrides:

formo profiles get <address>

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

Options

The lifecycle threshold options listed above are also supported.

Examples


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

Options

The lifecycle threshold options listed above are also supported.

--order-by Values

last_onchain, first_onchain, net_worth_usd, updated_at, tx_count, first_seen, last_seen, num_sessions, revenue, volume, points

Examples

The response is a paginated envelope: { data, total, page, size, has_more }. When --timestamp is present, wallet-enrichment fields come from the stored base snapshot closest to that instant. If two snapshots are equally close, the later snapshot is returned. Expanded chains, apps, and tokens come from the selected profiling batch. Project engagement fields, project-defined identity overrides, and labels remain current. Omitting --timestamp returns the latest profile.

Filters

--filters accepts a JSON array of canonical filter objects. Resource filters use a stable field plus named qualifier properties (chain_id, app_id, token_address, scope, tag_id):
field must be a stable typed path: users.{attribute} for user/profile/social fields, or one of chains.balance, apps.balance, tokens.balance, labels.value for resource filters. Bare names like net_worth_usd are rejected because the API ignores them, and the retired identifier-in-path spellings (chains.1.balance, apps.uniswap-v3.balance, tokens.0x….balance, labels.vip) are rejected with a 400; put identifiers in the qualifier properties instead.

Filter Operators

eq, neq, gt, gte, lt, lte, in, nin, contains, startsWith, endsWith, notEmpty, isEmpty The long-form spellings (equals, notEquals, greater, greaterOrEqual, less, lessOrEqual, notIn, includes) are retired. The API rejects them with a 400 naming the token. Use only the canonical operators above. The vocabulary is shared, but each field implements a subset — an unsupported pairing is a 400: notEmpty and isEmpty are value-less existence checks; the value is ignored.

formo profiles update <address>

Merge-update identity properties on a single wallet profile. Provide --properties, --unset, or both.
Requires profiles:write scope on your API key.

Options

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
Delete properties by key, or mix set and unset in one call:
A deleted property reads as null everywhere, including over any globally-enriched fallback value, until a new value is set. user_id cannot be unset (it participates in identity stitching).

formo profiles properties batch

Batch update first-party profile properties for up to 100 wallets.
Requires profiles:write scope on your API key.

Options

Delete properties in a batch with null values:
ENS names are not resolved in batch requests. Use wallet addresses in each address field.

formo profiles labels create <address>

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

Options

Examples


formo profiles labels batch

Batch upsert labels across up to 100 wallets.
Requires profiles:write scope on your API key.

Options

ENS names are not resolved in batch requests. Use wallet addresses in each address field.

formo profiles labels delete <address>

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

Options