Prerequisites
You’ll need:- An OMOPHub account (sign up here)
- An API key (generate one here)
- Python 3.10+, R 4.1+, or cURL
Step 1: Install the SDK
Step 2: Set Up Authentication
Step 3: Search for Concepts
Search across 11M+ concepts by keyword, then by meaning:Step 4: Get Concept Details
Look up a specific concept by its OMOPconcept_id:
Step 5: Navigate Hierarchies
Walk the ancestor / descendant tree to expand a concept set:Step 6: Map Between Vocabularies
Translate codes across SNOMED, ICD-10, LOINC, RxNorm, and every other OMOP vocabulary:Step 7: Resolve a FHIR Code to OMOP
This is the single call no other terminology server offers - send a FHIRCoding (system URI + code), get back the OMOP standard concept, domain, mapping type, and the exact CDM target table for ETL placement:
The Resolver handles URI → OMOP vocabulary lookup,
Maps to traversal for non-standard codes, and semantic fallback for display-text-only inputs in a single call. For the full response shape, batch variants, and the CodeableConcept endpoint, see the FHIR Integration guide.Next Steps
FHIR Integration
The complete FHIR story - Resolver for ETL, Terminology Service for clients, and when to use which.
FHIR Terminology Service
$lookup, $translate, $validate-code, $expand, $subsumes reference.AI & MCP Server
Connect Claude, Cursor, or VS Code to medical vocabularies via the MCP Server.
Python SDK
Full SDK reference: search, concepts, hierarchy, mappings, FHIR resolver.
R SDK
R6 client for vocabulary access in R workflows.
API Reference
Complete endpoint documentation with request / response schemas.
Workflows
Real-world workflows: clinical coding, phenotype development, lab normalization, and more.
Common Issues
401 Unauthorized
401 Unauthorized
429 Rate Limited
429 Rate Limited
- Free tier: 2 requests per second, monthly call quota per plan
- Use batch endpoints (concepts, mappings, semantic search) to reduce call count - each batch counts as one API call
- Respect the
Retry-Afterresponse header - See Rate Limits for plan-specific limits
No Results Found
No Results Found
- Try broader search terms or remove filters
- Use semantic search for natural-language queries (Step 3)
- Check
vocabulary_idspelling - it’sSNOMED, notSNOMED-CT;ICD10CM, notICD-10-CM - Confirm the target vocabulary is currently supported via
client.vocabularies.list()