Search
GET
https://fomodata.dev /v1 /searchFull-text search over FomoData's local index of authorized data: theses (ranked by relevance), profiles (handle prefix, display name) and tokens (symbol prefix, name). Searches are never proxied to Fomo. Thesis results respect your plan's history window.
Live keys read real Fomo data FomoData ingested from its authorized upstream; test keys read clearly-labelled sandbox data (livemode: false, source: "sandbox").
Example request
curl 'https://fomodata.dev/v1/search?q=ai%20agents&types=theses,profiles,tokens' \
-H "Authorization: Bearer $FOMODATA_API_KEY"Parameters
Query parameters
qstringrequired- Search text.
@handleand$SYMBOLprefixes are understood. typesstring- Comma-separated subset of
theses,profiles,tokens(default all). limitinteger- Page size, 1–50 (default 10).
Response
200 Search results grouped by type
application/jsonSearchResult
objectenumrequired"search_result"querystringrequiredthesesarray<Thesis>required+ 12 child attributesobjectenumrequired"thesis"idstringrequiredprofileobjectrequired+ 4 child attributesidstringrequiredhandlestringrequireddisplay_namestring | nullrequiredavatar_urlstring (uri) | nullrequired
tokenobjectrequired+ 5 child attributesidstringrequiredsymbolstringrequirednamestring | nullrequiredchainstringrequiredaddressstringrequired
textstringrequiredpublic_urlstring (uri) | nullrequiredFomo exposes no public per-thesis permalink today, so this is null unless one becomes available.likesinteger | nullrequiredrepliesinteger | nullrequiredcreated_atstring (date-time)requiredupdated_atstring (date-time)requiredsourceenumrequiredWhere the data came from.sandbox= clearly-labelled test fixtures."fomo""sandbox"livemodebooleanrequired
profilesarray<Profile>required+ 16 child attributesobjectenumrequired"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
tokensarray<Token>required+ 20 child attributesobjectenumrequired"token"idstringrequiredsymbolstringrequirednamestring | nullrequiredchainstringrequiredchain_idinteger | nullrequiredaddressstringrequiredlogo_urlstring (uri) | nullrequiredfomo_urlstring (uri) | nullrequiredthesis_countintegerrequiredTheses FomoData has ingested for this token (see metrics_scope).unique_thesis_authorsintegerrequiredrecent_thesis_countintegerrequiredTheses in the last 24 hours.first_seen_atstring (date-time)requiredlast_activity_atstring (date-time) | nullrequiredmetrics_scopeenumrequiredCounts cover theses FomoData has observed since first_seen_at — not Fomo's all-time totals."ingested"sourceenumrequiredWhere the data came from.sandbox= clearly-labelled test fixtures."fomo""sandbox"livemodebooleanrequiredupdated_atstring (date-time)requiredsource_updated_atstring (date-time) | nullrequiredstaleboolean
livemodebooleanrequired
200 · exampleJSON
{
"object": "search_result",
"query": "string",
"theses": [
{
"object": "thesis",
"id": "th_7Hq2LmZx9RkT4bVn0sYc3D",
"profile": {
"id": "fp_4KZq8mXw2T0aN6rB1cYd9E",
"handle": "@milo",
"display_name": "Milo",
"avatar_url": "https://example.com"
},
"token": {
"id": "tk_9bF2kLmQ0sVx7RtY3nHc1A",
"symbol": "$RUN",
"name": "Run",
"chain": "robinhood",
"address": "0x5a4d1f3c0f6e2b8d9a7c4e1f0b3d6a9c2e5f8a1b"
},
"text": "Course looks fast today. Running it back.",
"public_url": "https://example.com",
"likes": 0,
"replies": 0,
"created_at": "2026-10-07T10:04:12.000Z",
"updated_at": "2026-10-07T10:04:12.000Z",
"source": "fomo",
"livemode": true
}
],
"profiles": [
{
"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"
}
}
],
"tokens": [
{
"object": "token",
"id": "string",
"symbol": "$RUN",
"name": "string",
"chain": "robinhood",
"chain_id": 4663,
"address": "string",
"logo_url": "https://example.com",
"fomo_url": "https://example.com",
"thesis_count": 0,
"unique_thesis_authors": 0,
"recent_thesis_count": 0,
"first_seen_at": "2026-10-07T10:04:12.000Z",
"last_activity_at": "2026-10-07T10:04:12.000Z",
"metrics_scope": "ingested",
"source": "fomo",
"livemode": true,
"updated_at": "2026-10-07T10:04:12.000Z",
"source_updated_at": "2026-10-07T10:04:12.000Z",
"stale": true
}
],
"livemode": true
}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 |
All errors use the standard envelope. See error codes for every code value.