> ## Documentation Index
> Fetch the complete documentation index at: https://docs.omophub.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Get Concept Classes

> Retrieve all OMOP concept classes that categorize medical concepts - Clinical Finding, Ingredient, Procedure, and the complete OHDSI classification set.

This endpoint returns concept classes, which provide categorization of medical concepts within their domains. Concept classes distinguish between different types of concepts like "Clinical Finding" vs "Disorder" within conditions, or "Ingredient" vs "Clinical Drug" within drugs.

## Query Parameters

<ParamField query="vocabulary_ids" type="string" optional>
  Filter concept classes to those used by specific vocabularies. Comma-separated list.

  <br />

  **Example:** `SNOMED,RxNorm,ICD10CM`
</ParamField>

<ParamField query="include_stats" type="boolean" optional default="false">
  Include concept counts and vocabulary coverage for each concept class.
</ParamField>

<ParamField query="vocab_release" type="string" optional>
  Specific vocabulary release version to query

  <br />

  **Example:** `2025.1`
</ParamField>

## Response

<ResponseField name="success" type="boolean">
  Indicates if the request was successful.
</ResponseField>

<ResponseField name="data" type="object">
  Response data container.

  <Expandable title="Data Object">
    <ResponseField name="concept_classes" type="array">
      Array of concept class objects.

      <Expandable title="Concept Class Object">
        <ResponseField name="concept_class_id" type="string">
          Unique identifier for the concept class.
        </ResponseField>

        <ResponseField name="concept_class_name" type="string">
          Human-readable name of the concept class.
        </ResponseField>

        <ResponseField name="concept_class_concept_id" type="integer">
          OMOP concept ID representing this concept class.
        </ResponseField>

        <ResponseField name="concept_count" type="integer" optional>
          Number of concepts in this concept class (when `include_stats=true`).
        </ResponseField>

        <ResponseField name="vocabulary_coverage" type="array" optional>
          List of vocabulary IDs that have concepts in this class (when `include_stats=true`).
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="meta" type="object">
  Response metadata.

  <Expandable title="Metadata Object">
    <ResponseField name="request_id" type="string">
      Unique identifier for this request.
    </ResponseField>

    <ResponseField name="vocab_release" type="string">
      Vocabulary release version used.
    </ResponseField>

    <ResponseField name="timestamp" type="string">
      Response timestamp (ISO format).
    </ResponseField>
  </Expandable>
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X GET "https://api.omophub.com/v1/concept-classes?include_stats=true" \
    -H "Authorization: Bearer YOUR_API_KEY"
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    'https://api.omophub.com/v1/concept-classes?include_stats=true',
    {
      headers: {
        'Authorization': 'Bearer YOUR_API_KEY'
      }
    }
  );

  const data = await response.json();
  console.log(`Found ${data.data.concept_classes.length} concept classes`);

  // Display concept classes with counts
  data.data.concept_classes.forEach(cc => {
    console.log(`${cc.concept_class_name}: ${cc.concept_count || 'N/A'} concepts`);
  });
  ```

  ```python Python theme={null}
  import requests

  response = requests.get(
      "https://api.omophub.com/v1/concept-classes",
      params={"include_stats": True, "vocabulary_ids": "SNOMED,RxNorm"},
      headers={"Authorization": "Bearer YOUR_API_KEY"}
  )

  data = response.json()
  for cc in data["data"]["concept_classes"]:
      print(f"{cc['concept_class_name']}: {cc.get('concept_count', 'N/A')} concepts")
  ```
</RequestExample>

<ResponseExample>
  ```json theme={null}
  {
    "success": true,
    "data": {
      "concept_classes": [
        {
          "concept_class_id": "Clinical Finding",
          "concept_class_name": "Clinical Finding",
          "concept_class_concept_id": 441840,
          "concept_count": 425891,
          "vocabulary_coverage": ["SNOMED", "Read"]
        },
        {
          "concept_class_id": "Ingredient",
          "concept_class_name": "Ingredient",
          "concept_class_concept_id": 441828,
          "concept_count": 45678,
          "vocabulary_coverage": ["RxNorm", "SNOMED"]
        },
        {
          "concept_class_id": "Procedure",
          "concept_class_name": "Procedure",
          "concept_class_concept_id": 441838,
          "concept_count": 198765,
          "vocabulary_coverage": ["SNOMED", "HCPCS"]
        }
      ]
    },
    "meta": {
      "request_id": "req_abc123",
      "vocab_release": "2025.1",
      "timestamp": "2025-01-05T10:00:00Z"
    }
  }
  ```
</ResponseExample>

## Usage Examples

### All Concept Classes

Get all concept classes without statistics:

```bash theme={null}
GET /v1/concept-classes
```

### With Statistics

Get concept classes with concept counts and vocabulary coverage:

```bash theme={null}
GET /v1/concept-classes?include_stats=true
```

### Filter by Vocabulary

Get concept classes used by specific vocabularies:

```bash theme={null}
GET /v1/concept-classes?vocabulary_ids=SNOMED,RxNorm&include_stats=true
```

## Related Endpoints

* [Get Domains](/api-reference/domains/get-domains) - Available domain information
* [Get Domain Concepts](/api-reference/domains/get-domain-concepts) - Concepts within a domain

## Notes

* Concept classes provide finer categorization than domains
* Many concept classes are vocabulary-specific (e.g., "3-char billing code" for ICD codes)
* When filtering by vocabulary, only concept classes that contain concepts from those vocabularies are returned
* The `vocabulary_coverage` field shows which vocabularies contribute concepts to each class
