Skip to main content
Search for concepts by text:
results = client.search.basic("diabetes mellitus", page_size=20)
for concept in results["concepts"]:
    print(f"{concept['concept_id']}: {concept['concept_name']}")

Parameters

ParameterTypeDefaultDescription
querystringrequiredSearch query string
vocabulary_idslist[str]NoneFilter by vocabulary IDs
domain_idslist[str]NoneFilter by domain IDs
concept_class_idslist[str]NoneFilter by concept class IDs
standard_conceptstringNoneFilter by standard concept (“S”, “C”, or None)
include_synonymsboolFalseSearch in synonyms
include_invalidboolTrueInclude invalid concepts
min_scorefloatNoneMinimum relevance score (0.0-1.0)
exact_matchboolFalseRequire exact match
pageint1Page number (1-based)
page_sizeint20Results per page
sort_bystringNoneSort field
sort_orderstringNoneSort order (“asc” or “desc”)

Filter by Vocabulary

Restrict search to specific vocabularies:
results = client.search.basic(
    "heart attack",
    vocabulary_ids=["SNOMED", "ICD10CM"],
)

Filter by Domain

Search within specific domains:
results = client.search.basic(
    "aspirin",
    domain_ids=["Drug"],
    page_size=10,
)

Filter by Concept Class

Search for specific concept classes:
results = client.search.basic(
    "aspirin",
    concept_class_ids=["Clinical Drug", "Ingredient"],
    page_size=10,
)

Standard Concepts Only

Filter to standard concepts:
results = client.search.basic(
    "diabetes",
    standard_concept="S",  # "S" = Standard, "C" = Classification
    vocabulary_ids=["SNOMED"],
)

Search with Synonyms

Include concept synonyms in search:
results = client.search.basic(
    "heart attack",
    include_synonyms=True,
    vocabulary_ids=["SNOMED"],
)

Combined Filters

results = client.search.basic(
    "myocardial infarction",
    vocabulary_ids=["SNOMED"],
    domain_ids=["Condition"],
    standard_concept="S",
    include_synonyms=True,
    min_score=0.5,
    page_size=20,
)

Autocomplete

Get suggestions as the user types:
result = client.search.autocomplete("diab", page_size=10)
for suggestion in result["suggestions"]:
    print(suggestion["suggestion"])

Pagination

Manual Pagination

# Get first page
results = client.search.basic("diabetes", page=1, page_size=50)

# Access pagination metadata
pagination = results["meta"]["pagination"]
print(f"Total: {pagination['total_items']}")
print(f"Pages: {pagination['total_pages']}")
print(f"Has next: {pagination['has_next']}")

# Get next page
if pagination["has_next"]:
    results = client.search.basic("diabetes", page=2, page_size=50)

Auto-Pagination Iterator

Iterate through all results automatically:
count = 0
for concept in client.search.basic_iter("diabetes", page_size=100):
    print(concept["concept_name"])
    count += 1
    if count >= 500:  # Limit for demo
        break
Use advanced search with additional filtering options and facets:
results = client.search.advanced(
    "diabetes",
    vocabulary_ids=["SNOMED", "ICD10CM"],
    domain_ids=["Condition"],
    standard_concepts_only=True,
    page_size=50,
)

# Access results
for concept in results["data"]:
    print(f"{concept['concept_id']}: {concept['concept_name']}")

# Access pagination
print(f"Total: {results['meta']['pagination']['total_items']}")

Advanced Search Parameters

ParameterTypeDefaultDescription
querystringrequiredSearch query string
vocabulary_idslist[str]NoneFilter by vocabulary IDs
domain_idslist[str]NoneFilter by domain IDs
concept_class_idslist[str]NoneFilter by concept class IDs
standard_concepts_onlyboolFalseOnly return standard concepts
include_invalidboolTrueInclude invalid concepts
relationship_filterslist[dict]NoneRelationship-based filters
pageint1Page number (1-based)
page_sizeint20Results per page

Relationship Filters

Apply relationship-based filtering:
results = client.search.advanced(
    "diabetes",
    relationship_filters=[
        {"relationship_id": "Is a", "concept_id": 4116142}  # Has parent concept
    ],
    standard_concepts_only=True,
)
Search for concepts using natural language with neural embeddings. Semantic search understands meaning, not just keywords.
# Basic semantic search
results = client.search.semantic("heart attack", page_size=10)

# With filters
results = client.search.semantic(
    "diabetes mellitus",
    vocabulary_ids=["SNOMED"],
    domain_ids=["Condition"],
    threshold=0.5,  # Higher = more similar
    page_size=20,
)

# Access results with similarity scores
for concept in results["data"]["results"]:
    print(f"{concept['concept_name']}: {concept['similarity_score']:.2f}")

Semantic Search Parameters

ParameterTypeDefaultDescription
querystringrequiredNatural language search query
vocabulary_idslist[str]NoneFilter by vocabulary IDs
domain_idslist[str]NoneFilter by domain IDs
standard_concept”S” | “C”NoneFilter by standard concept flag
concept_class_idstringNoneFilter by concept class
thresholdfloat0.5Minimum similarity (0.0-1.0)
pageint1Page number
page_sizeint20Results per page (max 100)

Semantic Search Iterator

Iterate through all semantic search results with automatic pagination:
# Iterate through all results
for concept in client.search.semantic_iter("diabetes", page_size=50):
    print(concept["concept_name"])

# Collect first N results
import itertools
top_100 = list(itertools.islice(
    client.search.semantic_iter("diabetes"), 100
))

# With filters
for concept in client.search.semantic_iter(
    "heart failure",
    vocabulary_ids=["SNOMED"],
    threshold=0.4,
):
    print(f"{concept['concept_id']}: {concept['concept_name']}")
# Async semantic search
results = await client.search.semantic("heart attack", page_size=10)

# Async iterator
async for concept in client.search.semantic_iter("diabetes"):
    print(concept["concept_name"])

Find Similar Concepts

Find concepts similar to a reference concept or query. Provide exactly one of: concept_id, concept_name, or query.
# By concept ID
similar = client.search.similar(concept_id=4329847)  # MI

# By concept name
similar = client.search.similar(concept_name="Type 2 diabetes mellitus")

# By natural language query
similar = client.search.similar(query="elevated blood sugar")

# With all options
similar = client.search.similar(
    concept_id=4329847,
    algorithm="semantic",  # or "lexical", "hybrid"
    similarity_threshold=0.7,
    page_size=50,
    vocabulary_ids=["SNOMED"],
    domain_ids=["Condition"],
    include_scores=True,
    include_explanations=True,
)

# Access results
for concept in similar["similar_concepts"]:
    print(f"{concept['concept_name']}: {concept['similarity_score']:.2f}")

Similar Concepts Parameters

ParameterTypeDefaultDescription
concept_idintNoneSource concept ID
concept_namestringNoneSource concept name
querystringNoneNatural language query
algorithmstring”hybrid""semantic”, “lexical”, or “hybrid”
similarity_thresholdfloat0.7Minimum similarity (0.0-1.0)
page_sizeint20Max results (max 1000)
vocabulary_idslist[str]NoneFilter by vocabulary
domain_idslist[str]NoneFilter by domain
standard_conceptstringNone”S”, “C”, or “N”
include_invalidboolNoneInclude invalid/deprecated concepts
include_scoresboolNoneInclude detailed scores
include_explanationsboolNoneInclude similarity explanations

Algorithm Comparison

AlgorithmBest ForSpeed
semanticMeaning-based similaritySlower
lexicalText/string similarityFaster
hybridBalanced approachMedium

Async Similar Concepts

# Async version
similar = await client.search.similar(concept_id=4329847)