Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Accessing the Data

There are two ways in, and they share one base URL:

  • Browse — plain, static JSON over HTTPS. No key, no auth, no rate-limit handshake. Just GET a URL.
  • Search — one POST endpoint that takes a query vector and returns ranked hits.

This chapter covers the conventions common to both. The next two chapters go deep on each.

Base URL

https://lmmol.com

Every browse path in this book is relative to that origin. All responses are JSON (Content-Type: application/json) served over HTTPS through a CDN, so they are cacheable and fast to fetch in bulk.

The browse layer (no auth)

Everything you can browse is a static file at a predictable path. The four shapes you will use most:

PathWhat you get
index.jsonthe root: entity types, counts, navigation
index/list/<type>/root.jsonhow a type's listing is sharded (count + shards)
index/list/<type>/<n>.jsonone shard: up to 1000 {id, name} entries
nodes/<type>/<id>.jsona single entity (the node and its forward edges)

And the cross-reference (backlink) indexes that make the graph two-way:

PathWhat you get
index/disease/<MONDO_id>.json{proteins, trials} pointing at a disease
index/gene/<symbol>.json{proteins} for a gene
index/clinvar/gene/<symbol>.json{diseases: [{id, name, significance}]}
index/clinvar/disease/<MONDO_id>.json{genes: [{symbol, significance}]}

There is also a machine-oriented guide at llms.txt (see below).

<type> is one of protein, trial, disease, gene, go. Ids go in the path exactly as written, except Mondo ids use an underscore (MONDO_0016419). URL-encode ids that contain unusual characters (some gene symbols do).

Start at the root

curl https://lmmol.com/index.json

index.json reports each entity type with its count and where its listing lives. Treat it as the entry point you crawl from — and the one file to re-read when you want fresh counts.

The search endpoint

Semantic search is a single HTTP API:

POST https://rtxz9xxyz7.execute-api.us-east-1.amazonaws.com/search

It accepts a JSON body containing a query vector (you embed the text yourself — see Searching) and returns ranked results. It is metered and may be disabled for cost control; browse is always available. Because of that, prefer browse for anything you can address by id or path, and reach for search only when you actually need "what's semantically relevant?"

Conventions

  • HTTP verbs — browse is GET; search is POST. Nothing else.
  • Missing records return 404. A successful browse fetch is always valid JSON.
  • Stable ids — ids are the durable contract. Paths are derived from ids, so once you have an id you can construct every URL for that entity yourself.
  • Caching — browse files are static and CDN-cached. Fetch freely; cache locally when you crawl at scale, and re-fetch index.json to learn when counts have moved.

For LLM agents: llms.txt

curl https://lmmol.com/llms.txt

llms.txt is a short, link-free description of the data and these access patterns, written for an agent to read once and then navigate on its own. It is deliberately concise. An agent can read it, then walk index.json → listings → nodes → backlinks without any further instructions. See Browsing the Index for why this deterministic walk is a practical alternative to vector RAG.