Semantic search (coming soon)
Coming soonPOST
https://fomodata.dev /v1 /search /semanticCOMING SOON. Semantically relevant theses for a natural-language query, indexing only content authorized for search. Until semantic indexing ships this endpoint returns 404 FEATURE_DISABLED; use GET /v1/search for full-text search.
Not available yet
This endpoint is behind SEMANTIC_SEARCH_ENABLED, which is off on this deployment. Calls return 404 FEATURE_DISABLED.
Example request
curl -X POST 'https://fomodata.dev/v1/search/semantic' \
-H "Authorization: Bearer $FOMODATA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "early AI infrastructure theses"
}'Request body
application/jsonSemanticSearchRequest
querystringrequiredlimitinteger
Example bodyJSON
{
"query": "early AI infrastructure theses"
}Response
200 Search results (once available)
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.