Skip to main content
curl -X POST "https://api.omophub.com/v1/search/semantic-bulk" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "defaults": {
      "vocabulary_ids": ["SNOMED"],
      "standard_concept": "S",
      "threshold": 0.5,
      "page_size": 5
    },
    "searches": [
      {
        "search_id": "s1",
        "query": "heart attack"
      },
      {
        "search_id": "s2",
        "query": "sugar diabetes",
        "threshold": 0.7
      },
      {
        "search_id": "s3",
        "query": "aspirin tablets",
        "vocabulary_ids": ["RxNorm"],
        "domain_ids": ["Drug"]
      }
    ]
  }'
{
  "success": true,
  "data": {
    "results": [
      {
        "search_id": "s1",
        "query": "heart attack",
        "status": "completed",
        "results": [
          {
            "concept_id": 4329847,
            "concept_name": "Myocardial infarction",
            "concept_code": "22298006",
            "vocabulary_id": "SNOMED",
            "domain_id": "Condition",
            "concept_class_id": "Clinical Finding",
            "standard_concept": "S",
            "similarity_score": 0.92,
            "matched_text": "Myocardial infarction"
          },
          {
            "concept_id": 434376,
            "concept_name": "Acute myocardial infarction",
            "concept_code": "57054005",
            "vocabulary_id": "SNOMED",
            "domain_id": "Condition",
            "concept_class_id": "Clinical Finding",
            "standard_concept": "S",
            "similarity_score": 0.89,
            "matched_text": "Acute myocardial infarction"
          }
        ],
        "similarity_threshold": 0.5,
        "result_count": 2,
        "duration": 45,
        "query_enhancement": null
      },
      {
        "search_id": "s2",
        "query": "sugar diabetes",
        "status": "completed",
        "results": [
          {
            "concept_id": 201826,
            "concept_name": "Type 2 diabetes mellitus",
            "concept_code": "44054006",
            "vocabulary_id": "SNOMED",
            "domain_id": "Condition",
            "concept_class_id": "Clinical Finding",
            "standard_concept": "S",
            "similarity_score": 0.88,
            "matched_text": "Type 2 diabetes mellitus"
          },
          {
            "concept_id": 4000678,
            "concept_name": "Diabetes mellitus",
            "concept_code": "73211009",
            "vocabulary_id": "SNOMED",
            "domain_id": "Condition",
            "concept_class_id": "Clinical Finding",
            "standard_concept": "S",
            "similarity_score": 0.85,
            "matched_text": "Diabetes mellitus"
          }
        ],
        "similarity_threshold": 0.7,
        "result_count": 2,
        "duration": 38,
        "query_enhancement": null
      },
      {
        "search_id": "s3",
        "query": "aspirin tablets",
        "status": "completed",
        "results": [
          {
            "concept_id": 1112807,
            "concept_name": "Aspirin",
            "concept_code": "1191",
            "vocabulary_id": "RxNorm",
            "domain_id": "Drug",
            "concept_class_id": "Ingredient",
            "standard_concept": "S",
            "similarity_score": 0.94,
            "matched_text": "Aspirin"
          }
        ],
        "similarity_threshold": 0.5,
        "result_count": 1,
        "duration": 32,
        "query_enhancement": null
      }
    ],
    "total_searches": 3,
    "completed_count": 3,
    "failed_count": 0,
    "total_duration": 156
  },
  "meta": {
    "request_id": "req_sem_bulk_abc123",
    "vocab_release": "2025.2",
    "timestamp": "2025-01-15T10:30:00Z"
  }
}

Overview

This endpoint allows you to submit multiple semantic search queries in a single request, combining the power of vector similarity matching with efficient batch processing. We host a vector similarity service and do not use third party services for this. It’s ideal for processing clinical notes, batch NLP pipelines, or any workflow requiring high-confidence concept matching across many terms. Each query uses vector similarity search with a default limit of 10 results per query (configurable via page_size, max 50). Up to 25 queries can be submitted per request.

Request Body

searches
array
required
Array of semantic search query objects (1-25 items)
defaults
object
Default parameters applied to all searches. Individual searches can override any default.

Query Parameters

vocab_release
string
Specific vocabulary release version (defaults to latest)

Response

success
boolean
Indicates if the request was successful
data
object
Response data object containing results and summary counts
meta
object
curl -X POST "https://api.omophub.com/v1/search/semantic-bulk" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "defaults": {
      "vocabulary_ids": ["SNOMED"],
      "standard_concept": "S",
      "threshold": 0.5,
      "page_size": 5
    },
    "searches": [
      {
        "search_id": "s1",
        "query": "heart attack"
      },
      {
        "search_id": "s2",
        "query": "sugar diabetes",
        "threshold": 0.7
      },
      {
        "search_id": "s3",
        "query": "aspirin tablets",
        "vocabulary_ids": ["RxNorm"],
        "domain_ids": ["Drug"]
      }
    ]
  }'
{
  "success": true,
  "data": {
    "results": [
      {
        "search_id": "s1",
        "query": "heart attack",
        "status": "completed",
        "results": [
          {
            "concept_id": 4329847,
            "concept_name": "Myocardial infarction",
            "concept_code": "22298006",
            "vocabulary_id": "SNOMED",
            "domain_id": "Condition",
            "concept_class_id": "Clinical Finding",
            "standard_concept": "S",
            "similarity_score": 0.92,
            "matched_text": "Myocardial infarction"
          },
          {
            "concept_id": 434376,
            "concept_name": "Acute myocardial infarction",
            "concept_code": "57054005",
            "vocabulary_id": "SNOMED",
            "domain_id": "Condition",
            "concept_class_id": "Clinical Finding",
            "standard_concept": "S",
            "similarity_score": 0.89,
            "matched_text": "Acute myocardial infarction"
          }
        ],
        "similarity_threshold": 0.5,
        "result_count": 2,
        "duration": 45,
        "query_enhancement": null
      },
      {
        "search_id": "s2",
        "query": "sugar diabetes",
        "status": "completed",
        "results": [
          {
            "concept_id": 201826,
            "concept_name": "Type 2 diabetes mellitus",
            "concept_code": "44054006",
            "vocabulary_id": "SNOMED",
            "domain_id": "Condition",
            "concept_class_id": "Clinical Finding",
            "standard_concept": "S",
            "similarity_score": 0.88,
            "matched_text": "Type 2 diabetes mellitus"
          },
          {
            "concept_id": 4000678,
            "concept_name": "Diabetes mellitus",
            "concept_code": "73211009",
            "vocabulary_id": "SNOMED",
            "domain_id": "Condition",
            "concept_class_id": "Clinical Finding",
            "standard_concept": "S",
            "similarity_score": 0.85,
            "matched_text": "Diabetes mellitus"
          }
        ],
        "similarity_threshold": 0.7,
        "result_count": 2,
        "duration": 38,
        "query_enhancement": null
      },
      {
        "search_id": "s3",
        "query": "aspirin tablets",
        "status": "completed",
        "results": [
          {
            "concept_id": 1112807,
            "concept_name": "Aspirin",
            "concept_code": "1191",
            "vocabulary_id": "RxNorm",
            "domain_id": "Drug",
            "concept_class_id": "Ingredient",
            "standard_concept": "S",
            "similarity_score": 0.94,
            "matched_text": "Aspirin"
          }
        ],
        "similarity_threshold": 0.5,
        "result_count": 1,
        "duration": 32,
        "query_enhancement": null
      }
    ],
    "total_searches": 3,
    "completed_count": 3,
    "failed_count": 0,
    "total_duration": 156
  },
  "meta": {
    "request_id": "req_sem_bulk_abc123",
    "vocab_release": "2025.2",
    "timestamp": "2025-01-15T10:30:00Z"
  }
}
FeatureBulk Semantic SearchBulk Search
Search methodVector similarity (embeddings)Full-text keyword matching
Score fieldsimilarity_score (0.0-1.0)search_score (relevance rank)
Max queries25 per request50 per request
Max page_size50100
Threshold parameterYes (filters by similarity)No
Query enhancementYes (abbreviation expansion, typo correction)No
Response shapedata (object with results array and summary)data (direct array)

Use Cases

Clinical Notes Processing

Process extracted terms from clinical notes in batch:
# Terms extracted from clinical notes via NLP
clinical_terms = [
    "chest pain radiating to left arm",
    "shortness of breath on exertion",
    "elevated troponin levels",
    "irregular heartbeat"
]

payload = {
    "defaults": {
        "vocabulary_ids": ["SNOMED"],
        "domain_ids": ["Condition", "Observation"],
        "standard_concept": "S",
        "threshold": 0.6
    },
    "searches": [
        {"search_id": f"note_{i}", "query": term}
        for i, term in enumerate(clinical_terms)
    ]
}

response = requests.post(
    "https://api.omophub.com/v1/search/semantic-bulk",
    headers=headers,
    json=payload
)

High-Confidence Batch Matching

Use a high threshold for automated mapping pipelines where accuracy is critical:
payload = {
    "defaults": {
        "threshold": 0.8,
        "standard_concept": "S",
        "page_size": 3
    },
    "searches": [
        {"search_id": "dx1", "query": "heart attack"},
        {"search_id": "dx2", "query": "high blood pressure"},
        {"search_id": "dx3", "query": "sugar diabetes"}
    ]
}
Search across different domains in a single request using per-search overrides:
payload = {
    "defaults": {"standard_concept": "S", "threshold": 0.5},
    "searches": [
        {
            "search_id": "cond1",
            "query": "chest pain",
            "domain_ids": ["Condition"],
            "vocabulary_ids": ["SNOMED"]
        },
        {
            "search_id": "drug1",
            "query": "blood thinner medication",
            "domain_ids": ["Drug"],
            "vocabulary_ids": ["RxNorm"]
        },
        {
            "search_id": "lab1",
            "query": "blood sugar test",
            "domain_ids": ["Measurement"],
            "vocabulary_ids": ["LOINC"]
        }
    ]
}

Error Handling

Per-Query Failure Isolation

Each query in the batch is processed independently. Failed queries do not affect other queries:
{
  "success": true,
  "data": {
    "results": [
      {
        "search_id": "s1",
        "query": "heart attack",
        "status": "completed",
        "results": [...],
        "similarity_threshold": 0.5,
        "result_count": 5,
        "duration": 42,
        "query_enhancement": null
      },
      {
        "search_id": "s2",
        "query": "",
        "status": "failed",
        "results": [],
        "error": "Search query is required",
        "similarity_threshold": 0.5,
        "result_count": 0,
        "duration": 1,
        "query_enhancement": null
      }
    ],
    "total_searches": 2,
    "completed_count": 1,
    "failed_count": 1,
    "total_duration": 48
  }
}