Verify a thesis
https://fomodata.dev /v1 /verify /thesisChecks that the identity posted a thesis on the token inside the time window — and nothing else. Verification never judges thesis quality, sentiment, intelligence or accuracy.
Always 200 with verified true/false and a machine-readable reason (VERIFIED, PROFILE_NOT_FOUND, TOKEN_NOT_FOUND, NO_THESIS_IN_WINDOW, TEXT_NOT_FOUND, THESIS_DELETED). For live keys, when nothing matches and the window ended within the last 15 minutes, FomoData syncs the token's latest theses from its authorized upstream once and re-checks (freshness.served_from: live_sync). If that sync fails while the realtime feed is also down, the call returns 503 instead of a possibly-false negative.
Example request
curl -X POST 'https://fomodata.dev/v1/verify/thesis' \
-H "Authorization: Bearer $FOMODATA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"handle": "@milo",
"token": "$RUN",
"chain": "robinhood",
"created_after": "2026-10-07T10:00:00Z",
"created_before": "2026-10-07T10:10:00Z"
}'Request body
handlestringAuthor handle. Pass this orprofile_id.profile_idstringFomoData profile id (fp_…) or Fomo user id. Pass this orhandle.tokenstringrequiredToken reference ($RUN,tk_…, address,chain:address).chainstringNarrows a symbol that exists on several chains.created_afterstringrequiredWindow start (ISO-8601, inclusive).created_beforestringWindow end (ISO-8601, inclusive). Defaults to now.containsstringOptional case-insensitive substring the thesis text must contain.
{
"handle": "@milo",
"token": "$RUN",
"chain": "robinhood",
"created_after": "2026-10-07T10:00:00Z",
"created_before": "2026-10-07T10:10:00Z"
}Response
200 Verification result
objectenumrequired"thesis_verification"verifiedbooleanrequiredprofile_idstring | nullrequiredthesis_idstring | nullrequiredcreated_atstring (date-time) | nullrequiredtokenstring | nullrequiredchecksobjectrequired+ 6 child attributesidentitybooleanrequiredtokenbooleanrequiredtime_windowbooleanrequiredthesis_existsbooleanrequirednot_deletedbooleanrequiredcontainsboolean | nullrequired
reasonenumrequiredMachine-readable outcome. Verification never judges thesis quality, sentiment or accuracy."VERIFIED""PROFILE_NOT_FOUND""TOKEN_NOT_FOUND""NO_THESIS_IN_WINDOW""TEXT_NOT_FOUND""THESIS_DELETED"freshnessobjectrequired+ 3 child attributeschecked_atstring (date-time)requiredupstream_synced_atstring (date-time) | nullrequiredserved_fromenumrequired"live_sync""cache"
livemodebooleanrequired
{
"object": "thesis_verification",
"verified": true,
"profile_id": "string",
"thesis_id": "string",
"created_at": "2026-10-07T10:04:12.000Z",
"token": "$RUN",
"checks": {
"identity": true,
"token": true,
"time_window": true,
"thesis_exists": true,
"not_deleted": true,
"contains": true
},
"reason": "VERIFIED",
"freshness": {
"checked_at": "2026-10-07T10:04:12.000Z",
"upstream_synced_at": "2026-10-07T10:04:12.000Z",
"served_from": "live_sync"
},
"livemode": 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) |
409 | Conflict (e.g. ambiguous token symbol) |
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.