Skip to content

Code Samples — Connect from Any Language

These samples show how to open a TLS connection to Synura and send an MLLP-framed HL7 message directly — no integration engine, no HTTP, just a raw TLS socket.

Each sample connects to {subdomain}.synura.io:443, sends a single ADT^A01 message, reads the ACK, and disconnects.


MLLP wraps each HL7 message in control characters:

ByteHexNamePosition
VT0x0BStart blockBefore the message
FS0x1CEnd blockAfter the message
CR0x0DCarriage returnAfter the end block

The wire format is: <0x0B> + HL7 message + <0x1C><0x0D>


All samples below use this ADT^A01 message. Replace the facility and patient identifiers with your own when testing.

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

import ssl
import socket
HOST = "{subdomain}.synura.io"
PORT = 443
message = (
"MSH|^~\\&|TESTSYS|TESTFAC|SYNURA|RECV|20260416120000||ADT^A01|TEST001|P|2.5\r"
"EVN|A01|20260416120000\r"
"PID|1||PAT001^^^HOSP||DOE^JANE||19850115|F\r"
"PV1|1|I|WARD1^ROOM1^BED1\r"
)
frame = b"\x0b" + message.encode("ascii") + b"\x1c\x0d"
context = ssl.create_default_context()
with socket.create_connection((HOST, PORT)) as sock:
with context.wrap_socket(sock, server_hostname=HOST) as tls:
tls.sendall(frame)
ack = tls.recv(4096)
print("ACK:", ack.decode("ascii", errors="replace"))

import javax.net.ssl.*;
import java.io.*;
public class SynuraSend {
public static void main(String[] args) throws Exception {
String host = "{subdomain}.synura.io";
int port = 443;
String message =
"MSH|^~\\&|TESTSYS|TESTFAC|SYNURA|RECV|20260416120000||ADT^A01|TEST001|P|2.5\r" +
"EVN|A01|20260416120000\r" +
"PID|1||PAT001^^^HOSP||DOE^JANE||19850115|F\r" +
"PV1|1|I|WARD1^ROOM1^BED1\r";
byte[] frame = ("\u000b" + message + "\u001c\r").getBytes("ASCII");
SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
try (SSLSocket socket = (SSLSocket) factory.createSocket(host, port)) {
socket.startHandshake();
OutputStream out = socket.getOutputStream();
out.write(frame);
out.flush();
InputStream in = socket.getInputStream();
byte[] buf = new byte[4096];
int len = in.read(buf);
System.out.println("ACK: " + new String(buf, 0, len, "ASCII"));
}
}
}

using System.Net.Security;
using System.Net.Sockets;
using System.Text;
string host = "{subdomain}.synura.io";
int port = 443;
string message =
"MSH|^~\\&|TESTSYS|TESTFAC|SYNURA|RECV|20260416120000||ADT^A01|TEST001|P|2.5\r" +
"EVN|A01|20260416120000\r" +
"PID|1||PAT001^^^HOSP||DOE^JANE||19850115|F\r" +
"PV1|1|I|WARD1^ROOM1^BED1\r";
byte[] frame = Encoding.ASCII.GetBytes("\x0b" + message + "\x1c\r");
using var client = new TcpClient(host, port);
using var ssl = new SslStream(client.GetStream());
await ssl.AuthenticateAsClientAsync(host);
await ssl.WriteAsync(frame);
await ssl.FlushAsync();
byte[] buf = new byte[4096];
int len = await ssl.ReadAsync(buf);
Console.WriteLine("ACK: " + Encoding.ASCII.GetString(buf, 0, len));

const tls = require("tls");
const HOST = "{subdomain}.synura.io";
const PORT = 443;
const message =
"MSH|^~\\&|TESTSYS|TESTFAC|SYNURA|RECV|20260416120000||ADT^A01|TEST001|P|2.5\r" +
"EVN|A01|20260416120000\r" +
"PID|1||PAT001^^^HOSP||DOE^JANE||19850115|F\r" +
"PV1|1|I|WARD1^ROOM1^BED1\r";
const frame = Buffer.concat([
Buffer.from([0x0b]),
Buffer.from(message, "ascii"),
Buffer.from([0x1c, 0x0d]),
]);
const socket = tls.connect(PORT, HOST, () => {
socket.write(frame);
});
socket.on("data", (data) => {
console.log("ACK:", data.toString("ascii"));
socket.end();
});
socket.on("error", (err) => {
console.error("Connection error:", err.message);
});

package main
import (
"crypto/tls"
"fmt"
"log"
)
func main() {
host := "{subdomain}.synura.io"
addr := host + ":443"
message := "MSH|^~\\&|TESTSYS|TESTFAC|SYNURA|RECV|20260416120000||ADT^A01|TEST001|P|2.5\r" +
"EVN|A01|20260416120000\r" +
"PID|1||PAT001^^^HOSP||DOE^JANE||19850115|F\r" +
"PV1|1|I|WARD1^ROOM1^BED1\r"
frame := "\x0b" + message + "\x1c\r"
conn, err := tls.Dial("tcp", addr, &tls.Config{ServerName: host})
if err != nil {
log.Fatal("Connect failed:", err)
}
defer conn.Close()
_, err = conn.Write([]byte(frame))
if err != nil {
log.Fatal("Send failed:", err)
}
buf := make([]byte, 4096)
n, err := conn.Read(buf)
if err != nil {
log.Fatal("Read failed:", err)
}
fmt.Println("ACK:", string(buf[:n]))
}