Skip to main content

Your First Validation

Let's validate your first molecule using ChemAudit. We'll walk through validating Aspirin using both the web interface and the API.

Using the Web Interface

Step 1: Open ChemAudit

Navigate to the web interface:

Step 2: Enter a Molecule

On the Single Validation page, enter this SMILES string for Aspirin:

CC(=O)Oc1ccccc1C(=O)O

ChemAudit auto-detects the input format (SMILES, InChI, or MOL block), so you can paste any supported format.

Step 3: Run Validation

Click the Validate button. Within seconds, you'll see comprehensive results across multiple tabs:

  • Validation: Structural checks and overall score
  • Alerts: Structural alert screening (PAINS, BRENK, etc.)
  • Scoring: ML-readiness, drug-likeness, ADMET, and more
  • Scoring Profiles: Consensus drug-likeness, lead/fragment-likeness, bioavailability radar
  • Standardization: ChEMBL-compatible structure cleanup with provenance
  • Database Lookup: Cross-references to PubChem, ChEMBL, COCONUT

Step 4: Interpret Results

Look for these key indicators:

Validation Score: A number from 0-100 indicating overall structure quality.

Score RangeQualityRecommendation
90-100ExcellentReady for use
70-89GoodMinor issues, review recommended
50-69FairNeeds attention
0-49PoorSignificant issues

Check Results: Each validation check shows pass/fail status with severity:

SeverityMeaning
CriticalMust be fixed - structure is invalid
WarningShould be reviewed - may affect results
InfoInformational - no action required

Using the API

Basic Validation Request

curl -X POST http://localhost:8001/api/v1/validate \
-H "Content-Type: application/json" \
-d '{
"molecule": "CC(=O)Oc1ccccc1C(=O)O",
"format": "auto"
}'

Example Response

{
"status": "completed",
"molecule_info": {
"input_smiles": "CC(=O)Oc1ccccc1C(=O)O",
"canonical_smiles": "CC(=O)OC1=CC=CC=C1C(O)=O",
"inchi": "InChI=1S/C9H8O4/c1-6(10)13-8-5-3-2-4-7(8)9(11)12/h2-5H,1H3,(H,11,12)",
"inchikey": "BSYNRYMUTXBXSQ-UHFFFAOYSA-N",
"molecular_formula": "C9H8O4",
"molecular_weight": 180.16,
"num_atoms": 13
},
"overall_score": 95,
"issues": [],
"all_checks": [
{
"check_name": "valence_check",
"passed": true,
"severity": "critical",
"message": "All atoms have valid valence",
"affected_atoms": [],
"details": {}
}
],
"execution_time_ms": 12,
"cached": false
}

Using Python

import requests

response = requests.post(
"http://localhost:8001/api/v1/validate",
json={
"molecule": "CC(=O)Oc1ccccc1C(=O)O",
"format": "auto"
}
)

result = response.json()
print(f"Score: {result['overall_score']}")
print(f"Issues: {len(result['issues'])}")
print(f"Formula: {result['molecule_info']['molecular_formula']}")

Understanding Validation Checks

ChemAudit runs multiple validation checks grouped by category:

Critical Checks

These must pass for the structure to be valid:

CheckWhat It Validates
ValenceAll atoms have correct number of bonds
KekulizationAromatic rings can be kekulized
SanitizationMolecule passes RDKit sanitization

Warning Checks

These indicate potential issues:

CheckWhat It Detects
Undefined StereoStereocenters without R/S specification
Stereo ConsistencyConflicting stereochemistry specifications

Info Checks

Informational only, no action required:

CheckWhat It Reports
SMILES LengthUnusually long SMILES strings
InChI GenerationWhether InChI can be generated

Sample Molecules to Try

NameSMILESDescription
AspirinCC(=O)Oc1ccccc1C(=O)OCommon pain reliever
CaffeineCn1cnc2c1c(=O)n(c(=O)n2C)CStimulant
IbuprofenCC(C)Cc1ccc(cc1)C(C)C(=O)OAnti-inflammatory
Penicillin GCC1(C)SC2C(NC(=O)Cc3ccccc3)C(=O)N2C1C(=O)OAntibiotic
MorphineCN1CCC23C4C1CC5=C2C(=C(C=C5)O)OC3C(C=C4)OAnalgesic
Try Invalid Structures

To see how ChemAudit handles errors, try validating an invalid SMILES like C1CCC1 (unclosed ring) or CC(C)(C)(C)C (too many substituents).

Next Steps

Now that you've completed your first validation, explore more features: