Skip to content
API reference · Testing

Create a test thesis

POSThttps://fomodata.dev/v1/test/theses
Scopes:theses:readRate class:standardFlag:THESES_API_ENABLED

Test keys only (live keys get 400 TEST_MODE_ONLY). Creates a sandbox thesis visible only to your project and emits a labelled thesis.created event (livemode: false, source: "sandbox", test: true) to your project's test-mode webhooks and streams. Use it to exercise your integration end to end; it is never real Fomo activity.

Example request

curl -X POST 'https://fomodata.dev/v1/test/theses' \
  -H "Authorization: Bearer $FOMODATA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "handle": "@sbx_milo",
  "token": "$RUN",
  "text": "Testing my race-entry webhook."
}'

Request body

application/jsonTestThesisRequest
  • handlestringrequiredAuthor handle for the test thesis.
  • tokenstringrequiredSandbox token: $RUN, $SEEK, $RACE, $TAG, $ART, $CRAFT, or any new symbol (created as a test token for your project).
  • textstringrequired
Example body
{
  "handle": "@sbx_milo",
  "token": "$RUN",
  "text": "Testing my race-entry webhook."
}

Response

201 The test thesis and its event

application/jsonTestThesisResult
  • objectenumrequired"test_thesis"
  • thesisobjectrequired+ 12 child attributes
    • objectenumrequired"thesis"
    • idstringrequired
    • profileobjectrequired+ 4 child attributes
      • idstringrequired
      • handlestringrequired
      • display_namestring | nullrequired
      • avatar_urlstring (uri) | nullrequired
    • tokenobjectrequired+ 5 child attributes
      • idstringrequired
      • symbolstringrequired
      • namestring | nullrequired
      • chainstringrequired
      • addressstringrequired
    • textstringrequired
    • public_urlstring (uri) | nullrequiredFomo exposes no public per-thesis permalink today, so this is null unless one becomes available.
    • likesinteger | nullrequired
    • repliesinteger | nullrequired
    • created_atstring (date-time)required
    • updated_atstring (date-time)required
    • sourceenumrequiredWhere the data came from. sandbox = clearly-labelled test fixtures."fomo""sandbox"
    • livemodebooleanrequired
  • eventobjectrequired+ 8 child attributes
    • objectenumrequired"event"
    • idstringrequired
    • typeenumrequired"thesis.created""profile.updated""token.activity""token.thesis_velocity"
    • created_atstring (date-time)required
    • livemodebooleanrequired
    • sourceenumrequiredfomodata = derived by FomoData from authorized upstream events (activity, velocity)."fomo""sandbox""fomodata"
    • testbooleantrue for dashboard/API-generated test events (never real Fomo activity).
    • dataThesisCreatedData | ProfileUpdatedData | TokenActivityData | ThesisVelocityDatarequired
201 · example
{
  "object": "test_thesis",
  "thesis": {
    "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
  },
  "event": {
    "object": "event",
    "id": "evt_2Nf8QpLx0VbT6mRz4kWc1S",
    "type": "thesis.created",
    "created_at": "2026-10-07T10:04:12.000Z",
    "livemode": true,
    "source": "fomo",
    "test": true,
    "data": {
      "thesis_id": "string",
      "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": "string",
      "created_at": "2026-10-07T10:04:12.000Z",
      "public_url": "https://example.com"
    }
  }
}

Errors

StatusWhen
400Bad request
401Missing, invalid, revoked or expired API key
403Insufficient scope, live access not approved, or history limit
404Not found (or feature disabled)
409Conflict (e.g. ambiguous token symbol)
422Validation failed
429Rate limit or quota exceeded

All errors use the standard envelope. See error codes for every code value.