Inside your own walls, HL7 interfaces are a solved problem. An engine like Mirth Connect or OIE speaks MLLP, the message types are well understood, and standing up a channel between two systems on the same network is a day of work.
Then the interface needs to cross the property line: results to a referring group, ADT to a partner facility, orders from a clinic on somebody else’s network. The channel logic is the same. Everything around it changes, and a one-day interface becomes a six-week project with a kickoff call.
This post is about the gap between those two numbers.
Where the time goes
The delay is almost never HL7. It is everything wrapped around it.
- Two security reviews. Each organization’s security team has to approve a new network path to an outside party. Neither review starts until the other side has produced its paperwork.
- Two IT queues. The VPN config or firewall exception is a change request in both organizations, each with its own backlog, change windows, and approvers. These serialize more often than they parallelize.
- Address planning. Both networks use private address space, and two hospitals with overlapping 10.0.0.0/8 ranges is common. NAT rules appear, and documentation of the NAT rules usually does not.
- Coordinated testing. Two interface teams that share neither a calendar nor a ticketing system have to find a window together, which adds days to every iteration.
Every one of these is a coordination cost, paid in wall-clock time. And they recur: certificate renewal, an IP change on either side, a firewall audit that flags the rule nobody remembers the reason for.
The four patterns
Site-to-site VPN. The default answer. An IPsec tunnel joins the networks, and MLLP flows as if local. It works, and it carries the highest coordination cost: everything in the list above, plus a permanent piece of shared network infrastructure that both sides maintain. The tunnel also grants network-level reachability far beyond the one interface, which each security team then constrains with more rules. The per-partner economics are the real problem. Every new trading partner is a new tunnel, so ten partners means ten of everything.
SFTP batch drops. One side runs an SFTP server, and the other pushes or polls files of batched messages. Simple to approve and well understood by security teams. It is also the reason “why is the results feed 20 minutes behind” is a recurring ticket. Real-time semantics are gone: no MLLP ACKs, so delivery confirmation becomes file-level bookkeeping, and failures surface as gaps someone notices later. Adequate for a nightly census. Wrong for anything a clinician is waiting on.
TLS-wrapped MLLP. Expose an MLLP listener wrapped in TLS, exchange certificates, allowlist the partner’s IPs. Lighter than a VPN, real-time, and cryptographically sound when both sides manage certificates well. In practice it inherits the firewall-exception paperwork, adds certificate lifecycle management across two organizations, and pins both sides to static addressing. It is also still a listening service on the internet, guarded by an allowlist that loosens over time.
The HIE. Where both organizations already participate in a health information exchange that carries the data type in question, the connectivity problem is delegated. When it fits, use it. The constraint is fit: point-to-point operational feeds (a specific results interface to a specific partner, with specific mapping) are often outside what the exchange carries, and onboarding a new use case through an intermediary has its own timeline.
All four share one weakness. The authorization lives in documents (BAAs, DUAs, change tickets) while the enforcement lives in network config, and the two drift. The firewall rule outlives the agreement. The agreement’s scope is invisible in the tunnel. Ask “what exactly are we sharing with this partner today?” and at most organizations the answer takes a week to assemble.
Making the agreement the interface
The structural fix is to make the governed relationship, rather than the network path, the thing you build. This is OpenShare’s model, and it changes the order of operations.
- Find the partner in the directory and send a contact request. Accepting it creates an agreement, the standing relationship between the two organizations.
- Grant access to a channel. The receiving organization publishes the listener that will take the partner’s messages and grants that channel to that partner. The grant is the scope: this channel, this partner, revocable at any time. Sending to a partner works the same way in reverse: they publish the listener and grant it to you.
- The connection provisions itself. When the grant is approved, a secure connection is established between the two engines. In the app, the connect wizard walks both sides through the sequence and shows live status until the link is up.
The transport underneath resolves the network problem the same way outbound-only remote access does. Each engine’s plugin dials outward, so no inbound firewall change, VPN, or static IP is needed on either side. The messages travel end-to-end encrypted directly between the two organizations. The platform coordinates the introduction and the agreement but cannot read the traffic. Your engine keeps speaking ordinary HL7 to its local systems, and the cross-organization leg is one more channel.


What this does to the six weeks: the security-review conversation changes from “we are opening a network path to an outside organization” to “our engine makes an outbound connection, and this named channel is shared with this named partner under a revocable grant”. The two IT queues are not consulted, because nothing on either firewall changes. Coordinated testing still involves two teams, but they are looking at the same live connection status in the same interface, which removes the “is it us or them” round-trips. The channel build is unchanged, because that part was never the problem.
The governance question also gets a screen instead of an archive. The agreement lists its grants, and each grant names the channel and the partner. Revoking a grant tears the connection down. Either organization can also cut data movement across the board in one action. The authorization and the enforcement are the same object, so they cannot drift.
What stays true
Some scope, because interface engineers can tell when a product post is overclaiming:
- The mapping work is still yours. The partner’s Z-segments, their ADT event quirks, the field they populate differently: that is interface engineering, and no connectivity layer removes it. (Our HL7 integration services team does this for a living if you want the help.)
- Both sides participate. The receiving organization accepts the agreement and runs an engine with the plugin. A free account and one server is enough to receive, and the installer version ships OIE with the plugin included.
- Batch still has its place. A nightly flat-file drop that works and satisfies everyone does not need replacing for its own sake. The case for a direct connection is real-time feeds, new partners, and everywhere the VPN paperwork is the bottleneck.
A test case
Pick the next partner interface on your roadmap, the one currently waiting on a kickoff call, and price the two paths: weeks of network coordination against an afternoon of agreement, grant, and channel work. Create a free account, or start with the product tour. For the messaging layer itself, our guides on HL7 message types and HL7 vs FHIR cover the content going through the pipe. If the data crossing organizations is imaging rather than messages, the DICOM version of this problem has its own post.