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 framing
Section titled “MLLP framing”MLLP wraps each HL7 message in control characters:
| Byte | Hex | Name | Position |
|---|---|---|---|
VT | 0x0B | Start block | Before the message |
FS | 0x1C | End block | After the message |
CR | 0x0D | Carriage return | After the end block |
The wire format is: <0x0B> + HL7 message + <0x1C><0x0D>
Test message
Section titled “Test message”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.5EVN|A01|20260416120000PID|1||PAT001^^^HOSP||DOE^JANE||19850115|FPV1|1|I|WARD1^ROOM1^BED1Python
Section titled “Python”import sslimport 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")); } }}C# (.NET)
Section titled “C# (.NET)”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));Node.js
Section titled “Node.js”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]))}Next steps
Section titled “Next steps”- HTTPS API if you’d prefer to send messages over HTTP instead of raw sockets
- TLS Troubleshooting if your connection fails during the TLS handshake
- Connecting to Synura for an overview of all connection methods