FHIR Server or Client?

Does anyone have any guidance for deciding when to set up an FHIR Server vs FHIR Client?

I’m working on a PACS-like tool for screening patients. I’m setting up this tool to one day integrate with multiple hostpial EHR systems, but I’m not sure where to start, specifically what the architecture should look like? Should I build an FHIR Server or Client, or both?

There are two main functions:

  1. To obtain a list of patients/encounters (from a hospital EHR) to put into the PACS tool, say appointments loaded at the beginning of the day. I also imagine a lot of related calls will be needed to handle all sorts of unusual cases. Things like patients showing up that weren’t pulled from the EHR (and verifying their information before uploading them).

When a patient comes in, users can submit an encounter to the tool with images taken during their visit. Grader users can come in an graded those images and create a 1 or more PDF report for the encounter. That leads to the 2nd function …

  1. To upload PDF reports to the hospital EHR with results/PDF reports for those encounters.

There is also historical data in the tool, so there will probably be corrections to old data that need to be synced - correcting the patient attached to an encounter, changing the grade on an encounter, etc.

I could see this working in 2 ways: The tool provides an FHIR Server where the hospital POSTs patients/encounters, or the tool builds an FHIR Client and connects to the hospital and pulls the patients/encounters. (And a reversed setup for sending results back to the hospital). How do I decide between building an FHIR Server and Client? Are there any rules of thumbs or principles to follow? Are there any questions I should be asking to determine which solution is the best fit?

A server is a system that owns data and exposes it to others for search or manipulation. A client is a system that accesses or manipulates data that resides on a different system.

So, if you’re retrieving patients or encounters from an EHR, you’ll be a client of that EHR. If you’re creating encounters or images, you need to decide whether you’re going to push those to the relevant EHR (in which case you’d be a client) or whether you’ll store them locally and expect the EHR to pull them (in which case you’d be a server).

As a rule, most EHRs are happier to work as servers than as clients. The server interface is generic. A client interface needs to be configured to talk to your system - both how and when.

You might find this page helpful in describing the multitude of ways of sharing data between systems and the trade-offs between them.


Thank you for the helpful reply. I may have to be the one that is that needs to do the configuring, so that will probably push me towards a client setup. The page you linked is extremely helpful!