GP Connect Update Record is the standards-based route for sending structured clinical updates from community pharmacy systems into a patient's registered GP practice, replacing scanned letters and ad-hoc emails with a machine-readable payload the GP system can triage, review, and file as part of its normal workflow. The scope is deliberately narrow: consultation summaries from services such as Pharmacy First, blood pressure checks, and the Pharmacy Contraception Service. That narrowness is a design choice, not a limitation. It keeps the clinical content tight enough for GP systems to map incoming data cleanly to their own internal model, rather than receiving a general-purpose document that has to be interpreted case by case.
Why this is a message, not an API call
Update Record is deliberately asynchronous, and that decision shapes everything built on top of it. Where reading a record benefits from a live call and an immediate answer, writing a clinical update is modelled as a store-and-forward message with formal acknowledgements and an auditable handoff between two organisations. A pharmacy system does not expect an instant confirmation that the update has been filed. It expects a structured message to arrive, be validated, be matched to the correct patient, and eventually be reviewed by a clinician, with each of those stages producing its own evidence.
Identity checking, role-based authorisation, and clinical risk management sit with the sending system and its supplier organisation, not with the transport itself. A receiving GP system expects the sender to have already verified the user, the patient, and the lawful basis for direct care before the message ever arrives. That partitioning of responsibility keeps the transport layer simple and predictable, at the cost of putting real weight on the sending system getting identity and consent right before anything is sent.
The three layers underneath the capability
The architecture separates payload, envelope, and transport, and each layer solves a distinct problem.
The payload is FHIR STU3, constrained to GP Connect's own data model. A pharmacy system is not inventing its own structure for a blood pressure reading or a dispensed medicine, it is populating the same profiles that GP systems already expose through Access Record Structured, which minimises bespoke mapping on the receiving end and keeps the payload consistent with the rest of the GP Connect ecosystem.
The envelope is ITK3 Messaging Distribution, which provides the MessageHeader and the concept of two distinct acknowledgements. An infrastructure acknowledgement confirms the message was structurally valid and reached the GP system's message processor. A business acknowledgement confirms workflow-level checks, most importantly that the patient could be matched to the practice's registered list. Treating these as two separate signals, rather than a single success or failure, is what makes reliable retry logic possible, since a structurally valid message that fails to match a patient needs a different response than a message that was malformed from the start.
Transport is MESH, the same store-and-forward backbone used elsewhere in NHS messaging. The sending pharmacy system posts the message to an inbox associated with the registered GP practice, and the practice's MESH client collects it for processing. NHS number, date of birth, and surname in the MESH metadata support routing and patient matching, and the workflow identifier GPCONNECT_UPDATE_RECORD identifies Update Record traffic specifically, separate from any other message type moving through the same infrastructure.
The message journey, and where it goes wrong
A straightforward run looks like this. After a pharmacy consultation, the sending system builds a FHIR bundle containing a Composition with the clinical narrative and the relevant coded entries, a MedicationDispense for supplied medicines, an Observation for a blood pressure reading, a Condition for the presenting problem. The bundle is wrapped in the ITK3 envelope, posted to MESH, and collected by the GP's MESH client. The receiving system validates the message structurally, attempts to match the patient, and generates the two acknowledgements in turn. The final step, filing the update into the record, is a deliberate human action rather than an automatic write.
Not every message follows that path. Validation fails when a required field, an NHS number most commonly, is absent or malformed. Patient matching fails when identifiers are inconsistent or the patient has since moved to a different practice. A robust sender tracks both acknowledgement types, reads the OperationOutcome content returned on failure, and implements back-off and correction logic rather than treating every failure as something to retry blindly. That distinction, between a message to fix and resend and a message that needs a human to intervene, is the difference between a pilot integration and one that holds up in production.
What has to be in place before building starts
Connectivity and transport come first, access to HSCN or the public internet for MESH traffic, and either MESH API compliance or access to a supported MESH client. Standards compliance follows, conformance to the specific ITK3 Messaging Distribution version in use and the GP Connect STU3 data model, along with the capability to perform PDS lookups directly or through a compliant intermediary.
Security sits with the sending application, since this is an application-restricted integration with end-user authentication and role-based access control enforced entirely on the sender's side, used strictly for direct care of NHS patients in England. Clinical safety governance runs alongside this, an appointed Clinical Safety Officer responsible for DCB0129 and DCB0160 where applicable, and adherence to the GP Connect Direct Care information governance model. Operational readiness, the ability to monitor MESH queues, process acknowledgements, and manage rejections through to resolution, needs to exist before live traffic starts, not be built reactively once the first rejection arrives.
Onboarding is use case driven. A supplier submits a description of the business problem, how the capability benefits patients and staff, which GP Connect products are involved, and who the end-user organisations are, along with the name of the Clinical Safety Officer and the available clinical risk documentation. Front-loading that clarity reduces churn during assurance later, and it is worth treating as part of the technical plan rather than a separate administrative track.
Modelling the payload with care
The payload is a pair: a narrative Composition for a person to read, and coded, linked entries for a machine to process, and both need genuine attention rather than one being treated as a formality. For a blood pressure check, systolic and diastolic readings are separate Observation.component values within a single Observation, not two unrelated entries, and the narrative should cover context, cuff size where relevant, repeated measures, and any advice given. For a Pharmacy First episode, a Condition represents the assessed problem, with red flags and safety-netting advice made explicit in the narrative rather than implied.
Medication handling deserves particular care. MedicationDispense records what was supplied to the patient. MedicationRequest represents a prescriber's instruction and should only appear where that instruction genuinely exists in the pharmacy-led model, not included by default. Keeping this distinction precise and avoiding free text that duplicates a structured field while adding ambiguity, is what keeps the record trustworthy for the clinician who eventually reviews it.
Timestamps should reflect when a measurement was taken, not when the message was constructed, since GP systems display data chronologically and a mismatched timestamp quietly breaks that timeline for a clinician trying to reconstruct events.
Idempotency, resubmission, and filing as a human step
Because MESH is store-and-forward, a network or endpoint issue can tempt a team into simply resending a message. Without a deterministic identifier at the bundle level and consistent tracking at the application layer, that instinct creates duplicate review items at the receiving practice rather than resolving the original failure. The ITK3 message identifier and a sender's own business identifiers need to align so the receiver can detect a duplicate rather than treating a retry as a new event.
Filing itself is never automatic. Update Record surfaces the incoming summary as a task or inbox item inside the GP system, where a clinician reviews it, reconciles medicines, and decides how to file it into the record. That design reflects a real clinical boundary: a community pharmacy professional can assess and treat within scope, but the GP record remains the patient's longitudinal home of truth, and a structured message earns its place there through clinician review, not through automatic ingestion.
Testing across four layers
A useful testing strategy treats payload conformance, envelope correctness, transport behaviour, and workflow outcomes as four separate concerns rather than one end-to-end check. Payload conformance means automated validation against the Update Record profiles, with a library of exemplars for each supported service. Envelope correctness means unit tests confirming a valid ITK3 MessageHeader and the presence of required acknowledgement flags. Transport behaviour means simulating MESH send and collect cycles with deliberate delays and failures to prove the retry and back-off logic behaves as designed rather than assumed. Workflow outcomes mean confirming that a complete run, happy path and expected rejections alike, produces a clear, actionable result in the receiving system's own interface, not just a technically valid message sitting unprocessed.
Legacy ERP integration on Azure
Update Record asks for exactly the same shape of engineering we delivered for a UK healthcare services provider integrating a legacy ERP on Microsoft Azure: validation and matching microservices that normalised incoming data, applied configurable matching rules, and generated reconciliation outcomes with clear reason codes, paired with an idempotent write-back service using an outbox pattern to prevent partial or duplicate updates. That is the same pairing Update Record requires, structured validation and patient matching on the way in, and a write-back path that cannot create a duplicate record no matter how many times a message is retried.
Read the full case studyIf your team is building the sender or receiver side of an Update Record integration, or any structured write-back into an NHS system that has to survive real-world retries and failed matches, that is engineering work we take on end to end.
Get in touch