Search

Search API for FHIR resources

Aidbox provides a Search API for all stored resources. Aidbox Search API is a superset of the FHIR Search API.

There are two versions of API, which differ by the resources format:

  • search by /[resourceType] returns results in Aidbox Format

  • search by /fhir/[resourceType] returns data in FHIR Format

All data is stored and searched in Aidbox Format and converted on the fly to FHIR on FHIR endpoints!

A base search request is composed of the list of pairs param = value:

GET [base]/fhir/[resourceType]?param=value&param=value&...

Where param can be one of:

Simple search by patient name:

GET /fhir/Patient?name=Max&_elements=id, birthDAte

Special Parameters

Search Parameters

Search is defined in terms of "search parameters". SearchParameter is a meta-resource, which describes which part of the resource it is and how you can make it searchable.

Search parameter can be one of the following types:

Depending on the value type, different modifiers can be applied.

Supported modifiers

Search with modifiers examples

:missing

GET /fhir/Entity?description:missing=true
// For gender:missing=true,
// server will return all resources that
// don't have a value for the gender parameter. 

:text

// Search for any patient with johndoe@mail.com email
GET /fhir/Patient?email:text=JoHnDoE@mail.com

// Search for any patient with gmail or icloud email
GET /fhir/Patient?email:text=GMail.com,ICloud.com

// Search for any patient which have "fhir" in any of their contact info
GET /fhir/Patient?telecom:text=fhir

:exact

GET /fhir/Patient?name:exact=Alex

:not

//Search for any patient with a gender that does not have the code "male"
//Note that for :not, the search does not return any resources that have a gen
GET /fhir/Patient?gender:not=male

i

// Search for patient with email which is Foo@Bar.BAZ
GET /fhir/Patient?email:i=foo@bar.baz
// Note: this search won't find patient with emails like:
// ffoo@bar.baz
// foo@bar.bazz

in

//Search for any condition that is in the institutions list of cardiac conditions
//Note: you must have Concept with valueset defined

GET /fhir/Condition?code:in=/ValueSet/cardiac-conditions

Prefixes

For Numbers, Dates, and Quantities, we can use the following conditionals in a search:

  • eq - equal (default)

  • ne - non-equal

  • lt - less than

  • le - less or equal

  • gt - greater than

  • ge - greater or equal

For example, to search for patients, who were born before 1986-04-28:

GET /fhir/Patient?birthdate=lt1986-04-28

Want to know more about Aidbox, FHIR, and search? Join our community chat .

Aidbox returns links in response in search requests:

GET /fhir/Patient

resourceType: Bundle
type: searchset
meta:
  versionId: '0'
total: 0
link:
  - relation: first
    url: /fhir/Patient?page=1
  - relation: self
    url: /fhir/Patient?page=1
entry: []

There are two options that can modify url param content:

  • AIDBOX_COMPLIANCE environment variable

  • X-Original-Uri header

AIDBOX_COMPLIANCE env

IF AIDBOX_COMPLIANCE env is enabled then AIDBOX_BASE_URL environment variable will be used like this: <AIDBOX_BASE_URL>/fhir/Patient?page=1. For example we set AIDBOX_BASE_URL to "https://example.com":

GET /fhir/Patient

resourceType: Bundle
type: searchset
meta:
  versionId: '0'
total: 0
link:
  - relation: first
    url: https://example.com/fhir/Patient?page=1
  - relation: self
    url: https://example.com/fhir/Patient?page=1
entry: []

X-Original-Uri header

This header allows you completely overwrite content of url param. Aidbox will automatically add page param to your link, or replace if it exists. For example:

GET /fhir/Patient?name=example
x-original-uri: https://example.com/fhir/Patient?page=4

resourceType: Bundle
type: searchset
meta:
  versionId: '0'
total: 0
link:
  - relation: first
    url: https://example.com/fhir/Patient?page=1
  - relation: self
    url: https://example.com/fhir/Patient?page=4
entry: []

Last updated