List theses
GET
https://fomodata.dev /v1 /thesesTrade Theses from FomoData's index, newest first by default. Combine filters freely.
Queries are limited to your plan's history window: an explicit lower bound earlier than that returns 403 HISTORY_LIMIT; without one, results are implicitly limited to the 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/theses?handle=@milo&token=$RUN&chain=robinhood&since=1h&sort=created_at_desc' \
-H "Authorization: Bearer $FOMODATA_API_KEY"Parameters
Query parameters
profilestring- Profile reference:
fp_…,@handleor Fomo user id. handlestring- Author handle, with or without
@. tokenstring- Token reference:
tk_…, address,chain:address,$RUNorRUN. A symbol matches every token with that symbol unlesschainnarrows it. chainstring- Narrow to one chain, e.g.
robinhood,solana,base. Test keys:sandbox. created_afterstring- ISO-8601 lower bound (inclusive).
created_beforestring- ISO-8601 upper bound (inclusive).
sincestring- Relative lower bound:
90s,30m,1h,7d. Combined withcreated_after, the later bound wins. sortenum- Sort order (default
created_at_desc).created_at_desccreated_at_asclikes_desc limitinteger- Page size, 1–100 (default 25).
cursorstring- Opaque
next_cursorfrom the previous page.
Response
200 A page of theses
application/jsonThesisList
objectenumrequired"list"dataarray<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
next_cursorstring | nullrequiredhas_morebooleanrequired
200 · exampleJSON
{
"object": "list",
"data": [
{
"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
}
],
"next_cursor": "string",
"has_more": true
}Errors
| Status | When |
|---|---|
400 | Bad request |
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.