Quickstart
Make your first call in under two minutes with a test key.
Three steps: create a test key, install the SDK, fetch a profile. Test keys work immediately after sign-up and return clearly labelled sandbox data, so you can build the whole integration before you ever touch live data.
Create a test key
Create an account. Sign-up gives you an organization and a first project. Open API Keys, choose Create API key, keep the TEST environment and the default read scopes.
The secret is shown once. Copy it now. You won't be able to view it again; FomoData stores only a hash.
export FOMODATA_API_KEY="fd_test_…"The SDK reads FOMODATA_API_KEY and talks to https://fomodata.dev/v1. Self-hosting? Set FOMODATA_API_BASE_URL or pass baseUrl to new FomoData().
Install the SDK
npm install https://fomodata.dev/sdk/fomodata-sdk-0.1.0.tgzThe npm package is coming soon. Until then, install the same build straight from this server; the tarball is the published package shape.
Fetch a profile
With a test key, use a sandbox handle such as @sbx_milo. Sandbox handles always start with @sbx_.
import { FomoData } from "@fomodata/sdk";
const fomo = new FomoData({ apiKey: process.env.FOMODATA_API_KEY });
const profile =
await fomo.profiles.get("@sbx_milo");
console.log(profile.handle, profile.livemode); // "@sbx_milo" false{
"object": "profile",
"id": "fp_4KZq8mXw2T0aN6rB1cYd9E",
"handle": "@sbx_milo",
"display_name": "Milo (sandbox)",
"avatar_url": null,
"profile_url": null,
"bio": "Speedruns every new course the day it drops. Sandbox test profile — not a real Fomo user.",
"verified": false,
"source": "sandbox",
"livemode": false,
"created_at": null,
"first_seen_at": "2026-10-07T09:00:00.000Z",
"updated_at": "2026-10-07T10:00:00.000Z",
"source_updated_at": null
}That's the first call. Every response carries an X-FomoData-Request-Id header; include it if you ever contact support.
Going live
Live keys (fd_live_…) return real Fomo data through FomoData's authorized upstream integration. During the private beta, live access is granted per project by approval: request it from the project settings page. Once approved, the same code works with a live key and a real handle:
const profile = await fomo.profiles.get("@milo");Same code, different key
Nothing in your code changes between environments. The key decides which data you see, and every object tells you which one it is via livemode and source.
Next steps
- List theses for a token, or verify that a thesis was posted in a time window.
- Subscribe to realtime events or receive signed webhooks.
- Try any endpoint in the playground with your test key.