Skip to content

HTTPS REST API — Submit HL7 Messages via HTTP

Synura accepts HL7 v2 messages over HTTPS via a single REST endpoint. No socket programming, no MLLP framing — just an HTTP POST with the raw message in the body.


POST https://{subdomain}.synura.io/hl7

Replace {subdomain} with the value assigned to your organisation (e.g. acmelab).


HeaderRequiredValue
X-Synura-Api-KeyYesYour API key from the Synura dashboard
Content-TypeYesapplication/hl7-v2 or text/plain
X-Synura-TenantNoYour subdomain — only needed if you are not using subdomain routing (e.g. posting to a shared gateway)

The body is a raw HL7 v2 message. No JSON wrapping, no Base64 encoding — just the pipe-delimited HL7 text.

MSH|^~\&|SENDER|FACILITY|SYNURA|RECV|20260416120000||ADT^A01|MSG001|P|2.5
EVN|A01|20260416120000
PID|1||PAT001^^^HOSP||DOE^JANE||19850115|F
PV1|1|I|WARD1^ROOM1^BED1

Success (200): The response body contains an HL7 ACK message.

MSH|^~\&|SYNURA|RECV|SENDER|FACILITY|20260416120001||ACK^A01|ACK001|P|2.5
MSA|AA|MSG001

Errors:

All non-2xx responses (except 502) return a JSON body with a single error field:

{
"error": "descriptive error message"
}
StatusMeaningExample error value
400Missing tenant — neither subdomain routing nor X-Synura-Tenant header identified a tenanttenant not identified — use tenant subdomain or X-Synura-Tenant header
400Empty body — no HL7 message was provided in the request bodyrequest body is empty — expected an HL7 v2 message
400Malformed MSH — the HL7 message could not be parsed (invalid or missing MSH segment)malformed HL7 message: {detail}
400Routing failure — the receiving facility in MSH-6 does not match any configured org link for this tenantrouting failed: {detail}
401Missing API key — X-Synura-Api-Key header not providedmissing API key — set X-Synura-Api-Key header
403Invalid API key — the key does not match any active key for this tenantinvalid API key
404Unknown tenant — the subdomain does not match any configured endpointunknown tenant: {subdomain}
415Wrong content type — use application/hl7-v2 or text/plainContent-Type must be application/hl7-v2 or text/plain
502Delivery failed — the message was accepted but could not be delivered downstream. Note: the 502 response returns an HL7 NACK (not JSON).(HL7 ACK with AE or AR status)

Terminal window
curl -X POST https://acmelab.synura.io/hl7 \
-H "X-Synura-Api-Key: your-api-key-here" \
-H "Content-Type: application/hl7-v2" \
-d 'MSH|^~\&|SENDER|FACILITY|SYNURA|RECV|20260416120000||ADT^A01|MSG001|P|2.5
EVN|A01|20260416120000
PID|1||PAT001^^^HOSP||DOE^JANE||19850115|F
PV1|1|I|WARD1^ROOM1^BED1'

There are no per-request rate limits. If you are planning to send high volumes (more than 1,000 messages per minute), contact support@synura.io so we can ensure your endpoint is provisioned appropriately.


Use HTTPS when…Use Synura Connect when…
You don’t have an integration engineYou already run Mirth, Rhapsody, Iguana, etc.
You’re building a custom applicationYou need persistent connections for high throughput
You want the simplest possible integrationYour engine natively supports MLLP over TLS
You’re prototyping or testingYou’re in production with an established HL7 pipeline

Both methods deliver messages to the same downstream destination. Choose whichever fits your stack.


Contact support@synura.io with your subdomain and any error responses you’re receiving.