Docs navigation

Connect a DICOM sender

When a hospital wants to send imaging data to your platform, their equipment — CT scanner, PACS, workstation — speaks DICOM. Your system speaks HTTPS. Dicomly bridges the two: you manage the connection through the Dicomly console; the hospital configures their equipment with the details you provide.

For an overview of what changes when routing imaging beyond the hospital firewall, read receiving DICOM from a hospital over the internet.

This guide walks through creating an endpoint, saving the one-time certificate bundle, and sharing the connection details with the hospital’s IT team.

Prerequisites

1. Create the endpoint in the console

Create an endpoint with a name, your destination URL, and at least one certificate. One certificate represents one sender identity — typically one device or one site. No API key is needed for this — the console authenticates with your session.

2. Save the certificate bundle

The endpoint page shows certificate_pem and private_key_pem exactly once. Dicomly does not store the private key after this point — if you lose it you must issue a new certificate.

Download the bundle and store it in your secrets manager immediately.

3. Send yourself a test image

Before handing anything to the hospital, prove the endpoint works. The endpoint page shows a storescu command (and a Docker fallback) pre-filled with your connection details, plus a synthetic sample DICOM file — no real patient data involved. See the quickstart for the exact command shape.

4. Hand the connection details to the hospital

The hospital’s IT or biomedical engineering team configures the DICOM source device. Share these values with them:

Device setting API response field Example value
Host / IP dicom_host relay.dicomly.io
Port dicom_port 11112
Called AE title peer_ae_title DICOMLY
Client certificate certificate_pem PEM block
Client private key private_key_pem PEM block

Most DICOM devices accept a PEM certificate + key file or a PKCS#12 bundle. Once the device is configured and pointed at Dicomly, it opens an mTLS connection and starts sending. Deliveries immediately start arriving at your destination URL.

Want your own hostname instead of relay.dicomly.io? Every account includes one custom domain, free — point dicom.yourdomain.com at Dicomly with a CNAME and verify it in the console, then hand that address to the hospital instead.

Add more senders later

Each sender gets its own certificate. Add one from the endpoint page in the console without recreating the endpoint. Revoke a single sender by deleting its certificate — other senders on the same endpoint keep working.

Automating it? Use the API instead

If you provision endpoints programmatically — from your own onboarding flow, a CI job, or an internal tool — generate an API key from the console’s API keys page and call the API directly:

const DICOMLY_API = 'https://api.dicomly.io/v1';
const apiKey = process.env.DICOMLY_API_KEY!;

const res = await fetch(`${DICOMLY_API}/endpoints`, {
  method: 'POST',
  headers: {
    Authorization: `******
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    name: 'MGH Radiology',
    destination_url: 'https://your-app.io/dicom',
    certificates: [{ label: 'CT scanner' }],
  }),
});

const endpoint = await res.json();
const { certificate_pem, private_key_pem } = endpoint.certificates[0];

// Store in your secrets manager immediately — never log these values
await secretsManager.put(`dicomly/cert/${endpoint.id}`, {
  certificate_pem,
  private_key_pem,
});

Add a certificate to an existing endpoint the same way:

const res = await fetch(
  `${DICOMLY_API}/endpoints/${endpoint.id}/certificates`,
  {
    method: 'POST',
    headers: {
      Authorization: `******
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({ label: 'PACS server' }),
  },
);

Next

Set up the HTTPS endpoint that receives the deliveries → Receive DICOM deliveries