CellsWave · MolDyn

MolDyn Documentation

Wave-resonance virtual screening for protease targets. 2.6M ChEMBL compounds, ~17 ms per query on a single GPU.

Getting Started

MolDyn is self-hosted: you run the Docker image on a Linux host with an NVIDIA GPU. No data leaves your infrastructure. Three commands after you have your trial key:

curl -O https://cellswave.com/install.sh
chmod +x install.sh
bash install.sh

The installer checks GPU + driver, pulls the Docker image, downloads the cached wave library, and starts the API on https://localhost:8443.

First API call

The health check requires no key and confirms the service is reachable:

curl -k https://localhost:8443/v1/health

Expected response:

{
  "status": "ok",
  "library_size": 2609637,
  "encoder_version": "magnitude_v1",
  "api_version": "1.0.0"
}

Screen a molecule

curl -k -X POST https://localhost:8443/v1/screen \
  -H "X-API-Key: $MOLDYN_KEY" \
  -H "Content-Type: application/json" \
  -d '{"smiles": "CC(=O)Oc1ccccc1C(=O)O", "top_k": 10}'

Dock against a protein pocket

curl -k -X POST https://localhost:8443/v1/dock \
  -H "X-API-Key: $MOLDYN_KEY" \
  -H "Content-Type: application/json" \
  -d '{"pdb_id": "6LU7", "top_k": 100}'

Requirements

ComponentMinimum
GPUNVIDIA with 8 GB VRAM (tested on RTX 3070 Laptop)
DriverNVIDIA driver ≥ 535
OSLinux with Docker + NVIDIA Container Toolkit
RAM16 GB host memory
Disk~10 GB for library + image
NetworkOne-time download of the ~5 GB wave cache

API Reference

Base URL: https://localhost:8443/v1 (self-hosted). Auth: X-API-Key header on every request except /health and /proteins.

MethodPathAuthDescription
GET/v1/healthService, GPU, library readiness
GET/v1/proteinsList cached PDB IDs
POST/v1/screenyesRank library by SMILES similarity
POST/v1/dockyesRank library against a binding pocket

POST /v1/screen

FieldTypeRequiredNotes
smilesstringyesQuery ligand as SMILES
top_kintegerno (10)Number of hits. Capped by plan.
methodstringno ("gre")One of gre, boosted, hybrid, pharmacophore

POST /v1/dock

FieldTypeRequiredNotes
pdb_idstringyes4-character PDB code. Auto-downloaded if not cached.
top_kintegerno (100)Number of hits. Capped by plan.
methodstringno ("boosted")Same options as /screen

Plans

PlanRequests / monthtop_k max
Free10010
Starter1,00050
Pro10,000100
Enterpriseunlimited500

Exceeding the request cap returns HTTP 429. Exceeding the top_k cap returns HTTP 422.

Error Codes

Every error has the same shape: {"error": "<slug>", "message": "<human>"}.

HTTPSlugCondition
400invalid_smilesSMILES parse / conformer generation failed
400invalid_inputMalformed / unresolvable PDB ID
401invalid_api_keyMissing or unknown X-API-Key
422invalid_inputtop_k out of range for plan
429rate_limitMonthly request limit reached
500server_errorUnhandled internal error
503service_unavailableLibrary cache / encoder version mismatch

Examples

Python

import os, requests

headers = {"X-API-Key": os.environ["MOLDYN_KEY"]}

r = requests.post(
    "https://localhost:8443/v1/screen",
    json={"smiles": "CC(=O)Oc1ccccc1C(=O)O", "top_k": 10},
    headers=headers,
    verify=False,  # self-signed cert for local install
)
for hit in r.json()["results"]:
    print(hit["rank"], hit["chembl_id"], hit["score"])

JavaScript

const r = await fetch("https://localhost:8443/v1/screen", {
  method: "POST",
  headers: {
    "X-API-Key": process.env.MOLDYN_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ smiles: "CC(=O)Oc1ccccc1C(=O)O", top_k: 10 }),
});
const data = await r.json();
Coverage envelope. MolDyn v1.0 is validated for aspartic, serine, cysteine, and viral proteases (AUROC 0.74–0.78 on DUD-E). It is not recommended for kinase targets in v1 (AUROC ≈ 0.42–0.53). Request the benchmark report for full methodology and per-target numbers.

Support

Email hello@cellswave.com for: