Skip to main content
curl -X POST "https://api.omophub.com/v1/search/bulk" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "defaults": {
      "vocabulary_ids": ["SNOMED"],
      "standard_concept": "S"
    },
    "searches": [
      {
        "search_id": "s1",
        "query": "diabetes"
      },
      {
        "search_id": "s2",
        "query": "hypertension"
      },
      {
        "search_id": "s3",
        "query": "aspirin",
        "vocabulary_ids": ["RxNorm"],
        "domain_ids": ["Drug"]
      }
    ]
  }'
{
  "success": true,
  "data": [
    {
      "search_id": "s1",
      "query": "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",
          "search_score": 100
        },
        {
          "concept_id": 4000678,
          "concept_name": "Diabetes mellitus",
          "concept_code": "73211009",
          "vocabulary_id": "SNOMED",
          "domain_id": "Condition",
          "concept_class_id": "Clinical Finding",
          "standard_concept": "S",
          "search_score": 90
        }
      ],
      "duration": 856
    },
    {
      "search_id": "s2",
      "query": "hypertension",
      "status": "completed",
      "results": [
        {
          "concept_id": 320128,
          "concept_name": "Essential hypertension",
          "concept_code": "59621000",
          "vocabulary_id": "SNOMED",
          "domain_id": "Condition",
          "concept_class_id": "Clinical Finding",
          "standard_concept": "S",
          "search_score": 100
        },
        {
          "concept_id": 316866,
          "concept_name": "Hypertensive disorder",
          "concept_code": "38341003",
          "vocabulary_id": "SNOMED",
          "domain_id": "Condition",
          "concept_class_id": "Clinical Finding",
          "standard_concept": "S",
          "search_score": 90
        }
      ],
      "duration": 1034
    },
    {
      "search_id": "s3",
      "query": "aspirin",
      "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",
          "search_score": 100
        }
      ],
      "duration": 957
    }
  ],
  "meta": {
    "request_id": "req_bulk_search_123",
    "timestamp": "2024-01-15T10:30:00Z",
    "vocab_release": "2025.2"
  }
}

Overview

This endpoint allows you to submit multiple search queries in a single request, enabling efficient batch processing of search operations. It’s ideal for applications that need to search for many terms simultaneously, such as data processing pipelines, bulk concept mapping, or batch validation workflows. Each query uses full-text search with a default limit of 20 results per query (configurable via page_size, max 100). Up to 50 queries can be submitted per request.
For paginated results or semantic search, use the Basic Search or Semantic Search endpoints instead.

Request Body

searches
array
required
Array of search query objects (1-50 items)
defaults
object
Default filter 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
array
Array of search results, one per query
meta
object
curl -X POST "https://api.omophub.com/v1/search/bulk" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "defaults": {
      "vocabulary_ids": ["SNOMED"],
      "standard_concept": "S"
    },
    "searches": [
      {
        "search_id": "s1",
        "query": "diabetes"
      },
      {
        "search_id": "s2",
        "query": "hypertension"
      },
      {
        "search_id": "s3",
        "query": "aspirin",
        "vocabulary_ids": ["RxNorm"],
        "domain_ids": ["Drug"]
      }
    ]
  }'
{
  "success": true,
  "data": [
    {
      "search_id": "s1",
      "query": "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",
          "search_score": 100
        },
        {
          "concept_id": 4000678,
          "concept_name": "Diabetes mellitus",
          "concept_code": "73211009",
          "vocabulary_id": "SNOMED",
          "domain_id": "Condition",
          "concept_class_id": "Clinical Finding",
          "standard_concept": "S",
          "search_score": 90
        }
      ],
      "duration": 856
    },
    {
      "search_id": "s2",
      "query": "hypertension",
      "status": "completed",
      "results": [
        {
          "concept_id": 320128,
          "concept_name": "Essential hypertension",
          "concept_code": "59621000",
          "vocabulary_id": "SNOMED",
          "domain_id": "Condition",
          "concept_class_id": "Clinical Finding",
          "standard_concept": "S",
          "search_score": 100
        },
        {
          "concept_id": 316866,
          "concept_name": "Hypertensive disorder",
          "concept_code": "38341003",
          "vocabulary_id": "SNOMED",
          "domain_id": "Condition",
          "concept_class_id": "Clinical Finding",
          "standard_concept": "S",
          "search_score": 90
        }
      ],
      "duration": 1034
    },
    {
      "search_id": "s3",
      "query": "aspirin",
      "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",
          "search_score": 100
        }
      ],
      "duration": 957
    }
  ],
  "meta": {
    "request_id": "req_bulk_search_123",
    "timestamp": "2024-01-15T10:30:00Z",
    "vocab_release": "2025.2"
  }
}

Usage Examples

Search multiple terms simultaneously without filters:
curl -X POST "https://api.omophub.com/v1/search/bulk" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "searches": [
      {"search_id": "s1", "query": "diabetes"},
      {"search_id": "s2", "query": "hypertension"},
      {"search_id": "s3", "query": "asthma"}
    ]
  }'

Filtered Bulk Search with Defaults

Apply common filters to all searches using defaults, with per-search overrides:
curl -X POST "https://api.omophub.com/v1/search/bulk" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "defaults": {
      "vocabulary_ids": ["SNOMED"],
      "domain_ids": ["Condition"],
      "standard_concept": "S"
    },
    "searches": [
      {"search_id": "s1", "query": "diabetes"},
      {"search_id": "s2", "query": "heart failure"},
      {"search_id": "s3", "query": "metformin", "vocabulary_ids": ["RxNorm"], "domain_ids": ["Drug"]}
    ]
  }'
In this example, searches s1 and s2 use the defaults (SNOMED, Condition domain, standard concepts only). Search s3 overrides with RxNorm vocabulary and Drug domain.

Per-Search Filters

Apply different filters to each search individually:
curl -X POST "https://api.omophub.com/v1/search/bulk" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "searches": [
      {"search_id": "s1", "query": "diabetes", "vocabulary_ids": ["SNOMED"], "domain_ids": ["Condition"]},
      {"search_id": "s2", "query": "metformin", "vocabulary_ids": ["RxNorm"], "domain_ids": ["Drug"]},
      {"search_id": "s3", "query": "HbA1c", "vocabulary_ids": ["LOINC"], "domain_ids": ["Measurement"]}
    ]
  }'

High-Volume Processing

Process larger batches from a file:
curl -X POST "https://api.omophub.com/v1/search/bulk" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d @bulk_queries.json
Example bulk_queries.json:
{
  "defaults": {
    "vocabulary_ids": ["SNOMED"],
    "standard_concept": "S"
  },
  "searches": [
    {"search_id": "q1", "query": "diabetes mellitus"},
    {"search_id": "q2", "query": "essential hypertension"},
    {"search_id": "q3", "query": "chronic kidney disease"},
    {"search_id": "q4", "query": "atrial fibrillation"},
    {"search_id": "q5", "query": "congestive heart failure"}
  ]
}

Optimization Strategies

Query Grouping

  • Batch Size: Optimal batch size is 10-50 queries per request
  • Bulk Mode: The bulk_mode parameter (default true) enables optimized query execution for better throughput
  • Result Limit: Each query returns up to 20 results by default (configurable via page_size, max 100)

Performance Tips

  • Use concise, specific search terms for faster results
  • Split very large query sets into multiple requests of 50 queries each
  • Use the search_id field to correlate results with your source data
  • Use defaults to apply common filters instead of repeating them per search
  • Applying filters (vocabulary, domain) generally improves performance by narrowing the search space

Error Handling

  • Each query in the batch is processed independently
  • Failed queries return status: "failed" with an error message
  • Successful queries are not affected by failures in other queries