Platform
onepot API
Search make-on-demand molecules, run feasibility scoring, design analogs, and place synthesis orders from your own pipeline — all available from a convenient Python client.
Similarity & substructure
Tanimoto similarity and SMILES/SMARTS substructure searching over the full onepot CORE compound space.
Retrosynthesis decomposition
Optional retrosynthetic decomposition with building-block filters, price thresholds, and synthesis risk caps.
Streaming progress
Server-sent events stream real-time progress and results as the search runs.
Order in one call
Send selected compounds back through the same client to get a synthesis quote.
Install
A small Python client wraps the REST API. Requires Python 3.11 or later.
pip install onepot
# or, with uv
uv add onepotQuickstart
Similarity search returns ranked analogs with similarity scores and instant prices.
from onepot import Client
client = Client(api_key="your-api-key")
resp = client.search(
smiles_list=["c1ccc(NC(=O)c2ccccc2)cc1"],
max_results=10,
)
for r in resp["queries"][0]["results"]:
print(r["smiles"], r["similarity"], r["price_usd"])Stream results
For long-running queries, stream progress events and results as they arrive.
from onepot import Client
client = Client(api_key="your-api-key")
# Live progress events as the search runs
for event in client.search_stream(
smiles="c1ccc(NC(=O)c2ccccc2)cc1",
max_results=50,
):
if event["type"] == "progress":
print(event["stage"], event["pct"])
elif event["type"] == "result":
r = event["compound"]
print(r["smiles"], r["similarity"])Retrosynthesis + filters
Decompose a target and filter the resulting hits by price, building-block availability, and route risk.
from onepot import Client
client = Client(api_key="your-api-key")
# Retrosynthetic decomposition + building-block filters
resp = client.search(
smiles_list=["O=C(Nc1ccc(F)cc1)c1cccnc1"],
decompose=True,
max_results=25,
max_price_usd=200,
max_risk=0.3,
)
for r in resp["queries"][0]["results"]:
print(r["smiles"], "from", len(r["building_blocks"]), "BBs")Place an order
Pass a list of SMILES back through the same client to get a synthesis quote and a tracked order id.
from onepot import Client
client = Client(api_key="your-api-key")
# Submit selected compounds for synthesis quoting
order = client.order(
smiles_list=[
"Cc1ccc2c(C(=O)Nc3ncc(F)c(Cl)c3F)cc(-c3cccnc3)nc2c1C",
"Fc1cc(CNc2ccnc(Oc3ccccc3)c2)c(F)cc1Br",
],
email="you@example.com",
)
print(order["id"], order["status"])