curl -X GET "https://api.omophub.com/v1/concepts/201826/relations/any" \
-H "Authorization: Bearer YOUR_API_KEY"
import requests
concept_id = 201826 # Type 2 diabetes
url = f"https://api.omophub.com/v1/concepts/{concept_id}/relations/any"
params = {
"relationship_types": "Maps to,Is a",
"include_reverse": True
}
headers = {
"Authorization": "Bearer YOUR_API_KEY"
}
response = requests.get(url, params=params, headers=headers)
data = response.json()
if data['data']['has_relations']:
print(f"✓ Concept {concept_id} has relationships")
summary = data['data']['relation_summary']
print(f" - Total: {summary['total_count']}")
print(f" - Standard mappings: {'Yes' if summary['has_standard_mappings'] else 'No'}")
else:
print(f"✗ Concept {concept_id} has no relationships")
import { OMOPHub } from '@omophub/omophub-node';
// Not yet exposed as a dedicated SDK method — use the typed low-level helper.
const client = new OMOPHub();
interface RelationCheck {
has_relations: boolean;
relation_summary: { total_count: number; relationship_types: string[] };
}
const conceptId = 201826; // Type 2 diabetes
const { data } = await client.get<RelationCheck>(`/concepts/${conceptId}/relations/any`);
if (data?.has_relations) {
console.log(`Concept ${conceptId} has ${data.relation_summary.total_count} relationships`);
console.log('Relationship types:', data.relation_summary.relationship_types);
} else {
console.log(`Concept ${conceptId} has no relationships`);
}
curl -X GET "https://api.omophub.com/v1/concepts/201826/relations/any?relationship_types=Maps%20to&vocabulary_ids=ICD10CM,ICD9CM" \
-H "Authorization: Bearer YOUR_API_KEY"
import requests
def validate_concept_connectivity(concept_ids):
"""
Check which concepts have standard mappings for data quality validation
"""
connected_concepts = []
isolated_concepts = []
for concept_id in concept_ids:
url = f"https://api.omophub.com/v1/concepts/{concept_id}/relations/any"
params = {
"relationship_types": "Maps to",
"vocabulary_ids": "SNOMED,ICD10CM,ICD9CM"
}
response = requests.get(url, params=params, headers={
"Authorization": "Bearer YOUR_API_KEY"
})
data = response.json()
concept_data = data['data']
if concept_data['has_relations'] and concept_data['relation_summary']['has_standard_mappings']:
connected_concepts.append({
'concept_id': concept_id,
'total_mappings': concept_data['relation_summary']['total_count'],
'vocabularies': concept_data['relation_summary']['connected_vocabularies']
})
else:
isolated_concepts.append(concept_id)
print(f"Connected concepts: {len(connected_concepts)}")
print(f"Isolated concepts: {len(isolated_concepts)}")
return connected_concepts, isolated_concepts
# Validate a set of cardiovascular concepts
cardiovascular_concepts = [201826, 4182210, 313217, 320128, 434557]
connected, isolated = validate_concept_connectivity(cardiovascular_concepts)
for concept in connected[:3]: # Show top 3
print(f"Concept {concept['concept_id']}: {concept['total_mappings']} mappings across {len(concept['vocabularies'])} vocabularies")
{
"success": true,
"data": {
"concept_id": 201826,
"has_relations": true,
"relation_summary": {
"total_count": 15,
"outbound_count": 8,
"inbound_count": 7,
"relationship_types": ["Maps to", "Is a", "Has finding site", "May be a"],
"connected_vocabularies": ["SNOMED", "ICD10CM", "ICD9CM"],
"has_standard_mappings": true
},
"checks_performed": {
"included_relationship_types": ["all"],
"included_vocabularies": ["all"],
"included_reverse_relations": true,
"included_invalid_relations": false
}
},
"meta": {
"request_id": "req_check_relations_123",
"timestamp": "2024-12-22T10:00:00Z",
"vocab_release": "2025.2"
}
}
Check Concept Relations
Check whether an OMOP concept has any relationships without loading the full relationship payload - a lightweight existence check for ETL validation.
curl -X GET "https://api.omophub.com/v1/concepts/201826/relations/any" \
-H "Authorization: Bearer YOUR_API_KEY"
import requests
concept_id = 201826 # Type 2 diabetes
url = f"https://api.omophub.com/v1/concepts/{concept_id}/relations/any"
params = {
"relationship_types": "Maps to,Is a",
"include_reverse": True
}
headers = {
"Authorization": "Bearer YOUR_API_KEY"
}
response = requests.get(url, params=params, headers=headers)
data = response.json()
if data['data']['has_relations']:
print(f"✓ Concept {concept_id} has relationships")
summary = data['data']['relation_summary']
print(f" - Total: {summary['total_count']}")
print(f" - Standard mappings: {'Yes' if summary['has_standard_mappings'] else 'No'}")
else:
print(f"✗ Concept {concept_id} has no relationships")
import { OMOPHub } from '@omophub/omophub-node';
// Not yet exposed as a dedicated SDK method — use the typed low-level helper.
const client = new OMOPHub();
interface RelationCheck {
has_relations: boolean;
relation_summary: { total_count: number; relationship_types: string[] };
}
const conceptId = 201826; // Type 2 diabetes
const { data } = await client.get<RelationCheck>(`/concepts/${conceptId}/relations/any`);
if (data?.has_relations) {
console.log(`Concept ${conceptId} has ${data.relation_summary.total_count} relationships`);
console.log('Relationship types:', data.relation_summary.relationship_types);
} else {
console.log(`Concept ${conceptId} has no relationships`);
}
curl -X GET "https://api.omophub.com/v1/concepts/201826/relations/any?relationship_types=Maps%20to&vocabulary_ids=ICD10CM,ICD9CM" \
-H "Authorization: Bearer YOUR_API_KEY"
import requests
def validate_concept_connectivity(concept_ids):
"""
Check which concepts have standard mappings for data quality validation
"""
connected_concepts = []
isolated_concepts = []
for concept_id in concept_ids:
url = f"https://api.omophub.com/v1/concepts/{concept_id}/relations/any"
params = {
"relationship_types": "Maps to",
"vocabulary_ids": "SNOMED,ICD10CM,ICD9CM"
}
response = requests.get(url, params=params, headers={
"Authorization": "Bearer YOUR_API_KEY"
})
data = response.json()
concept_data = data['data']
if concept_data['has_relations'] and concept_data['relation_summary']['has_standard_mappings']:
connected_concepts.append({
'concept_id': concept_id,
'total_mappings': concept_data['relation_summary']['total_count'],
'vocabularies': concept_data['relation_summary']['connected_vocabularies']
})
else:
isolated_concepts.append(concept_id)
print(f"Connected concepts: {len(connected_concepts)}")
print(f"Isolated concepts: {len(isolated_concepts)}")
return connected_concepts, isolated_concepts
# Validate a set of cardiovascular concepts
cardiovascular_concepts = [201826, 4182210, 313217, 320128, 434557]
connected, isolated = validate_concept_connectivity(cardiovascular_concepts)
for concept in connected[:3]: # Show top 3
print(f"Concept {concept['concept_id']}: {concept['total_mappings']} mappings across {len(concept['vocabularies'])} vocabularies")
{
"success": true,
"data": {
"concept_id": 201826,
"has_relations": true,
"relation_summary": {
"total_count": 15,
"outbound_count": 8,
"inbound_count": 7,
"relationship_types": ["Maps to", "Is a", "Has finding site", "May be a"],
"connected_vocabularies": ["SNOMED", "ICD10CM", "ICD9CM"],
"has_standard_mappings": true
},
"checks_performed": {
"included_relationship_types": ["all"],
"included_vocabularies": ["all"],
"included_reverse_relations": true,
"included_invalid_relations": false
}
},
"meta": {
"request_id": "req_check_relations_123",
"timestamp": "2024-12-22T10:00:00Z",
"vocab_release": "2025.2"
}
}
Overview
This lightweight endpoint quickly determines whether a concept has any relationships to other concepts. This is useful for UI components, validation logic, or filtering concepts that are isolated vs. connected in the terminology network.Path Parameters
The unique OMOP concept ID to check for relationships
Query Parameters
Comma-separated list of relationship types to check (e.g., “Maps to”, “Is a”)
Comma-separated list of vocabulary IDs to limit relationship check
Include reverse relationships (concepts that relate to this concept)
Include relationships to invalid/deprecated concepts
Specific vocabulary release version (e.g., “2024.1”)
Response
Indicates whether the request was successful
Response data containing relationship check results
Show data
Show data
The concept ID that was checked
Whether this concept has any relationships matching the specified criteria
Summary information about relationships (when has_relations is true)
Show relation_summary
Show relation_summary
Total number of relationships found
Number of outbound relationships (from this concept)
Number of inbound relationships (to this concept)
Array of relationship types found (up to 10 most common)
Array of vocabularies that have related concepts (up to 10)
Whether concept has mappings to standard concepts
Details about what was checked
Show checks_performed
Show checks_performed
curl -X GET "https://api.omophub.com/v1/concepts/201826/relations/any" \
-H "Authorization: Bearer YOUR_API_KEY"
import requests
concept_id = 201826 # Type 2 diabetes
url = f"https://api.omophub.com/v1/concepts/{concept_id}/relations/any"
params = {
"relationship_types": "Maps to,Is a",
"include_reverse": True
}
headers = {
"Authorization": "Bearer YOUR_API_KEY"
}
response = requests.get(url, params=params, headers=headers)
data = response.json()
if data['data']['has_relations']:
print(f"✓ Concept {concept_id} has relationships")
summary = data['data']['relation_summary']
print(f" - Total: {summary['total_count']}")
print(f" - Standard mappings: {'Yes' if summary['has_standard_mappings'] else 'No'}")
else:
print(f"✗ Concept {concept_id} has no relationships")
import { OMOPHub } from '@omophub/omophub-node';
// Not yet exposed as a dedicated SDK method — use the typed low-level helper.
const client = new OMOPHub();
interface RelationCheck {
has_relations: boolean;
relation_summary: { total_count: number; relationship_types: string[] };
}
const conceptId = 201826; // Type 2 diabetes
const { data } = await client.get<RelationCheck>(`/concepts/${conceptId}/relations/any`);
if (data?.has_relations) {
console.log(`Concept ${conceptId} has ${data.relation_summary.total_count} relationships`);
console.log('Relationship types:', data.relation_summary.relationship_types);
} else {
console.log(`Concept ${conceptId} has no relationships`);
}
curl -X GET "https://api.omophub.com/v1/concepts/201826/relations/any?relationship_types=Maps%20to&vocabulary_ids=ICD10CM,ICD9CM" \
-H "Authorization: Bearer YOUR_API_KEY"
import requests
def validate_concept_connectivity(concept_ids):
"""
Check which concepts have standard mappings for data quality validation
"""
connected_concepts = []
isolated_concepts = []
for concept_id in concept_ids:
url = f"https://api.omophub.com/v1/concepts/{concept_id}/relations/any"
params = {
"relationship_types": "Maps to",
"vocabulary_ids": "SNOMED,ICD10CM,ICD9CM"
}
response = requests.get(url, params=params, headers={
"Authorization": "Bearer YOUR_API_KEY"
})
data = response.json()
concept_data = data['data']
if concept_data['has_relations'] and concept_data['relation_summary']['has_standard_mappings']:
connected_concepts.append({
'concept_id': concept_id,
'total_mappings': concept_data['relation_summary']['total_count'],
'vocabularies': concept_data['relation_summary']['connected_vocabularies']
})
else:
isolated_concepts.append(concept_id)
print(f"Connected concepts: {len(connected_concepts)}")
print(f"Isolated concepts: {len(isolated_concepts)}")
return connected_concepts, isolated_concepts
# Validate a set of cardiovascular concepts
cardiovascular_concepts = [201826, 4182210, 313217, 320128, 434557]
connected, isolated = validate_concept_connectivity(cardiovascular_concepts)
for concept in connected[:3]: # Show top 3
print(f"Concept {concept['concept_id']}: {concept['total_mappings']} mappings across {len(concept['vocabularies'])} vocabularies")
{
"success": true,
"data": {
"concept_id": 201826,
"has_relations": true,
"relation_summary": {
"total_count": 15,
"outbound_count": 8,
"inbound_count": 7,
"relationship_types": ["Maps to", "Is a", "Has finding site", "May be a"],
"connected_vocabularies": ["SNOMED", "ICD10CM", "ICD9CM"],
"has_standard_mappings": true
},
"checks_performed": {
"included_relationship_types": ["all"],
"included_vocabularies": ["all"],
"included_reverse_relations": true,
"included_invalid_relations": false
}
},
"meta": {
"request_id": "req_check_relations_123",
"timestamp": "2024-12-22T10:00:00Z",
"vocab_release": "2025.2"
}
}
Usage Examples
Simple Relationship Check
Check if a concept has any relationships:curl -X GET "https://api.omophub.com/v1/concepts/201826/relations/any" \
-H "Authorization: Bearer YOUR_API_KEY"
Check for Standard Mappings
Check if concept has “Maps to” relationships:curl -G "https://api.omophub.com/v1/concepts/201826/relations/any" \
-H "Authorization: Bearer YOUR_API_KEY" \
--data-urlencode "relationship_types=Maps to"
Check Cross-Vocabulary Relations
Check relationships to specific vocabularies:curl -X GET "https://api.omophub.com/v1/concepts/201826/relations/any?vocabulary_ids=ICD10CM,ICD9CM" \
-H "Authorization: Bearer YOUR_API_KEY"
Batch Checking in Applications
Use in loops or batch processing to filter connected concepts:TypeScript
interface RelCheck {
has_relations: boolean;
relation_summary: { total_count: number; has_standard_mappings: boolean };
}
const conceptIds = [201826, 4182210, 313217];
const connectedConcepts: Array<{ concept_id: number; relation_count: number }> = [];
for (const id of conceptIds) {
const { data } = await client.get<RelCheck>(`/concepts/${id}/relations/any`);
if (data?.has_relations && data.relation_summary.has_standard_mappings) {
connectedConcepts.push({
concept_id: id,
relation_count: data.relation_summary.total_count,
});
}
}
Important Notes
- Performance optimized - Much faster than fetching full relationship data
- Filtering support - All the same filters as the full relations endpoint
- UI integration - Perfect for showing relationship icons or badges
- Batch processing - Ideal for filtering large concept lists
- Standard mappings - The
has_standard_mappingsflag is useful for data quality checks
Related Endpoints
- Get Concept Relationships - Get full relationship data
- Batch Hierarchy Queries - Check relationships for multiple concepts
Was this page helpful?
⌘I