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.
Endpoint
Section titled “Endpoint”POST https://{subdomain}.synura.io/hl7Replace {subdomain} with the value assigned to your organisation (e.g. acmelab).
Headers
Section titled “Headers”| Header | Required | Value |
|---|---|---|
X-Synura-Api-Key | Yes | Your API key from the Synura dashboard |
Content-Type | Yes | application/hl7-v2 or text/plain |
X-Synura-Tenant | No | Your subdomain — only needed if you are not using subdomain routing (e.g. posting to a shared gateway) |
Request body
Section titled “Request body”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.5EVN|A01|20260416120000PID|1||PAT001^^^HOSP||DOE^JANE||19850115|FPV1|1|I|WARD1^ROOM1^BED1Response
Section titled “Response”Success (200): The response body contains an HL7 ACK message.
MSH|^~\&|SYNURA|RECV|SENDER|FACILITY|20260416120001||ACK^A01|ACK001|P|2.5MSA|AA|MSG001Errors:
All non-2xx responses (except 502) return a JSON body with a single error field:
{ "error": "descriptive error message"}| Status | Meaning | Example error value |
|---|---|---|
400 | Missing tenant — neither subdomain routing nor X-Synura-Tenant header identified a tenant | tenant not identified — use tenant subdomain or X-Synura-Tenant header |
400 | Empty body — no HL7 message was provided in the request body | request body is empty — expected an HL7 v2 message |
400 | Malformed MSH — the HL7 message could not be parsed (invalid or missing MSH segment) | malformed HL7 message: {detail} |
400 | Routing failure — the receiving facility in MSH-6 does not match any configured org link for this tenant | routing failed: {detail} |
401 | Missing API key — X-Synura-Api-Key header not provided | missing API key — set X-Synura-Api-Key header |
403 | Invalid API key — the key does not match any active key for this tenant | invalid API key |
404 | Unknown tenant — the subdomain does not match any configured endpoint | unknown tenant: {subdomain} |
415 | Wrong content type — use application/hl7-v2 or text/plain | Content-Type must be application/hl7-v2 or text/plain |
502 | Delivery 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) |
curl example
Section titled “curl example”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.5EVN|A01|20260416120000PID|1||PAT001^^^HOSP||DOE^JANE||19850115|FPV1|1|I|WARD1^ROOM1^BED1'Rate limits
Section titled “Rate limits”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.
When to use HTTPS vs Synura Connect
Section titled “When to use HTTPS vs Synura Connect”| Use HTTPS when… | Use Synura Connect when… |
|---|---|
| You don’t have an integration engine | You already run Mirth, Rhapsody, Iguana, etc. |
| You’re building a custom application | You need persistent connections for high throughput |
| You want the simplest possible integration | Your engine natively supports MLLP over TLS |
| You’re prototyping or testing | You’re in production with an established HL7 pipeline |
Both methods deliver messages to the same downstream destination. Choose whichever fits your stack.
Support
Section titled “Support”Contact support@synura.io with your subdomain and any error responses you’re receiving.