Skip to content

Get started

Quickstart

From zero to an explained score in three steps: create a key, call the API, then use the typed SDK. Every plan's keys read live Fomo data — the same numbers the app shows.

1 · Create a key

  1. Sign in with a wallet: you sign one message — no transaction, no funds moved, no password.
  2. Open API and create a live key. Pick the scopes you need — for this guide tokens:read and signals:read.
  3. Copy it now: the full key is shown once.
Shell
export FOMOQUANT_API_KEY="fq_live_…"   # paste your key

2 · Call the API

Check which key you are using, then fetch a token's quant snapshot. Any symbol from the tokens list works.

curl
curl https://fomoquant.app/v1/key -H "Authorization: Bearer $FOMOQUANT_API_KEY"

curl https://fomoquant.app/v1/quant/token/XYZ -H "Authorization: Bearer $FOMOQUANT_API_KEY"

scores holds the plain numbers; score_details explains each one: drivers whose points add up to the value, the raw feature behind each driver, a confidence level with its sample size and basis, and the model version.

Response (example, abridged)
{
  "object": "token_quant",
  "dataset": "live",
  "livemode": true,
  "token": {
    "object": "token",
    "id": "tk_4f8k2m9q1x7c3v5b6n0d",
    "dataset": "live",
    "symbol": "XYZ",
    "name": "Xyzzy Agents",
    "chain": "base",
    "address": "0x1111111111111111111111111111111111111111",
    "logo_url": null,
    "status": "active",
    "narrative": { … },
    "fomo_url": null,
    "livemode": true
  },
  "timestamp": "2026-10-10T12:00:00.000Z",
  "scores": {
    "momentum": 66,
    "conviction": 51,
    "crowding": 24,
    "early_quality": 76,
    "narrative_velocity": 64,
    "divergence": 45,
    "smart_cohort": 58
  },
  "score_details": {
    "momentum": {
      "object": "score",
      "key": "momentum",
      "value": 66,
      "display": "66",
      "drivers": [
        {
          "key": "thesis_velocity",
          "label": "Thesis velocity",
          "points": 23,
          "raw": 2.18,
          "display": "+218%",
          "percentile": null,
          "note": "14 theses in the last hour vs a 7-day baseline of 4.4/h"
        },
        {
          "key": "unique_author_growth",
          "label": "Unique author growth",
          "points": 13,
          "raw": 0.714,
          "display": "+71%",
          "percentile": null,
          "note": "12 authors this hour vs 7 the hour before"
        },
        {
          "key": "acceleration",
          "label": "Acceleration",
          "points": 15,
          "raw": 1.333,
          "display": "+133%",
          "percentile": null,
          "note": "14 vs 6 theses in the prior hour"
        },
        {
          "key": "persistence",
          "label": "Mention persistence",
          "points": 15,
          "raw": 18,
          "display": "18 / 24 hours active",
          "percentile": null
        }
      ],
      "confidence": {
        "level": "HIGH",
        "sample_size": 37,
        "basis": "37 theses · 26 authors in 24h",
        "details": {
          "theses_24h": 37,
          "unique_authors_24h": 26,
          "theses_1h": 14
        }
      },
      "model_version": "momentum-v1.0",
      "summary": "Attention is accelerating."
    },
    "conviction": { … },
    "crowding": { … },
    "early_quality": { … },
    "narrative_velocity": { … },
    "divergence": { … },
    "smart_cohort": { … }
  },
  "divergence_state": "EARLY_SOCIAL",
  "signals": [ … ],
  "market": { … },
  "activity": { … },
  "features": { … },
  "analogs": { … },
  "model_versions": { … },
  "freshness": { … }
}

Rate-limit state comes back on every response (RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset). Errors are JSON: {"error": {"code", "message", "request_id"}} — see the API reference.

3 · Use the SDK

@fomoquant/sdk is a zero-dependency, fully typed client for Node ≥ 22, Bun, Deno and edge runtimes. Responses are typed snake_case objects identical to the REST JSON.

pnpm add @fomoquant/sdk
index.ts
import { FomoQuant } from "@fomoquant/sdk";

const fq = new FomoQuant({ apiKey: process.env.FOMOQUANT_API_KEY!, baseUrl: "https://fomoquant.app" });

const xyz = await fq.tokens.get("$XYZ");
const m = xyz.score_details.momentum!;
console.log(`Momentum ${m.value} (${m.confidence.level}: ${m.confidence.basis}) · ${m.model_version}`);
for (const d of m.drivers) console.log(`  ${d.label.padEnd(24)} ${d.display.padStart(10)}  +${d.points}`);

// Data quality is never hidden
if (xyz.freshness?.stale) console.warn(xyz.freshness.stale_reasons.join("; "));

// Active signals across all pages
for await (const s of fq.signals.iterate({ status: "active" })) {
  console.log(s.token.symbol, s.label, s.why.join(" · "));
}

Realtime and webhooks

Subscribe to signal.created, score.updated, cohort.convergence and narrative.shift over the WebSocket stream (scope stream:read), or receive signed webhooks on your server.

stream.ts
const stream = fq.stream({
  events: ["signal.created", "score.updated"],
  tokens: ["$XYZ"],
  onEvent(ev) {
    if (ev.event === "signal.created") console.log(ev.data.token.symbol, ev.data.label, ev.data.why);
  },
});

Next: read how each score is built in Scores, or browse every endpoint in the API reference.

FomoQuant provides analytics and historical/statistical context, not financial advice or guaranteed predictions.