Look up a profile
GET
https://fomodata.dev /v1 /profilesLook up one profile by exactly one of id, handle or fomo_user_id.
Resolution order: FomoData's index first; for live keys an unknown handle is looked up once through the authorized upstream (misses are cached for 10 minutes). Only public profile metadata is returned — never PnL, balances or private account data.
Example request
curl 'https://fomodata.dev/v1/profiles?handle=@milo' \
-H "Authorization: Bearer $FOMODATA_API_KEY"Parameters
Query parameters
idstring- FomoData profile id.
handlestring- Fomo handle, with or without
@. fomo_user_idstring- Fomo's stable user id (survives handle renames).
Response
200 The profile
application/jsonProfile
objectenumrequired"profile"idstringrequiredhandlestringrequireddisplay_namestring | nullrequiredavatar_urlstring (uri) | nullrequiredprofile_urlstring (uri) | nullrequiredbiostring | nullrequiredverifiedboolean | nullrequiredsourceenumrequiredWhere the data came from.sandbox= clearly-labelled test fixtures."fomo""sandbox"livemodebooleanrequiredcreated_atstring (date-time) | nullrequiredAccount creation time upstream, when known.first_seen_atstring (date-time)requiredWhen FomoData first observed this profile.updated_atstring (date-time)requiredsource_updated_atstring (date-time) | nullrequiredstalebooleanwalletobjectOnly present when the Wallets API is enabled and the association is public/authorized.+ 2 child attributesaddressstringrequirednetworkstringrequired
200 · exampleJSON
{
"object": "profile",
"id": "fp_4KZq8mXw2T0aN6rB1cYd9E",
"handle": "@milo",
"display_name": "Milo",
"avatar_url": "https://example.com",
"profile_url": "https://fomo.family/profile/milo",
"bio": "string",
"verified": true,
"source": "fomo",
"livemode": true,
"created_at": "2026-10-07T10:04:12.000Z",
"first_seen_at": "2026-10-07T10:04:12.000Z",
"updated_at": "2026-10-07T10:04:12.000Z",
"source_updated_at": "2026-10-07T10:04:12.000Z",
"stale": true,
"wallet": {
"address": "string",
"network": "evm"
}
}Errors
| Status | When |
|---|---|
401 | Missing, invalid, revoked or expired API key |
403 | Insufficient scope, live access not approved, or history limit |
404 | Not found (or feature disabled) |
422 | Validation failed |
429 | Rate limit or quota exceeded |
503 | Upstream unavailable |
All errors use the standard envelope. See error codes for every code value.