Hosted API
https://protacbuilder.com
BASE_URL = "https://protacbuilder.com"
Run PROTAC Builder workflows from your own scripts, notebooks, servers, or applications. Generate PROTAC-like structures, convert molecular formats, calculate RDKit descriptors, run DeepPK reports, and retrieve downloadable result files through simple HTTP requests.
Choose the hosted domain for public integrations and the local address only for development.
https://protacbuilder.com
BASE_URL = "https://protacbuilder.com"
http://127.0.0.1:5069
BASE_URL = "http://127.0.0.1:5069"
curl -X POST http://127.0.0.1:5069/api/admet/run \
-H "Content-Type: application/json" \
-d '{"smiles":"CCO"}'
Typical order for script-driven molecular parameter workflows.
Ready-to-run examples for notebooks, scripts, and backend jobs.
import requests
BASE_URL = "https://protacbuilder.com"
response = requests.post(
f"{BASE_URL}/api/admet/run",
json={"smiles": "CCO"},
timeout=60,
)
response.raise_for_status()
data = response.json()
print(data["descriptors"])
import requests
BASE_URL = "https://protacbuilder.com"
response = requests.post(
f"{BASE_URL}/api/deeppk/run",
json={"smiles": "CCO"},
timeout=300,
)
data = response.json()
if data.get("success"):
print("DeepPK report ready")
print(data.get("links") or data.get("deeppk"))
else:
print("DeepPK failed")
print(data.get("stage"))
print(data.get("details"))
import requests
from pathlib import Path
BASE_URL = "https://protacbuilder.com"
links = data.get("links", {})
for label, url in links.items():
file_response = requests.get(f"{BASE_URL}{url}", timeout=120)
file_response.raise_for_status()
Path(f"{label}_output").write_bytes(file_response.content)
import requests
BASE_URL = "https://protacbuilder.com"
response = requests.post(
f"{BASE_URL}/api/molecule/smiles-to-mol",
json={"smiles": "CCO"},
timeout=60,
)
response.raise_for_status()
print(response.json())
Practical client workflows built around the live API.
import requests
BASE_URL = "https://protacbuilder.com"
smiles = "CCO"
rdkit = requests.post(
f"{BASE_URL}/api/admet/run",
json={"smiles": smiles},
timeout=60,
).json()
print("RDKit descriptors:")
print(rdkit.get("descriptors"))
deeppk = requests.post(
f"{BASE_URL}/api/deeppk/run",
json={"smiles": smiles},
timeout=300,
).json()
if deeppk.get("success"):
print("DeepPK files:")
print(deeppk.get("links"))
else:
print("DeepPK did not complete:")
print(deeppk.get("details"))
import requests
BASE_URL = "https://protacbuilder.com"
mol_result = requests.post(
f"{BASE_URL}/api/molecule/smiles-to-mol",
json={"smiles": "CCO"},
timeout=60,
).json()
smiles_result = requests.post(
f"{BASE_URL}/api/molecule/mol-to-smiles",
json={"mol": mol_result["mol"]},
timeout=60,
).json()
print(smiles_result["smiles"])
import requests
BASE_URL = "https://protacbuilder.com"
linkers = requests.get(
f"{BASE_URL}/api/linkers/curated",
params={"page": 1, "sort_by": "Molecular Weight", "sort_order": "asc"},
timeout=60,
).json()
print(linkers[0])
import requests
from pathlib import Path
BASE_URL = "https://protacbuilder.com"
response = requests.get(
f"{BASE_URL}/api/protac/builder/template/linkers",
timeout=120,
)
response.raise_for_status()
Path("api_linkers_template.csv").write_bytes(response.content)
curl -X POST https://protacbuilder.com/api/admet/run \
-H "Content-Type: application/json" \
-d '{"smiles":"CCO"}'
curl -X POST https://protacbuilder.com/api/deeppk/run \
-H "Content-Type: application/json" \
-d '{"smiles":"CCO"}'
Use RDKit for fast descriptors and DeepPK for report files and external prediction output.
Fast local descriptor endpoint for SMILES or MOL input.
{
"smiles": "CCO"
}
{
"success": true,
"descriptors": {
"smiles": "CCO",
"molecular_weight": 46.069,
"exact_molecular_weight": 46.04186,
"logp": -0.001,
"tpsa": 20.23,
"hbd": 1,
"hba": 1,
"qed": 0.4068,
"lipinski_violations": 0
},
"warnings": []
}
Also accepts mol_block or molBlock. The response includes a properties alias and file links for JSON and CSV report exports.
Runs the DeepPK workflow and prepares downloadable report artifacts.
{
"smiles": "CCO"
}
{
"success": true,
"job_id": "20260519_123924_040e4d99",
"links": {
"pdf": "/api/deeppk/download/<job_id>/JARI_PROTAC_Report.pdf",
"csv": "/api/deeppk/download/<job_id>/DeepPK_Predictions.csv",
"cleaned_csv": "/api/deeppk/download/<job_id>/DeepPK_Cleaned_Output.csv",
"json": "/api/deeppk/download/<job_id>/DeepPK_Predictions.json",
"svg": "/api/deeppk/download/<job_id>/Protac.svg"
}
}
{
"success": false,
"error": "DeepPK report generation failed.",
"details": "Safe error message",
"stage": "run_deeppk_display",
"job_id": "20260519_123924_040e4d99",
"rdkit_descriptors": {},
"retryable": true
}
DeepPK responses also include rdkit_descriptors, a deeppk link alias, and warnings. Failures are structured JSON rather than HTML tracebacks.
Downloads a DeepPK file created by a successful report job.
GET /api/deeppk/download/20260519_123924_040e4d99/JARI_PROTAC_Report.pdf
Downloads files generated by the local RDKit descriptor workflow.
GET /api/admet/download/admet_report_20260519_123000.csv
Helpers for moving between SMILES, MOL blocks, and rendered previews.
Convert a SMILES string into a MOL block.
{
"smiles": "CCO"
}
{
"success": true,
"mol": "...",
"mol_block": "..."
}
Convert a MOL block back to SMILES.
{
"mol": "..."
}
{
"success": true,
"smiles": "CCO"
}
The endpoint accepts either mol or molBlock.
Render a SMILES string to an inline preview image.
{
"smiles": "CCO"
}
{
"success": true,
"image": "data:image/png;base64,..."
}
Single-molecule generation plus multipart batch and ZIP workflows.
Generate a PROTAC MOL block from three prepared molecule blocks.
{
"warhead_mol": "...",
"linker_mol": "...",
"ligase_mol": "..."
}
{
"success": true,
"protac_mol_block": "...",
"protac_smiles": "..."
}
This endpoint increments the usage counter only when the build succeeds.
Batch-build PROTAC SMILES from mapped warhead and ligase SMILES plus a linker CSV.
Fields: warhead_smiles ligase_smiles linker_csv smiles_col name_col source (optional)
{
"count": 12,
"failed": 1,
"warnings": [],
"message": "Built 12 PROTAC(s). Skipped 1 row(s).",
"results": [{"name": "LINKER_1_PROTAC", "smiles": "..."}],
"failures": [{"row": 6, "reason": "..."}]
}
Advanced multipart endpoint for command-line style batch execution.
Fields: target ligase library source (optional)
Build PROTAC products from warhead and ligase molecule blocks plus a linker CSV.
Fields: warhead_mol ligase_mol linker_csv
{
"count": 4,
"results": [{"name": "LINKER_1_PROTAC", "smiles": "..."}]
}
Catalog lookups, raw molecule access, and rendered previews for script-driven discovery work.
Fetch curated linker records with paging and sort options.
GET /api/linkers/curated?page=1&sort_by=Molecular%20Weight&sort_order=asc
[
{
"id": 462,
"smiles": "C",
"molecular_weight": 16.043,
"svg": "<svg ...>"
}
]
Return the available ligase names.
["CRBN_EF2", "VHL_3JF", "..."]
Return a ligase preview for the requested name.
GET /api/ligase/render?ligase=VHL_3JF
{
"mol_block": "...",
"image": "data:image/svg+xml;base64,..."
}
Fetch the raw MOL block for a ligase entry.
{
"mol_block": "..."
}
Load recruiter molecule data by recruiter identifier.
{
"name": "VHL_VH032",
"smiles": "...",
"mol_block": "..."
}
Get the stored SMILES for a ligand identifier.
GET /api/ligand/smiles?ligand=DR7
{
"smiles": "..."
}
Get the ligand identifier, SMILES, and MOL block in one response.
GET /api/ligand/data?ligand=DR7
{
"ligand": "DR7",
"smiles": "...",
"mol_block": "..."
}
Small helper routes used by custom editors or notebook-driven curation tasks.
Normalize a ligand SMILES string and return both SMILES and MOL block output.
{
"smiles": "CCO"
}
{
"mol_block": "...",
"smiles": "CCO"
}
Store ligand metadata from an external workflow.
{
"ligand": "DR7",
"smiles": "CCO"
}
{
"message": "Ligand DR7 stored successfully!"
}
Use these endpoints when your client needs mapping, uploads, or linker CSV inspection before generation.
Convert an uploaded structure file or a form SMILES string into a MOL block.
Fields: smiles or structure_file
{
"mol_block": "...",
"smiles": "..."
}
Generate mapped attachment-point SMILES from a MOL block.
{
"molBlock": "..."
}
{
"smiles": "[*:1]CCO",
"warnings": []
}
Inspect a linker CSV and detect useful column names before batch generation.
Fields: linker_csv or file
{
"columns": ["name", "smiles"],
"preview_rows": [{"name": "L1", "smiles": "[*:1]CC[*:2]"}],
"suggested_smiles_col": "smiles",
"suggested_name_col": "name"
}
Health, templates, usage metrics, and advanced job lookups.
Returns the current PROTAC Builder usage summary.
{
"seed_total": 127,
"local_actions": 5,
"total": 132,
"canonical_log_file": "...",
"counting_rule": "successful generated PROTAC builds only"
}
Only successful PROTAC generation increments this counter.
Download the CSV template used by the batch builder workflow.
GET /api/protac/builder/template/linkers
Read the number of recorded template downloads.
{
"downloads": 14
}
Lookup route for Warhead Hunter job artifacts when that workflow is present in the deployment.
Simple health check for monitoring and local startup checks.
{
"ok": true
}
Reference sequence for client-side integrations that mirror the web builder.