pcs logo tiny


Technical Overview, FHIR RESTful API


The Canadian FHIR Pharmacy Claims standard is an update to the existing CPHA standard that has been in place for over 25 years in Canada.

The new PCS FHIR standard is built upon the HL7 FHIR R4.0.1. FHIR is an international standard for exchanging health care record and is being widely adopted across Canada for emerging healthcare standards. For interest, A Canadian registry of FHIR projects may be found HERE

FHIR provides a collection of well-defined interfaces for interoperating between two applications. Transactions are performed directly on the server using an HTTP request/response. The FHIR RESTful APIs are described in full within the base FHIR specification, found HERE.

For processing Pharmacy claims, a "messaging" interface will be used. The Operations are invoked by performing an HTTP POST to the operation's end-point. Each implementer will publish their end-point [base] to their implementation partners. The response will be a standard HTTP response indicating whether this was successful. If successful, an HTTP 200 and message bundle will be returned containing the payload details. An HTTP status code of 4xx or 5xx indicates an error, and an OperationOutcome will include details. This follows the FHIR Messaging Framework



Invoking Operations via Messages

The following Operations will be used for this implementation:

Functionality Operation Definition Response
Submit Claims [base]Claim/$submit
Bundle with Message Header, focus=Claim or ProffClaim or Reversal Request Parameters Bundle, Message Header response, event type=51 or 52, focus= ClaimResponse Profile
Submit Claim Reversal [base]Claim/$reversal
Bundle with Message Header, focus=ReversalParameterIN Profile Bundle, Message Header response, event type=61, focus= ReversalParametersOUT Profile
Request for Daily Totals [base]/$daily-totals Bundle with Message Header, event.type = 30 and focus= profile-parameters-daily-totals-details-IN. Bundle, Message Header response, event type=80, Profile URL, focus= profile-parameters-daily-totals-OUT
Totals by Date
Request for Adjudication Details [base]/$daily-details Bundle with Message Header, event.type = 31, focus= profile-parameters-daily-totals-details-IN Bundle, Message Header response, event type=81, Profile URL, focus= Parameters:Out



To invoke an operation using a message:

The requester sends a message (a bundle with type = message, and a message header resource)

  • The message header has an event.system of urn:ietf:rfc:3986.
  • The event.code is the URL from the operation definition OperationDefinition.url.
  • The MessageHeader.focus refers to a Parameters resource
  • The parameters resource is populated appropriately as specified by the nominated operation definition.
  • The recipient executes the operation as specified, and then:

The receiver sends a message (a bundle with type = message, and a message header resource)

  • The message header has the same event as the original message
  • The MessageHeader contains a response that refers to the original request message, and a code for the outcome, with details if the operation failed
  • The MessageHeader.focus refers to a Parameters resource
  • The parameters resource is populated appropriately as specified for the response by the nominated operation definition
  • If the operation definition specifies a single return, then this is returned as the target of the MesssageHeader.focus directly