Skip to main content
This endpoint returns all descendant concepts (children, grandchildren, etc.) for a specific concept, allowing exploration of more specific terms and sub-classifications within the medical vocabulary hierarchy.

Path Parameters

concept_id
integer
required
The unique identifier of the concept to retrieve descendants for
Example: 73211009 (Diabetes mellitus)

Query Parameters

vocabulary_ids
string
Filter descendants to specific vocabularies (comma-separated)
Example: SNOMED,ICD10CM
domain_ids
string
Filter descendants to specific domains (comma-separated)
Example: Condition,Drug
max_levels
integer
default:"10"
Maximum number of hierarchy levels to traverse downward
Range: 1-20
This endpoint always traverses the Is a / Subsumes hierarchy. It reads OMOP’s precomputed concept_ancestor closure, which stores only transitive subsumption - it has no relationship column to filter on. Every descendant is therefore returned with relationship_id: "Subsumes".A relationship_types parameter is accepted for backwards compatibility but has no effect here: passing Has part, or even a nonexistent relationship, returns the same descendants. To traverse other relationship types, use GET /v1/concepts/{concept_id}/relationships or POST /v1/concepts/relationships/traverse, which query concept_relationship directly.
include_distance
boolean
default:"false"
Include hierarchy_level field for each descendant (distance from source concept)
include_paths
boolean
default:"false"
Include path_length field for each descendant
include_invalid
boolean
default:"false"
Include deprecated/invalid concepts in descendants (by default they are excluded)
max_results
integer
default:"5000"
Maximum size of the descendant set to retrieve before pagination is applied.
Range: 1-5000
Defaults to the maximum, so paging through the response returns every descendant that matches this request - that is, those within max_levels and any domain_ids / vocabulary_ids filters you supplied. (relationship_types is not applied - see above.) It is not necessarily the concept’s entire descendant closure: max_levels defaults to 10, so deeper descendants are excluded, and truncated does not flag that (it reports the row cap only). For a full closure, pass max_levels=20 as well.Lower max_results only if you deliberately want a partial set - note that total_items then reflects the truncated set, not the true descendant count. To read the true, unfiltered count without fetching the set, use GET /v1/concepts/{concept_id}/level.
page
integer
default:"1"
Page number for pagination (1-based)
page_size
integer
default:"100"
Number of descendant concepts to return per page. Values above 200 are clamped to 200.
vocab_release
string
Specific vocabulary release version to query
Example: 2025.1

Response

concept_id
integer
The concept ID for which descendants were retrieved
concept_name
string
Standard name of the source concept
vocabulary_id
string
Vocabulary containing the source concept
descendants
array
Array of descendant concepts in hierarchical order
hierarchy_summary
object
Summary statistics about the descendant hierarchy
meta
object
Response metadata and pagination information

Usage Examples

Note: Examples assume a preconfigured client from new OMOPHub(). For direct usage:
TypeScript

Basic Descendant Retrieval

Get all descendants for a specific concept:
TypeScript

Limited Hierarchy Depth

Retrieve descendants up to a specific number of levels:
TypeScript

Domain-Specific Descendants

Filter descendants to specific medical domains:
TypeScript

Detailed Descendant Information

Get descendants with hierarchy levels and path information:
TypeScript

Notes

  • Descendant traversal follows “Is a” relationships by default, but can include other relationship types
  • Large hierarchies may contain thousands of descendants - use pagination and filtering appropriately
  • Standard concepts are prioritized unless explicitly disabled
  • Some medical concepts may have very deep hierarchies (6+ levels)
  • Cross-vocabulary concepts may have descendants from multiple vocabularies
  • Deprecated concepts are excluded from descendants unless specifically requested with include_invalid=true