Update Properties
Merge-update profile properties for a wallet. Set display name, email, socials, avatar, location, and other identity fields, or send null to delete a property, via a single PUT request.
Deleting properties
Sendnull as a property value to delete (unset) it. Set and unset compose in a single call, and every key you did not mention is left untouched:
null everywhere (profile reads, the Users table, search, and filters such as notEmpty), including over any globally-enriched fallback value, until a new value is set. One exception: a deleted location falls back to device geo rather than reading as absent.
user_id cannot be unset; it participates in identity stitching, so { "user_id": null } fails validation with 400 BAD_REQUEST. The literal string _is_deleted is a reserved internal value and is rejected wherever a property value is accepted.timestamp reflects the latest overrides, so a deletion also masks reads of snapshots taken before it.Authorizations
Workspace API key (e.g. formo_xxx). Create one in the Formo dashboard under Team Settings > API.
Path Parameters
Wallet address. Accepts an EVM (0x...) or Solana address, or an ENS name (e.g. vitalik.eth) which is resolved to an address.
Body
Merge-update of profile properties. Only the listed keys are accepted; unknown keys are rejected. At least one key must be provided. A null value unsets the property (not allowed for user_id). The literal string _is_deleted is a reserved internal tombstone and is rejected as a value.
Response
Properties updated. Returns the merged identity (the keys actually set, plus address + updated_at) so callers can cache without a follow-up read.
Echo of the wallet identity after the merge-update applied. Synthesised from the request payload; analytics ingestion is eventually consistent, so the response reflects the applied write rather than a follow-up read.