API Documentation

Integrate MolForge into your workflow with our REST API

MolForge API documentation — REST endpoints for molecular analysis, ADMET prediction, and drug discovery
New · AI Foundry

Foundation models
for drug discovery.

Deploy MoLFormer-XL, Uni-Mol, and ChemCrow + Llama-3 as a managed pipeline. Fine-tune on your proprietary HTS data with full IP ownership. Pharma-tier pricing with VPC isolation and SOC 2 / HIPAA compliance.

Explore AI Foundry Train Your Model
POST /foundry/admet
MoLFormer-XL · 9 endpoints · 82ms
POST /foundry/dock
Uni-Mol · top-5 poses · ΔG + PLIF
POST /foundry/agent
ChemCrow · de-novo design loop
POST /foundry/jobs
Fine-tune or pre-train on your data

Quick Start

Get up and running with the MolForge API in two simple steps.

1

Get Your API Key

Navigate to your Settings page and generate a new API key. Keys are prefixed with mf_ for easy identification.

2

Make Your First Request

Use the API key in the X-API-Key header to authenticate your requests.

curl
curl -X POST https://api.molforge.ai/v1/molecules/analyze \
  -H "X-API-Key: mf_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{"smiles": "CC(=O)Oc1ccccc1C(=O)O"}'
Response
{
  "molecule_id": "mol_a1b2c3d4e5f6g7h8",
  "smiles": "CC(=O)Oc1ccccc1C(=O)O",
  "name": "Aspirin",
  "properties": {
    "molecular_weight": 180.16,
    "logP": 1.31,
    "hbd": 1,
    "hba": 4,
    "tpsa": 63.60,
    "lipinski_violations": 0
  },
  "admet": {
    "absorption": "High",
    "bbb_permeation": false,
    "cyp_inhibition": false,
    "hepatotoxicity": "Low",
    "ld50": 200
  },
  "credits_used": 1
}

Authentication

All API requests require authentication. Choose the method that fits your workflow.

API Key Header

Pass your API key in the X-API-Key header. Recommended for server-to-server calls.

X-API-Key: mf_your_api_key_here

Bearer Token

Alternatively, use the standard Authorization header with a Bearer prefix.

Authorization: Bearer mf_your_api_key_here

Generate and manage your API keys on the Settings page.

PDF Reports

Generate detailed molecular analysis PDFs from the dashboard. Each report includes 12 sections: executive summary, physicochemical properties, drug-likeness analysis, structural alerts, bioactivity predictions, synthesis feasibility, commercial availability, literature references, and more.

How to use: Analyze any molecule on the Dashboard, then click the PDF Report button.

Limits: Academic — 10/mo | Pro — 100/mo | Team — Unlimited | API — 50 credits/report ($1)

Rate Limits

Tier Requests / min Requests / day
Free
Academic 30 1,000
Pro 60 10,000
Team 120 50,000
Enterprise Custom Custom

API Endpoints

Complete reference for all available endpoints. Click any endpoint to see parameters and examples.

Molecules

ParameterTypeRequiredDescription
smilesstringRequiredSMILES string of the molecule
propertiesarrayOptionalList of properties to compute (default: all)
Request
POST /v1/molecules/analyze
{
  "smiles": "CC(=O)Oc1ccccc1C(=O)O",
  "properties": ["logP", "tpsa", "admet"]
}
ParameterTypeRequiredDescription
smilesstringRequiredQuery SMILES string
thresholdfloatOptionalTanimoto similarity threshold (default: 0.7)
limitintegerOptionalMax results to return (default: 50)
Request
POST /v1/molecules/find-similar
{
  "smiles": "CC(=O)Oc1ccccc1C(=O)O",
  "threshold": 0.8,
  "limit": 20
}
ParameterTypeRequiredDescription
idstring (path)RequiredMolecule ID (e.g. mol_a1b2c3d4e5f6g7h8)
Request
GET /v1/molecules/mol_a1b2c3d4e5f6g7h8
ParameterTypeRequiredDescription
smiles_listarrayRequiredArray of SMILES strings (max 100)
propertiesarrayOptionalProperties to compute
Request
POST /v1/molecules/batch
{
  "smiles_list": [
    "CC(=O)Oc1ccccc1C(=O)O",
    "CC(C)Cc1ccc(cc1)C(C)C(=O)O"
  ]
}

Docking

ParameterTypeRequiredDescription
protein_pdbstringRequiredPDB ID or uploaded protein structure
ligand_smilesstringRequiredSMILES of ligand to dock
centerobjectOptionalBinding site center {x, y, z}
box_sizeobjectOptionalSearch box dimensions {x, y, z}
exhaustivenessintegerOptionalDocking exhaustiveness (default: 8)
Request
POST /v1/docking/run
{
  "protein_pdb": "6LU7",
  "ligand_smiles": "CC(=O)Oc1ccccc1C(=O)O",
  "exhaustiveness": 16
}
ParameterTypeRequiredDescription
job_idstring (path)RequiredDocking job ID returned from submit
Response
{
  "job_id": "dock_x7y8z9",
  "status": "completed",
  "best_score": -8.4,
  "num_poses": 9,
  "runtime_seconds": 42
}
ParameterTypeRequiredDescription
job_idstring (path)RequiredDocking job ID
formatstring (query)OptionalOutput format: pdb, sdf, mol2 (default: pdb)
Request
GET /v1/docking/dock_x7y8z9/poses?format=sdf

QSAR

ParameterTypeRequiredDescription
training_dataarrayRequiredArray of {smiles, activity} objects
model_typestringOptionalrandom_forest, gradient_boost, neural_net
fingerprintstringOptionalFingerprint type: morgan, maccs, rdkit
namestringOptionalModel name for future reference
Request
POST /v1/qsar/train
{
  "training_data": [
    {"smiles": "CCO", "activity": 5.2},
    {"smiles": "CCCO", "activity": 4.8}
  ],
  "model_type": "gradient_boost",
  "fingerprint": "morgan",
  "name": "hERG_model_v1"
}
ParameterTypeRequiredDescription
model_idstringRequiredTrained model ID
smiles_listarrayRequiredSMILES strings to predict
Request
POST /v1/qsar/predict
{
  "model_id": "qsar_m1n2o3",
  "smiles_list": ["c1ccccc1", "CC(=O)O"]
}
ParameterTypeRequiredDescription
pageinteger (query)OptionalPage number (default: 1)
limitinteger (query)OptionalResults per page (default: 20)
Request
GET /v1/qsar/models?page=1&limit=10

Molecular Dynamics

ParameterTypeRequiredDescription
protein_pdbstringRequiredPDB ID or structure data
ligand_smilesstringOptionalSMILES of bound ligand
duration_nsfloatOptionalSimulation duration in nanoseconds (default: 10)
force_fieldstringOptionalamber99sb, charmm36, opls-aa
temperaturefloatOptionalTemperature in Kelvin (default: 300)
Request
POST /v1/dynamics/run
{
  "protein_pdb": "6LU7",
  "ligand_smiles": "CC(=O)Oc1ccccc1C(=O)O",
  "duration_ns": 10,
  "force_field": "amber99sb"
}
ParameterTypeRequiredDescription
job_idstring (path)RequiredMD simulation job ID
Response
{
  "job_id": "md_p1q2r3",
  "status": "running",
  "progress": 0.45,
  "elapsed_seconds": 3420,
  "estimated_remaining": 4180
}
ParameterTypeRequiredDescription
job_idstring (path)RequiredMD simulation job ID
formatstring (query)Optionalxtc, trr, pdb (default: xtc)
framesstring (query)OptionalFrame range, e.g. 0-100
Request
GET /v1/dynamics/md_p1q2r3/trajectory?format=xtc&frames=0-100

RL Training

ParameterTypeRequiredDescription
scaffoldstringOptionalScaffold SMILES to build upon
objectivesobjectRequiredOptimization objectives (e.g. logP range, QED)
num_moleculesintegerOptionalNumber of candidates to generate (default: 100)
diversity_filterfloatOptionalMinimum Tanimoto distance between results (default: 0.3)
Request
POST /v1/rl/train
{
  "scaffold": "c1ccc2[nH]ccc2c1",
  "objectives": {
    "logP": [1.0, 3.0],
    "qed": {"min": 0.6}
  },
  "num_molecules": 100
}
ParameterTypeRequiredDescription
job_idstring (path)RequiredGeneration job ID
Response
{
  "job_id": "gen_s4t5u6",
  "status": "completed",
  "molecules": [
    {"smiles": "c1ccc2c(c1)cc(n2)CCN", "qed": 0.72, "logP": 1.85},
    {"smiles": "c1ccc2c(c1)cc(n2)CCCO", "qed": 0.68, "logP": 2.11}
  ],
  "total_generated": 100
}

FEP

ParameterTypeRequiredDescription
protein_pdbstringRequiredProtein structure (PDB ID or data)
ligand_astringRequiredSMILES of reference ligand
ligand_bstringRequiredSMILES of target ligand
num_lambdaintegerOptionalNumber of lambda windows (default: 12)
Request
POST /v1/fep/run
{
  "protein_pdb": "6LU7",
  "ligand_a": "CC(=O)Oc1ccccc1C(=O)O",
  "ligand_b": "CC(C)Cc1ccc(cc1)C(C)C(=O)O",
  "num_lambda": 16
}
ParameterTypeRequiredDescription
job_idstring (path)RequiredFEP job ID
Response
{
  "job_id": "fep_v7w8x9",
  "status": "completed",
  "ddG": -2.34,
  "ddG_error": 0.42,
  "convergence": "good"
}

Knowledge Graph

ParameterTypeRequiredDescription
querystring (query)OptionalSearch query (name, SMILES, or property filter)
depthinteger (query)OptionalTraversal depth (default: 1, max: 3)
limitinteger (query)OptionalMax results (default: 50)
Request
GET /v1/graph/molecules?query=aspirin&depth=2&limit=25
ParameterTypeRequiredDescription
from_idstringRequiredSource node ID
to_idstringRequiredTarget node ID
typestringRequiredRelationship type (e.g. similar_to, targets)
propertiesobjectOptionalEdge metadata
Request
POST /v1/graph/relationships
{
  "from_id": "mol_a1b2c3d4e5f6g7h8",
  "to_id": "mol_i9j0k1l2m3n4o5p6",
  "type": "similar_to",
  "properties": {"tanimoto": 0.85}
}
ParameterTypeRequiredDescription
formatstring (query)Optionaljson, csv, graphml (default: json)
include_edgesboolean (query)OptionalInclude edges in export (default: true)
Request
GET /v1/graph/export?format=graphml&include_edges=true

Tasks

ParameterTypeRequiredDescription
task_idstring (path)RequiredTask ID from any async operation
Response
{
  "task_id": "task_abc123",
  "type": "docking",
  "status": "completed",
  "created_at": "2026-03-05T10:30:00Z",
  "completed_at": "2026-03-05T10:31:42Z",
  "result_url": "/v1/docking/dock_x7y8z9"
}
ParameterTypeRequiredDescription
statusstring (query)OptionalFilter: pending, running, completed, failed
typestring (query)OptionalFilter by task type
pageinteger (query)OptionalPage number (default: 1)
Request
GET /v1/tasks?status=running&type=docking&page=1
ParameterTypeRequiredDescription
task_idstring (path)RequiredTask ID to cancel
Request
DELETE /v1/tasks/task_abc123
Response
{
  "task_id": "task_abc123",
  "status": "cancelled",
  "message": "Task cancelled successfully"
}

IP Radar (Patent Landscaping)

Searches global patent databases and uses MolForge AI to categorize claims, identify white spaces, and generate an IP landscape report.

ParameterTypeRequiredDescription
querystringRequiredDrug name, CAS number, or SMILES
max_patentsintegerOptionalMax patents to analyze (default: 25, max: 100)
Request
POST /v1/patents/search
Content-Type: application/json
Authorization: Bearer YOUR_TOKEN

{
  "query": "Ticagrelor",
  "max_patents": 50
}
Response
{
  "query": "Ticagrelor",
  "stats": { "total_patents": 23, "by_category": {...} },
  "patents": [{ "patent_id": "US20210123456A1", ... }],
  "white_spaces": [{ "domain": "Polymorphism", ... }],
  "executive_summary": "...",
  "freedom_to_operate_assessment": "..."
}

Credit Costs

Each API operation consumes credits based on computational complexity. Monitor your usage on the dashboard.

Operation Credits Example
Property Lookup 1 Single SMILES → ADMET
Similarity Search 5 Find top-50 similar
Docking Job 50 Single protein-ligand dock
QSAR Training 200 Train custom model
MD Simulation 100/ns 10ns simulation = 1,000 cr
RL Generation 1,000 Generate 100 candidates
FEP Calculation 500 Single FEP run
Graph Query 1 Single graph traversal
IP Radar Scan 25 Patent landscape for one molecule

Code Examples

Get started quickly with examples in your preferred language.

Python
import requests

API_KEY = "mf_your_api_key"
BASE_URL = "https://api.molforge.ai/v1"

# Get molecular properties
response = requests.post(
    f"{BASE_URL}/molecules/analyze",
    headers={"X-API-Key": API_KEY},
    json={"smiles": "CC(=O)Oc1ccccc1C(=O)O"}
)
print(response.json())

# Run a docking job
dock_response = requests.post(
    f"{BASE_URL}/docking/run",
    headers={"X-API-Key": API_KEY},
    json={
        "protein_pdb": "6LU7",
        "ligand_smiles": "CC(=O)Oc1ccccc1C(=O)O"
    }
)
job_id = dock_response.json()["job_id"]

# Poll for results
import time
while True:
    result = requests.get(
        f"{BASE_URL}/docking/{job_id}",
        headers={"X-API-Key": API_KEY}
    ).json()
    if result["status"] == "completed":
        print(f"Best score: {result['best_score']}")
        break
    time.sleep(5)
JavaScript
const API_KEY = 'mf_your_api_key';
const BASE_URL = 'https://api.molforge.ai/v1';

// Get molecular properties
const response = await fetch(`${BASE_URL}/molecules/analyze`, {
  method: 'POST',
  headers: {
    'X-API-Key': API_KEY,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({ smiles: 'CC(=O)Oc1ccccc1C(=O)O' })
});
const data = await response.json();
console.log(data);

// Run docking job
const dockRes = await fetch(`${BASE_URL}/docking/run`, {
  method: 'POST',
  headers: {
    'X-API-Key': API_KEY,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    protein_pdb: '6LU7',
    ligand_smiles: 'CC(=O)Oc1ccccc1C(=O)O'
  })
});
const { job_id } = await dockRes.json();

// Poll for results
const pollResult = async () => {
  while (true) {
    const res = await fetch(`${BASE_URL}/docking/${job_id}`, {
      headers: { 'X-API-Key': API_KEY }
    });
    const result = await res.json();
    if (result.status === 'completed') return result;
    await new Promise(r => setTimeout(r, 5000));
  }
};
const result = await pollResult();
curl
# Get molecular properties
curl -X POST https://api.molforge.ai/v1/molecules/analyze \
  -H "X-API-Key: mf_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{"smiles": "CC(=O)Oc1ccccc1C(=O)O"}'

# Submit a docking job
curl -X POST https://api.molforge.ai/v1/docking/run \
  -H "X-API-Key: mf_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{"protein_pdb": "6LU7", "ligand_smiles": "CC(=O)Oc1ccccc1C(=O)O"}'

# Get docking results
curl https://api.molforge.ai/v1/docking/dock_x7y8z9 \
  -H "X-API-Key: mf_your_api_key"

# List your tasks
curl https://api.molforge.ai/v1/tasks?status=running \
  -H "X-API-Key: mf_your_api_key"

# Cancel a task
curl -X DELETE https://api.molforge.ai/v1/tasks/task_abc123 \
  -H "X-API-Key: mf_your_api_key"

Computational Methodology

MolForge integrates established open-source tools for molecular computations.

Property calculations use RDKit (open-source cheminformatics). Docking uses AutoDock Vina. MD simulations use OpenMM/GROMACS. ADMET predictions use machine learning models trained on public datasets. See individual tool documentation for algorithmic details and references.

Ready to Build with MolForge?

Start integrating molecular intelligence into your applications today.