How do I submit a prediction?
Choose a protein input mode: paste an amino acid sequence, provide a PDB ID or upload a structure file for automatic pocket discovery, or upload a prepared pocket file. Then enter a compound SMILES string and submit.
What protein input modes are supported?
Three modes: Sequence — paste a single-letter amino acid sequence. Structure — provide a PDB ID or upload a PDB file; the site will automatically discover the best binding pocket. Pocket — upload a pre-prepared pocket structure file directly.
How do I view results?
Open the Jobs page to see your submitted and completed predictions. Click any job to view the predicted binding affinity (pKd and Kd) along with job metadata.
What model is used for prediction?
For sequence input, YueL uses a deep learning model trained on compound-protein binding data. For structure and pocket input, the Yuel3 dual-encoder scores the compound against the pocket and reports the predicted pK directly; this is the same model the versioned API at /api/v1/yuel serves.
Why did my job fail?
Common causes include an invalid PDB ID, an unreadable structure file, an invalid SMILES string, or the automatic pocket selection step failing to identify a pocket from the supplied protein structure.
How long does a prediction take?
Sequence predictions typically complete within seconds. Structure and pocket predictions may take longer depending on pocket discovery and model loading.
Is a public API available?
Yes. The versioned API is available at /api/v1/yuel and does not require an API key. Protein input can be a PDB ID, a complete structure, or a prepared pocket; ligand input can be SMILES, SDF, MOL, or MOL2.
How does the API handle a complete protein?
The API accepts a complete protein structure and automatically selects one candidate binding site in the background. All chains in each MODEL are kept together, and multi-model structures are evaluated model by model. The selected pocket can be downloaded as a PDB artifact after the prediction finishes. The implementation used for site selection is an internal service detail and is not part of the public API contract.
Public API
Protein and ligand input formats
No account or API key is required. For a short request, use a PDB ID and SMILES. For advanced workflows, submit a complete protein structure or pocket structure and a ligand as SMILES, SDF, MOL, or MOL2. Jobs run asynchronously after automatic binding-site detection when a complete protein is supplied. Complete proteins retain all chains within each MODEL; the selected model pocket is extracted with a fixed 12 Å neighborhood. Prepared pockets are cleaned to protein ATOM records before scoring.
1. Submit a job
curl -X POST https://yuel.dokhlab.org/api/v1/yuel/jobs \
-H 'Content-Type: application/json' \
-d '{"pdb_id":"1ABC","smiles":"CCO"}'The response contains job_id, status_url, and results_url. Save the job ID because it is the anonymous access token for that job.
2. Poll for results
import time
import requests
api = "https://yuel.dokhlab.org/api"
job = requests.post(
f"{api}/v1/yuel/jobs",
json={"pdb_id": "1ABC", "smiles": "CCO"},
).json()
while True:
result = requests.get(f"https://yuel.dokhlab.org{job['results_url']}")
if result.status_code == 200:
print(result.json()["data"])
break
time.sleep(5)Public results contain the prediction values and the selected-pocket download link. Internal pocket-discovery parameters are not part of the API response contract.
3. Advanced JSON input
Use target.type="protein" with target.pdb_id or complete target.pdb text. Use target.type="pocket" for a prepared pocket, which may contain multiple chains. A ligand object accepts smiles or format plus data.
{
"target": {
"type": "protein",
"pdb": "...complete PDB text..."
},
"ligand": {
"format": "sdf",
"data": "...one-molecule SDF text..."
}
}4. Multipart file input
Use proteinFile for a complete protein, pocketFile for a prepared pocket, and ligandFile for SDF, MOL, or MOL2. The ligand format can be supplied explicitly or inferred from the filename. Structure ligands are standardized once and then passed to the model without a SMILES round-trip.
curl -X POST https://yuel.dokhlab.org/api/v1/yuel/jobs \
-F targetType=protein \
-F [email protected] \
-F [email protected] \
-F ligandFormat=sdfLimits: anonymous callers are rate-limited by IP. A busy or over-limit request returns HTTP 429 with a Retry-After header.
Privacy: anyone who obtains a job ID can read that job's result. Do not submit confidential compounds if the job ID must remain private.
Machine-readable specification: /api/v1/yuel/openapi.json