Skip to main content

The HAPI Echidna

High-Performance OMOP Terminology for HAPI FHIR

HAPI FHIR is the gold standard for open source FHIR servers, but its internal terminology management can be resource-intensive, especially when dealing with massive datasets like SNOMED-CT or LOINC, and maintaining the latest versions of your terminologies can be a massive headache. Echidna (echidna.fhir.org) provides a cloud-native terminology server that bridges the gap between OMOP and FHIR, offering blazing-fast lookups and translations without the overhead of local database maintenance.

Switching to Echidna is super simple and free. Let’s see how to do this.


Prerequisites

  • A running instance of HAPI FHIR JPA Starter (or a custom HAPI-based server).
  • Internet access for your server to reach https://echidna.fhir.org.
  • A basic understanding of the FHIR.

Option 1: Configuration via application.yaml

If you are using the HAPI FHIR JPA Starter project, you can switch to Echidna by modifying your configuration file. This is the fastest "no-code" method.

  1. Open your application.yaml file.
  2. Add or modify the following properties:

YAML

hapi:
fhir:
# Enable remote terminology validation
remote_terminology_service_enabled: true

# Set the Echidna R5 endpoint
remote_terminology_server_base_url: 'https://echidna.fhir.org/r5'

# If you have an Echidna membership, you can specify it here:
# remote_terminology_server_auth_token: 'your-echidna-token-here'

By setting these, HAPI will automatically delegate terminology operations it cannot resolve locally to Echidna.


Option 2: Java Configuration (Custom Implementation)

For developers building a custom HAPI FHIR server using the IValidationSupport chain, you must manually inject the RemoteTerminologyServiceValidationSupport module.

Java

// 1. Initialize the FhirContext 
FhirContext ctx = FhirContext.forR5();

// 2. Create the Remote Terminology module pointing to Echidna
RemoteTerminologyServiceValidationSupport remoteTermSvc =
new RemoteTerminologyServiceValidationSupport(ctx);
remoteTermSvc.setBaseUrl("https://echidna.fhir.org/r5");

// 3. Add it to your ValidationSupportChain
ValidationSupportChain chain =
new ValidationSupportChain(
new DefaultProfileValidationSupport(ctx),
new InMemoryTerminologyServerValidationSupport(ctx),
remoteTermSvc // Delegated to Echidna
);

With this option, when HAPI encounters a code validation request (e.g., checking if a SNOMED code is valid), it traverses the ValidationSupportChain. By placing the Echidna remote service in this chain, HAPI can leverage Echidna’s vast OMOP-mapped vocabulary library (10M+ concepts) as if they were stored locally.


Done!

Simply restart the server for the changes to take effect. You can verify to see that everything works as promised.

Verifying the setup

You can verify the integration by performing a $lookup operation through your HAPI server that requires Echidna's specialized OMOP-to-FHIR logic.

Example Request:

HTTP

GET http://your-hapi/fhir/CodeSystem/$lookup?\ 
system=http://fhir-terminology.ohdsi.org&code=49495001

Or, if you are using CURL

Shell

$ curl http://your-hapi/fhir/CodeSystem/$lookup?\ 
system=http://fhir-terminology.ohdsi.org&code=49495001

If everything is configured correctly, HAPI will forward this request to Echidna and return the concept details (Display: "Leukemia") retrieved from the remote server.